找回密码
 立即注册
Qt开源社区 门户 查看内容

Linux之Iptables防火墙讲解​

2019-8-22 10:41| 发布者: admin| 查看: 998| 评论: 0

摘要: Linux之Iptables防火墙讲解前提:了解Linux基本操作、熟悉防火墙基本概念。说明:在当前Linux系统发行版本中,默认防火墙是firewalld防火墙,但是考虑到大部分生产环境中仍然使用Iptables防火墙,所以我们有必要学习 ...



Linux之Iptables防火墙讲解

前提:了解Linux基本操作、熟悉防火墙基本概念。

说明:在当前Linux系统发行版本中,默认防火墙是firewalld防火墙,但是考虑到大部分生产环境中仍然使用Iptables防火墙,所以我们有必要学习Iptables防火墙的基本原理和使用。首先,iptables与firewalld并不是真正的防火墙,它们只是一种服务,用来定义防火墙策略的管理工具而已。iptables服务会把配置好的防火墙策略交由内核层面的netfilter网络过滤器来处理,而firewalld服务则是把配置好的防火墙策略交由内核层面的nftables包过滤框架来处理。当然Linux系统中有多个管理防火墙的工具能熟悉运用一个就足够了。



与大部分防火墙一样,iptables防火墙策略规则是从上至下的顺序匹配的,如果都没有匹配则执行默认的策略。默认策略有两种:默认放行所有,默认拒绝所有。(这里的从上至下并不是真正意义上的从上至下,真实其实是按照表的优先级从上至下做匹配,即raw>mangle>nat>filter,也就意味着同一个规则链中,表的优先级为:raw>mangle>nat>filter。表和规则链的含义在下面会有介绍)

规则链概念:

iptables把定义的策略称为规则,多条规则组成一个规则链(如下图2),依据数据包处理位置的不同进行如下分类:在路由前处理数据包(PREROUTING),处理流入的数据包(INPUT),处理流出的数据包(OUTPUT),处理转发的数据包(FORWARD),处理路由选择后数据包(POSTROUTING),如下图1。而一般来说,我们使用最多的是INPUT规则链。





所以,根据上图1,我们能够想象出某些常用场景中报文的流向:

到本机某进程的报文:PREROUTING->INPUT

由本机转发的报文:PREROUTING->FORWARD->POSTROUTING

由本机的某进程发出报文(通常为响应报文):OUTPUT->POSTROUTING

表的概念:

我们知道多条规则组成一个链,而这些规则里面有很多相似的功能,于是我们把相似的规则放到一个表中,即我们把具有相同功能的规则的集合称为表。Iptables定义了4类表,如下:

Filter表:负责过滤功能,(这也是我们最常用到的);

Nat表:网络地址转换功能;

Mangle表:修改报文,重新封装功能;

Raw表:关闭表上启用的连接追踪机制。

也就是说我们定义的所有规则都跳脱不了这4种表功能的范围。

下面我们再说一下链与表的关系,一般来说每个规则链只能实现某几个表的功能,并不是所有的规则链能实现所有表的功能,即相应表的功能,只能相应的规则链才能使用。下面描述的是规则链能实现那些表的功能。如图:



以上是四表五链的基本概念,也是非常重要的,所以大家有必要熟记一下。然后回到开头,iptables可以做哪些规则呢?匹配到规则又能做哪些动作呢?iptables服务可以根据流量的源地址,目的地址,传输协议,服务类型等信息进行匹配,一但匹配成功,iptables就会根据策略规则所预设的动作来处理这些流量,处理动作在iptables中被称为target,这里暂时这么称呼,并不太准确。对数据包的常见的处理动作分为:ACCEPT(允许流量通过),REJECT(拒绝流量通过,然后会有拒绝的消息返回给源),LOG(记录日志信息),DROP(拒绝流量通过,没有返回消息,更好的隐藏自己)。当然还有SNAT,DNAT等。

讲完基本概念后,下面我们进行实际显示操作。

操作环境:系统环境Centos7。

提示:在Centos 7系统中, firewalld防火墙取代了 iptables防火墙。
步骤一:首先在系统中安装iptables服务,如果已安装请忽略此步。


步骤二:查看firewalld服务状态和iptables服务状态,在centos7中,默认是开启firewalld服务的。





步骤三:关闭firewalld服务,开启iptables服务。





步骤四:前面章节说过,Iptables为我们预定义了4张表,分别是raw表,mangle表,nat表,filter表,不同的表拥有不同的功能。filter负责过滤,也是我们运维中最常用到的表了,下面我们以filter表为例,来学习怎样操作iptables。

查看filter表中的规则:



-t:表示要操作的表,当然也可以是raw,mangle,nat表。需要说明当没有-t选项时,即 iptables -L时,默认是列出filter的所有表项的。

从上面可以看到3个链,分别为:INPUT链,FORWARD链,OUTPUT链,这里正好可佐证filter表只能作用于这3个链中。其它表,可自行查看。

-L:是列出表项的意思。

我们还可以加适当的参数列出列详细的内容,如下:



--line-numbers:列出行号。

-v:列出更详细的内容。

-n:禁止ip反解,前面的anywhere变成了0.0.0.0/0

相关表项说明:

pkts:表示报文匹配的个数。

bytes:表示匹配的报文总字节数。

target:表示匹配数据包处理的动作。

prot:表示匹配的协议。

in:表示进接口。

out:表示出接口。

还有需要注意的是每个链后面的括号都有(policy ACCEPT),这表示默认策略是允许所有。

添加规则:

为了准备一个从零开始的环境,我们将默认规则清空,以便我们进行实验。



-F选项为flush之意,即冲刷指定的链,即删除指定链中的所有规则,但是注意,此操作相当于删除操作,在没有保存iptables规则的情况下,请慎用。因为默认规则是允许所有,所以SSH也还是可以正常连接的。(生产环境请注意默认规则,以防中断了所有服务)

在添加规则之前,我们先了解iptables常用到的参数:



补充:-j:对匹配到数据包做出的动作行为,如:DROP,ACCEPT等。

添加规则举例:



解释说明:以上是添加源地址是192.168.159.1到本机的22端口允许放行。然后下面是将默认的策略设备为DROP,即指定允许通过的规则数据包才可以通过。

插入规则举例:



删除规则举例:



删除第2个规则。
最后,需要提醒的是,在默认的情况下,我们对“防火墙”所做出的修改都是“临时的”,换句话说就是,当重启Iptables服务或者重启服务以后,我们平常添加的规则或者对规则所做出的修改都将消失,为了防止这种情况的发生,我们需要将规则“保存”。


当我们对规则进行了修改以后,如果想要修改永久生效,必须使用service iptables save保存规则,当然,如果你误操作了规则,但是并没有保存,那么使用 service iptables restart 命令重启iptables以后,规则会再次回到上次保存/etc/sysconfig/iptables文件时的模样。
参考博客:http://www.zsythink.net/archives/tag/iptables/page/2/




感谢您抽出



.



.



来阅读本文




----------------------------------------------------------------------------------------------------------------------
我们尊重原创,也注重分享,文章来源于微信公众号:KPED联盟,建议关注公众号查看原文。如若侵权请联系qter@qter.org。
----------------------------------------------------------------------------------------------------------------------

鲜花

握手

雷人

路过

鸡蛋

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了