iptables三表五链
iptables三表五链
1. iptables的概述
IPtables实际上就是一种包过滤性防火墙。也就是通过书写一些接受哪些包,拒绝哪些包的规则,实现数据包的过滤,这些规则储存在专用的信息报过滤表中,而这些表集成在Linux内核中,在信息包过滤表中,规则被分组放在我们所谓的链中。
2. iptables的组成
IPtables由两部分组成:
- Framework:netfilter hooks function钩子函数,实现网络过滤的基本框架。
- Rule utils:IPtables规则管理工具
3. iptables的三表五链简述
*三表*
- Filter:过滤、防火墙、过滤数据包
- Nat:用于网络地址转换(IP、端口)
- Mangle:解析报文,做出修改,等装报文
*五链*
- Prerouting链:数据包进入路由器之前
- Input链:目的地址本机
- Forword链:实现转发
- Output链:原地址为本机,向外发送
- Postrouting链:发送到网卡之前
4. iptables中表与链的对应关系,其实就是一个表中包含哪几个链:
- 如果要访问某台主机上面的http服务,必须先经过那台主机的内核允许,才可以进行访问
- 防火墙其实也是在内核上面开启的一个服务
- 防火墙里面有表格,写一些规则,允许哪个主机访问什么服务,这个表格由iptables进行控制
- 但是有两种规则:iptables 与 firewalld
- 第一张表:filter表格:放的是经过内核的ip input output forward
- 第二张表:nat表格:放的不是经过内核的服务 input output postrouting prerouting
- 第三张表:备用表格mangle: input output forward postrouting prerouting
- 当172.25.254这个网段的主机想去访问1.1.1网段的主机的时候,因为二者不在一个网段,因此中间需要有一个具有地址伪装功能的主机,它有两个网卡。
8. iptables 数据包流程
基本步骤如下:
数据包到达网络接口,比如 eth0。
-
进入 raw 表的 PREROUTING 链,这个链的作用是赶在连接跟踪之前处理数据包。
-
如果进行了连接跟踪,在此处理。
-
进入 mangle 表的 PREROUTING 链,在此可以修改数据包,比如 TOS 等。
-
进入 nat 表的 PREROUTING 链,可以在此做DNAT,但不要做过滤。
-
决定路由,看是交给本地主机还是转发给其它主机。
到了这里我们就得分两种不同的情况进行讨论了,一种情况就是数据包要转发给其它主机,这时候它会依次经过
-
进入 mangle 表的 FORWARD 链,这里也比较特殊,这是在第一次路由决定之后,在进行最后的路由决定之前,我们仍然可以对数据包进行某些修改。
-
进入 filter 表的 FORWARD 链,在这里我们可以对所有转发的数据包进行过滤。需要注意的是:经过这里的数据包是转发的,方向是双向的。
-
进入 mangle 表的 POSTROUTING 链,到这里已经做完了所有的路由决定,但数据包仍然在本地主机,我们还可以进行某些修改。
-
进入 nat 表的 POSTROUTING 链,在这里一般都是用来做 SNAT ,不要在这里进行过滤。
-
进入出去的网络接口。完毕。
另一种情况是,数据包就是发给本地主机的,那么它会依次穿过
-
进入 mangle 表的 INPUT 链,这里是在路由之后,交由本地主机之前,我们也可以进行一些相应的修改。
-
进入 filter 表的 INPUT 链,在这里我们可以对流入的所有数据包进行过滤,无论它来自哪个网络接口。
-
交给本地主机的应用程序进行处理。
-
处理完毕后进行路由决定,看该往那里发出。
-
进入 raw 表的 OUTPUT 链,这里是在连接跟踪处理本地的数据包之前。
-
连接跟踪对本地的数据包进行处理。
-
进入 mangle 表的 OUTPUT 链,在这里我们可以修改数据包,但不要做过滤。
-
进入 nat 表的 OUTPUT 链,可以对防火墙自己发出的数据做 NAT 。
-
再次进行路由决定。
-
进入 filter 表的 OUTPUT 链,可以对本地出去的数据包进行过滤。
-
进入 mangle 表的 POSTROUTING 链,同上一种情况的第9步。注意,这里不光对经过防火墙的数据包进行处理,还对防火墙自己产生的数据包进行处理。
-
进入 nat 表的 POSTROUTING 链,同上一种情况的第10步。
-
进入出去的网络接口。完毕。