防火墙分类:网络 /主机    硬件/软件。

防火墙相当于一个关口,所有的网络数据包都要通过这个关口。防火墙对通过的数据包进行检查,根据数据包的特征,如:源地址是什么,目的地址是什么,端口是什么,所用的传输协议(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表

 

一个数据包通过防火墙的流程场景如下图所示:

ebtables 来替代 arptables_源地址

场景一:网络->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表可能会被多次访问。