我一直在尝试(几个小时)配置 iptables 以允许对我的 DNS 服务器进行 DNS 查询,但刚刚发现我的 iptables 由于我一直在使用的规则添加选项而一直阻止访问。大多数论坛都建议了类似于以下内容的规则:
iptables -A INPUT -p udp -m udp --dport 53 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)
但是,就我而言,我必须将规则更改为一种insert类型才能使其正常工作:
iptables -I INPUT -p udp -m udp --dport 53 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)
我知道一个规则用于附加,另一个用于插入以及这两个术语的含义,但是有人可以解释一下两者之间的区别以及何时使用哪个选项吗?我查找了 Ubuntu 的 iptables how to 但在那里没有看到太多信息。
wul*_*lxz 31
iptables -A在规则集的末尾附加规则,而iptables -I在您指出的规则集中的特定位置插入规则。
查看 iptables 的 man 条目显示:
-I, --insert chain [rulenum] rule-specification 在选定的链中插入一个或多个规则作为给定的规则编号。因此,如果规则编号为 1,则将一条或多条规则插入到链的头部。如果未指定规则编号,这也是默认设置。
这就是为什么-I对你有用而-A没有的原因。如果您不提供任何规则编号,您的规则将插入到第一个位置。这意味着在您的情况下,您的规则集中的某处必须有一个禁止 DNS 数据包的规则(可能是一个通常禁止 UDP 的规则?)因为 iptables 处理从第一个到最后一个的所有规则,应用第一个匹配并停止。
顺便说一句,这也是为什么您应该将旨在匹配大多数数据包的规则放在顶部的原因:如果您将最常用的规则放在 and 中,则会根据每个可能消耗大量资源的规则检查数据包。
对于用法:-A当您想在最后附加规则或规则在哪里无关紧要时,您可以节省使用。如果您希望您的规则位于特定位置,请使用-I如下示例:(iptables -I INPUT 6 -p tcp -j DROP这将为在 INPUT 规则集中的位置 6 上寻址到主机本身的所有 tcp 数据包添加一个 DROP 语句。)
| 归档时间: |
|
| 查看次数: |
27229 次 |
| 最近记录: |