iptables -A和-I选项之间的区别


20

我一直在尝试(几个小时)来配置iptables以允许对我的DNS服务器进行DNS查询,只是发现由于我一直在使用规则添加选项,我的iptables一直阻止访问。大多数论坛建议类似以下规则:

iptables -A INPUT -p udp -m udp --dport 53 -j ACCEPT

但是,就我而言,我必须将规则更改为一种insert类型才能使其起作用:

iptables -I INPUT -p udp -m udp --dport 53 -j ACCEPT

我知道一条规则是附加的,另一条规则是插入的,这两个术语都意味着什么,但是有人可以解释一下两者之间的区别以及何时使用哪个选项吗?我查看了Ubuntu的iptables怎么做,但是在那里没有看到太多信息。

Answers:


24

iptables -Aiptables -I如您所指出的,将规则添加到规则集的末尾,而将规则插入规则集的特定位置。

查看iptables的man条目将显示以下内容:

-I,-插入链[rulenum]规则规范在选定链中插入一个或多个规则作为给定的规则号。因此,如果规则编号为1,则将一条或多条规则插入到链的开头。如果未指定规则编号,这也是默认值。

这就是为什么-I为您服务而-A没有为您服务的原因。如果您不提供任何Rulenum,则将规则插入到第一位置。在您的情况下,这意味着您的规则集中必须有一个禁止DNS数据包的规则(也许是通常禁止UDP的规则?),因为iptables处理从第一个到最后一个的所有规则,应用第一个匹配并停止。
顺便说一句,这也是为什么您应该将旨在匹配大多数数据包的规则放在顶部的原因:如果将最常用的规则放在和上,则会针对每条规则检查数据包,这可能会消耗大量资源。

用法:-A当您想在末尾附加一条规则,或者与规则的位置无关时,都可以节省使用。如果要将规则放在特定位置,请使用-I以下示例:(iptables -I INPUT 6 -p tcp -j DROP这将在INPUT规则集中的位置6处为所有发送到主机的tcp数据包添加DROP语句。)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.