iptables 规则应用需要多长时间?

iptables 规则应用需要多长时间?

iptables 规则应用需要多长时间?

我使用包含以下代码的脚本尝试阻止主机,但似乎没有立即生效。是否存在延迟、iptables 是否不起作用,或者代码是否完全错误?

#!/bin/sh
echo $1 >> /etc/dropped_hosts
iptables -A INPUT -s $1 -j DROP
iptables -A OUTPUT -d $1 -j DROP

答案1

iptables规则立即生效。

由于此脚本是附加的,因此在此脚本之前可能有一条规则,规定自动允许您尝试阻止的主机。iptables 从上到下读取规则,并在找到匹配项后立即中断(因此,如果您有某行规定“允许 badhostx”,然后下一行是“删除 badhostx”,则它永远不会删除,因为该规则已与该主机匹配。

如果您在脚本中使用 -A,您可能需要先刷新表格(iptables --flush),以确保规则与您在脚本中应用的完全一样(但也要确保您拥有该脚本中的所有规则)。

除了运行该脚本之外,另一个选择是获取您想要运行的规则,然后执行“service iptables save”或“/etc/init.d/iptables save”。希望这能有所帮助。

答案2

iptables规则立即生效。由于您的脚本正在附加 (-A) 到 INPUT 和 OUTPUT 链,因此您的规则将被添加到这些链的末尾。如果您有其他终止规则先于这些规则,那么它们将生效(而后面的规则则不会生效)。

例如,-m state --state ESTABLISHED,RELATED -j ACCEPT在 INPUT/OUTPUT 链的早期设置一条规则是很常见的,并且该规则将优先于其后的任何规则生效。该规则允许已建立的连接继续,即使这些连接来自/发往您通过脚本添加到防火墙的 IP 地址。

如果您的 INPUT/OUTPUT 链中确实有 ESTABLISHED,RELATED 规则(或覆盖后续规则的其他规则),那么您要么必须接受新规则可能不会立即生效,要么可以让脚本在 ESTABLISHED,RELATED 规则之前插入 IP 地址 DROP 规则。这可以通过将脚本更改为插入 (-I) 而不是附加 (-A) IP 地址 DROP 规则来实现,例如

iptables -I INPUT -s $1 -j DROP
iptables -I OUTPUT -d $1 -j DROP

答案3

您必须在过滤表的开头添加规则。因此,您必须使用 -I(插入)而不是 -A(附加)

相关内容