1、IPTABLES 基本原理学习总结iptables 防火墙可以用于创建过滤(filter)与 NAT 规则。所有 Linux 发行版都能使用 iptables,因此理解如何配置 iptables 将会帮助我们更有效地管理 Linux 防火墙。简单地讲,iptables 由 tables 组成,tables 由 chains 组成,而 chains 又由 rules 组成。Iptables 主要包括 Filter、 NAT、Mangle、 Raw 四种内建表: Filter 表Filter 表示 iptables 的默认表,因此如果没有自定义表,那么就默认使用 filter 表,它具有以下三种内建链: INPUT 链 处理来自外部的数据。 OUTPUT 链 处理向外发送的数据。 FORWARD 链 将数据转发到本机的其他网卡设备上。 2. NAT 表NAT 表有三种内建链: PREROUTING 链 处理刚到达本机并在路由转发前的数据包。它会转换数据包中的目标 IP 地址(destination ip address) ,通常用于DNAT(destination NAT) 。 POSTR
2、OUTING 链 处理即将离开本机的数据包。它会转换数据包中的源 IP 地址(source ip address) ,通常用于 SNAT(source NAT) 。 OUTPUT 链 处理本机产生的数据包。 Mangle 表Mangle 表用于指定如何处理数据包。它能改变 TCP 头中的 QoS 位。Mangle表具有 5 个内建链: PREROUTING OUTPUT FORWARD INPUT POSTROUTING Raw 表Raw 表用于处理异常,它具有 2 个内建链: PREROUTING chain OUTPUT chain因此,总体而言,iptables 包括 5 个链和 4 个表,iptables 的 5 个链分别为 PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING。4 个表分别为filter、nat、mangle、raw。4 个表的优先级由高到低的顺序为:rawmanglenatfilter。RAW 表只使用在 PREROUTING 链和 OUTPUT 链上,因为优先级最高,从而可以对收到的数据包在连接跟踪前进行处理。一旦用户使用
3、了 RAW 表,在某个链上 RAW 表处理完后将跳过 NAT 表和 ip_conntrack 处理,即不再做地址转换和数据包的链接跟踪处理了。数据包在 iptables 各表各链上的处理流程如下图所示:数据包流经 iptables 的路径针对上图给出的数据包流经 iptables 的路径,以下内容将分析各类流量的处理过程,分别包括流入本机数据包、流出本机数据包、流经本机转发的数据包。(1)流入本机数据包的路径:所属表 mangle nat mangle nat filter网络数据包 PREROUTING PREROUTING 路由选择 INPUT INPUT INPUT 本地处理进程(2)流出本机数据包的路径:所属表 mangle filter mangle nat本地处理进程 OUTPUT OUTPUT 路由选择 POSTROUTING POSTROUTING 外部网络(3)流经本机转发的数据包的路径:所属表 mangle nat mangle filter A 端网络 PREROUTING PREROUTING 路由选择 FORWARD FORWARD mangle natPOS
4、TROUTING POSTROUTING B 端网络数据包在 iptables 中的处理过程基本如下: 数据包到达网络接口,比如 eth0。 进入 raw 表的 PREROUTING 链,这个链的作用是赶在连接跟踪之前处理数据包。 如果进行了连接跟踪,在此处理。 进入 mangle 表的 PREROUTING 链,在此可以修改数据包,比如 TOS 等。 进入 nat 表的 PREROUTING 链,可以在此做 DNAT,但不要做过滤。 决定路由,看是交给本地主机还是转发给其它主机。到了这里我们就得分两种不同的情况进行讨论了,一种情况就是数据包要转发给其它主机,这时候它会依次经过: 进入 mangle 表的 FORWARD 链,这里也比较特殊,这是在第一次路由决定之后,在进行最后的路由决定之前,我们仍然可以对数据包进行某些修改。 进入 filter 表的 FORWARD 链,在这里我们可以对所有转发的数据包进行过滤。需要注意的是:经过这里的数据包是转发的,方向是双向的。 进入 mangle 表的 POSTROUTING 链,到这里已经做完了所有的路由决定,但数据包仍然在本地主机,我们还可
5、以进行某些修改。 进入 nat 表的 POSTROUTING 链,在这里一般都是用来做 SNAT ,不要在这里进行过滤。 进入出去的网络接口,完毕。另一种情况是,数据包就是发给本地主机的,那么它会依次穿过: 进入 mangle 表的 INPUT 链,这里是在路由之后,交由本地主机之前,我们也可以进行一些相应的修改。 进入 filter 表的 INPUT 链,在这里我们可以对流入的所有数据包进行过滤,无论它来自哪个网络接口。 交给本地主机的应用程序进行处理。 处理完毕后进行路由决定,看该往那里发出。 进入 raw 表的 OUTPUT 链,这里是在连接跟踪处理本地的数据包之前。 连接跟踪对本地的数据包进行处理。 进入 mangle 表的 OUTPUT 链,在这里我们可以修改数据包,但不要做过滤。 进入 nat 表的 OUTPUT 链,可以对防火墙自己发出的数据做 NAT 。 再次进行路由决定。 进入 filter 表的 OUTPUT 链,可以对本地出去的数据包进行过滤。 进入 mangle 表的 POSTROUTING 链,这里不光对经过防火墙的数据包进行处理,还对防火墙自己产生的数据包进行处理。 进入 nat 表的 POSTROUTING 链。 进入出去的网络接口,完毕。
《【个人总结系列-25】iptables基本原理学习总结》由会员第***分享,可在线阅读,更多相关《【个人总结系列-25】iptables基本原理学习总结》请在金锄头文库上搜索。