前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux中的防火墙简介

Linux中的防火墙简介

作者头像
AsiaYe
发布2019-11-06 17:03:20
2.1K0
发布2019-11-06 17:03:20
举报
文章被收录于专栏:DBA随笔DBA随笔

Linux中的防火墙简介

Linux防火墙这块儿的内容比较多,一直以来,都是一个使用者的角色,最近在看一些防火墙相关的知识,简单列一下,大家也可以了解一下。

01

防火墙iptables简介

防火墙从逻辑上讲,分为主机防火墙和网络防火墙,

主机防火墙针对单个主机进行防护;

网络防火墙处于网络入口或者边缘,针对于网络入口进行防护。

从物理上讲,防火墙分为硬件防火墙和软件防火墙,

硬件防火墙:在硬件级别实现部分防火墙功能,性能高,成本高

软件防火墙:基于软件实现的防火墙,性能低,成本低。

其实说白了讲,Linux中的防火墙就是用于实现Linux下IP访问控制的功能,我们的任务就是需要去定义到底防火墙如何工作,这就是防火墙的策略和规则。

iptables的前身叫ipfirewall (内核1.x时代),当内核发展到2.x系列的时候,软件更名为ipchains,它可以定义多条规则,将他们串起来,共同发挥作用,而现在,它叫做iptables,可以将规则组成一个列表,实现绝对详细的访问控制功能。iptables是工作在用户空间中,定义规则的工具,本身并不算是防火墙。我们可以把它理解成一个客户端代理,用户通过iptables这个代理,将用户的安全设定执行到对应的“安全框架”中,这个安全框架才是真正的防火墙,这个框架的名字叫做netfilter,iptables定义的规则,可以让在内核空间当中的netfilter来读取,并且实现让防火墙工作,所以netfilter才是真正的安全框架(framework)。

02

表和链的概念

netfilter和iptables组成linux平台下的包过滤防火墙,与大多数的Linux软件一样,他可以完成封包过滤、封包重定向和网络地址转换等功能。在iptables中定义的规则,必须要放入内核中功netfilter读取,而放入内核的地方,一共分为五处:

1.内核空间中:从一个网络接口进来,到另一个网络接口出去

2.数据包从内核流入用户空间的

3.数据包从用户空间流出的

4.进入/离开本机的外网接口

5.进入/离开本机的内网接口

这五个位置也被称为五个钩子函数(hook functions),也叫五个规则链。

1.PREROUTING (路由前)

2.INPUT (数据包流入口)

3.FORWARD (转发管卡)

4.OUTPUT(数据包出口)

5.POSTROUTING(路由后)

下面我们用一张图来说明防火墙对于网络报文的控制流程:

可以看到,每一个规则链都在网络的不同位置扮演不同的角色,从上面的图不难看出报文的流向如下:

传到本机的报文:prerouting-->input

由本机转发的报文:prerouting-->forward-->postrouting

由本机的某个进程发出报文:output-->postrouting

上面介绍了链的概念,下面我们介绍表的概念,表总体分为一下几类:

filter表:负责过滤功能,防火墙;

nat表:network address translation,网路地址转换功能

managle表:拆解报文,作出修改,并重新封装

raw表:关闭nat表上启用的链接追踪机制

03

表和链的对应关系

某些链中只包含某些表,并不是每个链都包含上述这几种表,表和链的对应关系如下:

当一个链中同事包含四种表的时候,这四个表的优先级顺序如下:

raw-->mangle-->nat-->filter

只有output链能够同时包含这四种表,这也就是为什么我们的防火墙文件中output项比较多的原因。

04

匹配规则

只有满足匹配规则的报文才能被转发

基本匹配条件

源地址Source IP和目标地址Destination IP

上述内容都可以作为基本匹配条件。

扩展匹配规则

这里不展开细说,可以是源端口和目标端口,源地址、目的地址、传输协议、服务协议等,

当规则匹配之后,处理方法如下:

规则所定义的方法:

ACCEPT:允许通过

LOG:记录日志信息,然后传给下一条规则继续匹配。

REJECT:拒绝通过,必要时给出提示。

DROP:直接丢弃,不给出任何回应。

匹配规则查看方法:

iptables -t filter -L 查询filter表的所有规则

iptables -t raw -L 查看raw表的所有规则

类比一下,其他两种表的查看方法也类似上面。

当我们使用iptables -L的时候,其默认的表是filter表,我们可以使用参数v显示更加详细的信息,如下:

代码语言:javascript
复制
[dba_mysql ~]$sudo iptables -vL | grep 192.168
    0     0 ACCEPT     tcp  --  any    any     192.168.18.46        anywhere            tcp spts:1024:65535 multiport dports visicron-vs state NEW 
    0     0 ACCEPT     tcp  --  any    any     192.168.18.49        anywhere            tcp spts:1024:65535 multiport dports visicron-vs state NEW 
    3   156 ACCEPT     tcp  --  any    any     192.168.18.228       anywhere            tcp spts:1024:65535 multiport dports visicron-vs state NEW  
    3   152 ACCEPT     tcp  --  any    any     192.168.0.0/16       anywhere            tcp spts:1024:65535 multiport dports mysql,33306,ms-sql-s,27017,28017 state NEW 
    0     0 ACCEPT     tcp  --  any    any     192.168.0.0/16       anywhere            tcp spts:1024:65535 dpt:rsync state NEW 
    0     0 ACCEPT     tcp  --  any    any     192.168.18.92        anywhere            tcp spts:1024:65535 multiport dports pinghgl,visicron-vs,compx-lockview,dserver,mirrtex,4311 state NEW 

