iptables -A INPUT -p udp -m udp --dport 53 -j ACCEPT
但是,就我而言,我必须将规则更改为插入类型才能使其工作:
iptables -I INPUT -p udp -m udp --dport 53 -j ACCEPT
我知道一个规则是附加插入,另一个规则是插入,以及两个术语的含义,但有人可以解释两者之间的区别以及何时使用哪个选项?我查了一下Ubuntu的iptables如何,但没有看到太多的信息.
解决方法
查看iptables的man条目显示:
-I,–insert chain [rulenum] rule-specification Insert one or more rules in the selected chain as the given rule number. So,if the rule
number is 1,the rule or rules are inserted at the head of the chain.
This is also the default if no rule number is specified.
这就是为什么 – 我为你工作而-A不工作的原因.如果您不提供任何气压,则会在第一个位置插入您的规则.这意味着在你的情况下,你的规则集中的某个地方必须有一个禁止DNS数据包的规则(可能是一般禁止UDP的规则?)因为iptables处理从第一个到最后一个的所有规则,应用第一个匹配并停止.
顺便说一下,这也是为什么你应该把与大多数数据包匹配的规则放在最上面的原因:如果你把最常用的规则放在和,那么根据每个可能消耗大量资源的规则来检查数据包.
并且用于:当你想在最后附加规则或者你的规则在哪里无关紧要时,你可以保存使用-A.如果你想要你的规则在特定的位置,使用-I像这样:例如:iptables -I INPUT 6 -p tcp -j DROP(这将为所有tcp数据包添加一个DROP语句,该数据包发送到主机本身的位置6 INPUT规则集.)