iptables匹配的规则

如果一个规则与数据包相匹配,并且具有-j DROP ,我知道数据包将停止遍历其余规则。 但是,我不明白如果数据包将符合规则与-j接受会发生什么? 它会再次停止遍历整个规则,否则将尝试匹配其他规则? 换句话说,如果一个球员有很多规则要匹配,会发生什么。

第一场比赛获胜,如果目标是“终止”目标,则处理停止; 这些包括DROPACCEPTDNAT等等。 它们是决定数据包最终处置的目标; 如果用-j OH-SORRY-I-DIDNT-MEAN-IT可以重写三行,则-j REJECT

第一场比赛胜利,如果目标是“不终止”,处理不会停止; 那些包括LOGULOG ,并发送数据包到用户定义的链。 在后一种情况下,处理继续通过该链中的规则,如果没有与终止目标相匹配,则该分组“落在链的底部”,并且在发送链之后返回到调用链中的规则用户定义的链。

明白了吗? 首场比赛胜利总是适用,这就是为什么规则的顺序是重要的。

一般来说,有两种iptables的目标:

  • 非终止目标(例如LOG,ULOG,TOS,MARK,CONNMARK,NOTRACK,CONNTRACK)
  • 终止目标(如接受,拒绝,拒绝)

非终止意味着,在应用了某个动作之后,数据包继续到同一链/表中的下一个规则

终止是指在应用某个动作之后,处理在该结束。 如果数据包仍然存在,则数据包将根据netfilterstream程序列(见下文)继续到下一个表格。 当然,在REJECT和DROP的情况下,数据包不再存在,所以自然不会有更多的处理。

关于iptables的维基百科文章提供了一个数据包将遇到的表/链的顺序图。