这里我们之过滤192.168网段的数据,这样数据会相对少一些。

清除防火墙内容:

iptbles -F INPUT 清空filter表input链中的规则

05

匹配规则测试

下面我们用192.168.197.136和192.168.197.137两台机器做个测试,他们的hostname分别对应work_NAT_5和work_NAT_4:

1、清理136防火墙,

2、137--->136 ping命令

首先我们从137往136发送一个ping命令

代码语言:javascript
复制
[root@work_NAT_4 ~]# ping 192.168.197.136

PING 192.168.197.136 (192.168.197.136) 56(84) bytes of data.

64 bytes from 192.168.197.136: icmp_seq=1 ttl=64 time=0.155 ms

64 bytes from 192.168.197.136: icmp_seq=2 ttl=64 time=0.216 ms

^C

--- 192.168.197.136 ping statistics ---

2 packets transmitted, 2 received, 0% packet loss, time 1288ms

rtt min/avg/max/mdev = 0.155/0.185/0.216/0.033 ms

可以看到这个是可以ping通的,然后我们给136上面添加一定的规则,命令和执行结果如下:

代码语言:javascript
复制
iptables -t filter -I INPUT -s 192.167.197.137 -j DROP
[root@work_NAT_5 ~]# iptables -t filter -I INPUT -s 192.168.197.137 -j DROP

此时发现137已经无法ping 通了
[root@work_NAT_4 ~]# ping 192.168.197.136
PING 192.168.197.136 (192.168.197.136) 56(84) bytes of data.
^C
--- 192.168.197.136 ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 1950ms

其中参数-I表示添加一条规则,-s表示源目标

这个时候,我们去思考,如果添加一条ACCEPT,另外一条是DROP到底哪一条生效呢?目前防火墙中的内容如下:

代码语言:javascript
复制
[root@work_NAT_5 ~]# iptables -t filter -I INPUT -s 192.168.197.137 -j DROP
[root@work_NAT_5 ~]# iptables -t filter -A INPUT -s 192.168.197.137 -j ACCEPT
[root@work_NAT_5 ~]# iptables -nvL INPUT
Chain INPUT (policy ACCEPT 40 packets, 2880 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    6   504 DROP       all  --  *      *       192.168.197.137      0.0.0.0/0           
    0     0 ACCEPT     all  --  *      *       192.168.197.137      0.0.0.0/0

我们发现DROP在ACCEPT的上面,此时我们ping一下:

[root@work_NAT_4 ~]# ping 192.168.197.136
PING 192.168.197.136 (192.168.197.136) 56(84) bytes of data.
^C
--- 192.168.197.136 ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 1798ms
发现还是无法ping通,查看197.136服务器,发现又多了两个DROP的包,也就是说,刚才我们发的那两个包被丢弃了!!!

查看136的input链:

此时我们换一下,这两个规则的顺序,如下:

代码语言:javascript
复制
136
[root@work_NAT_5 ~]# iptables -F INPUT
[root@work_NAT_5 ~]# iptables -t filter -I INPUT -s 192.168.197.137 -j ACCEPT
[root@work_NAT_5 ~]# iptables -t filter -A INPUT -s 192.168.197.137 -j DROP
[root@work_NAT_5 ~]# iptables -nvL INPUT
Chain INPUT (policy ACCEPT 40 packets, 2880 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     all  --  *      *       192.168.197.137      0.0.0.0/0           
0     0 DROP       all  --  *      *       192.168.197.137      0.0.0.0/0 

137:
[root@work_NAT_4 ~]# ping 192.168.197.136
PING 192.168.197.136 (192.168.197.136) 56(84) bytes of data.
64 bytes from 192.168.197.136: icmp_seq=1 ttl=64 time=0.281 ms
64 bytes from 192.168.197.136: icmp_seq=2 ttl=64 time=0.280 ms
64 bytes from 192.168.197.136: icmp_seq=3 ttl=64 time=0.239 ms
^C
--- 192.168.197.136 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2541ms
rtt min/avg/max/mdev = 0.239/0.266/0.281/0.027 ms

已经可以ping通了,说明规则顺序会对数据报的传输产生影响

关于防火墙的参数还有很多,包含表规则修改、修改默认策略等等,后续将详细说明具体规则的用法。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-04-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DBA随笔 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
NAT 网关
NAT 网关(NAT Gateway)提供 IP 地址转换服务,为腾讯云内资源提供高性能的 Internet 访问服务。通过 NAT 网关,在腾讯云上的资源可以更安全的访问 Internet,保护私有网络信息不直接暴露公网;您也可以通过 NAT 网关实现海量的公网访问,最大支持1000万以上的并发连接数;NAT 网关还支持 IP 级流量管控,可实时查看流量数据,帮助您快速定位异常流量,排查网络故障。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档