首先
我们需要注意的是,某些“链中注定不会包含某类规则°,就像某些"关卡"天生就不具备某些功能一样,比如,A"关卡"只负责打击陆地敌人,没有防空能力,B"关卡“只负
责打击空中敌人,没有防御步兵的能力,C关卡"可能比较NB,既能防空,也能防御陆地敌人,D"关卡·最屌,海陆空都能防。
那让我们来看看,每个关卡都有哪些能力,或者说,让我们看看每个"链"上的规则都存在于哪些表"中。
我们还是以图为例,先看看 prerouting "链"上的规则都存在于哪些表中。
注意:下图只用于说明 prerouting 链上的规则存在于哪些表中,并没有描述表的顺序。
这幅图是什么意思呢?它的意思是说, prerouting链只拥有nat表、raw表和 mangle表所对应的功能,所以, prerouting中的规则只能存放于nat表、raw表和 mangle表中
那么,根据上述思路,我们来总结一下,每个关卡”都拥有什么功能,
或者说,每个”链中的规则都存在于哪些”表”中。
PREROUTING的规则可以存在于:raw表, mangle表,nat表
NPUT的规则可以存在于: 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中还有NPUT, centos6中没有)
filter表中的规则可以被哪些链使用: INPUT, FORWARD, OUTPUT
其实我们还需要注意一点,因为数据包经过一个链的时候,会将当前链的所有规则都匹配遍,但是匹配时总归要有顺序,我们应该一条一条的去匹配,而且我们说过,相同
功能类型的规则会汇聚在一张”表中,那么,哪些“表"中的规则会放在链”的最前面执行呢,这时候就需要有一个优先级的问题,我们还拿 prerouting"链"做图示
prerouting链中的规则存放于三张表中,而这三张表中的规则执行的优先级如下
raw --> mangle—> nat
但是我们知道, iptables为我们定义了4张长"表"当他们处于同一条"链"时,执行的优先级如下
优先级次序(由高而低):
raw -- mangle --> nat—> filter
但是我们前面说过,某些链天生就不能使用某些表中的规则,所以,4张长表中的规则处于同一条链的目前只有 output链,它就是传说中海陆空都能防守的关卡。