学习笔记,详细内容请参阅http://www.zsythink.net/archives/1199/。
防火墙分类:网络 /主机 硬件/软件。
防火墙相当于一个关口,所有的网络数据包都要通过这个关口。防火墙对通过的数据包进行检查,根据数据包的特征,如:源地址是什么,目的地址是什么,端口是什么,所用的传输协议(tcp,udp,icmp),应用协议(http,ftp,smtp)等等,进行不同的处理,如:放行,抛弃,拒绝,转发,修改包内容等等。这也就是防火墙所应用的规则:根据匹配条件,执行相应动作。
实际实现防火墙功能中,在每个关口数据包都要经过不止一条规则的检查,因为这些规则是按顺序链接成一个规则链,所以关口在防火墙中被称为“链”(chain)。根据数据包传输路径的不同提供了5种链: PREROUTING,INPUTING, FORWARD, ,OUTPUT,POSTROUTING。
防火墙规则的功能分为了4类,存储的规则也按照功能的分类分别存储在4个相应的表中:
raw表: 关闭nat表中启用的连接追踪机制。内核模块:iptables_raw。
mangle表:拆解报文过滤,修改内容,重新封装。内核模块:iptables_mangle。
nat表:网络地址转换。iptables_nat。
filter表:过滤数据包。内核模块 iptables_filter。
链上的规则存储在不同的表中,但各表中的优先级不同:raw->mangle->nat->filter. 在一个链上执行规则时,按照上述规则的优先级先执行raw表中的规则,最后执行filter表中的规则。
不同链上的规则可以存储在哪些表中:
PREROUTING: raw表,mangle表,nat表
INPUT:mangle表,filter表(centos7 还有nat表)
FORWARD:mangle表,filter表
OUTPUT:raw表,mangle表,nat表,filter表
POSTROUTIN:mangle表,nat表
一个数据包通过防火墙的流程场景如下图所示:
场景一:网络->PREROUTING->INPUT->主机.
规则处理顺序:PREROUTING.raw->PREROUTING.mangle->PREROUTING.nat->INPUT.mangle->INPUT.filter.
场景二:网络->PREROUTING->FORWARD->POSTROUTING->网络.
规则处理顺序:
PREROUTING.raw->PREROUTING.mangle->PREROUTING.nat->FORWARD.mangle->FORWARD.filter->POSTROUTING.mangle->POSTROUTING.nat
场景三:主机->OUTPUT->POSTROUTING->网络.
规则处理顺序:
OUTPUT.raw->OUTPUT.mangle->OUTPUT.nat->OUTPUT.filter->POSTROUTING.mangle->POSTROUTING.nat
由上可以发现 一次数据包的传输会被不同的链处理,因而mangle表和nat表可能会被多次访问。