摘抄自http://www.zsythink.net/archives/1199
原文写得很好很详细图文并茂。
iptables链的概念
现在,我们想象一下,这些"关卡"在iptables中为什么被称作"链"呢?我们知道,防火墙的作用就在于对经过的报文匹配"规则" ,然后执行对应的“动作",所以,当报文经过这些关卡的时候,则必须匹配这个关卡上的规则,但是,这个关卡上可能不止有一条规则,而是有很多条规则,当我们把这些规则串到一个链条上的时候,就形成了"链",所以,我们把每一个"关卡"想象成如下图中的模样,这样来说,把他们称为"链"更为合适,每个经过这个关卡"的报文,都要将这条"链"上的所有规则匹配一遍,如果有符合条件的规则则执行规则对应的动作。
iptables表的概念
我们把具有相同功能的规则的集合叫做"表" ,所以说,不同功能的规则,我们可以放置在不同的表中进行管理,而iptables已经为我们定义了4种表,每种表对应了不同的功能,而我们定义的规则也都逃脱不了这4种功能的范围,所以,学习iptables之前,我们必须先搞明白每种表的作用。iptables为我们提供了如下规则的分类,或者说, iptables为我们提供了如下"表"
filter表:负责过滤功能,防火墙;内核模块: iptables_filter
nat表: network address translation,网络地址转换功能;内核模块: iptable_nat
mangle表:拆解报文,做出修改,并重新封装的功能;iptable_mangle
raw表:关闭nat表上启用的连接追踪机制;iptable_raw
也就是说,我们自定义的所有规则,都是这四种分类中的规则,或者说,所有规则都存在于这4张"表"中。
表和链的关系
每个"链"中的规则都存在于哪些"表"中。
PREROUTING 的规则可以存在于: raw表, mangle表, nat表。
INPUT 的规则可以存在于: mangle表, filter表,(centos7中还有nat表, centos6中没有).
FORWARD 的规则可以存在于: mangle表, filter表。
OUTPUT 的规则可以存在于: raw表mangle表, nat表,filter表。POSTROUTING 的规则可以存在于: mangle表, nat表。
我们在实际的使用过程中,往往是通过"表"作为操作入口,对规则进行定义的,之所以按照上述过程介绍iptables ,是因为从“关卡"的角度更容易从入门的角度理解,但是为了以便在实际使用的时候,更加顺畅的理解它们,此处我们还要将各"表"与"链"的关系罗列出来
表(功能)<–>链(钩子) :
raw 表中的规则可以被哪些链使用: PREROUTING, OUTPUT
mangle表中的规则可以被哪些链使用: PREROUTING , INPUT , FORWARD , OUTPUT , POSTROUTING
nat 表中的规则可以被哪些链使用: PREROUTING , OUTPUT , POSTROUTING ( centos7中还有INPUT , centos6中没有)
filter表中的规则可以被哪些链使用:INPUT , FORWARD, OUTPUT