对于 `iptables` 来说,链的顺序重要吗?

对于 `iptables` 来说,链的顺序重要吗?

是否命令重要吗?例如:

iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A FORWARD -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT

如果是这样,那么按时间顺序阅读时,forward在这个规则链中排在第二位是否正确,还是这相当主观?iptables

答案1

命令的顺序iptables不会影响预定义链的处理方式。默认链INPUTFORWARDOUTPUT不会按顺序处理,通过INPUT链的数据包不会击中FORWARDOUTPUT链,通过的数据包FORWARD不会进入OUTPUTINPUT链等。请参阅iptables 教程

答案2

您在不同的链中打乱了一条链中规则的顺序,这很重要。对于您的示例,这无关紧要,因为和链INPUT中的规则针对完全不同的数据包进行处理。FORWARDOUTPUT

但是如果你将规则添加到同一个链中,那么顺序就变得绝对重要:

iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j REJECT

这样,第一个规则 ACCEPT 将被首先添加。一旦数据包与该规则匹配,它就会被 ACCEPT 并离开链。即,REJECT 规则在上述示例中永远不会起作用,因为数据包将始终首先匹配 ACCEPT 规则。

相关内容