应用iptables规则需要多长时间?
我使用下面的代码脚本试图阻止主机,但他们似乎并没有立即采取。 是否有一些延迟,是iptables不工作或是代码只是明显的错误?
#!/bin/sh echo $1 >> /etc/dropped_hosts iptables -A INPUT -s $1 -j DROP iptables -A OUTPUT -d $1 -j DROP
由于这个脚本附加了,所以在这之前可能有一个规则,说自动允许你试图阻塞的主机。 iptables从上到下读取规则,一旦find匹配就会中断(因此,如果你有一些说'allow badhostx',然后下一行是'drop badhostx',它永远不会下降,因为规则已经匹配主办。
如果您在脚本中使用-A,则可能需要先刷新表(iptables –flush),以确保规则与您在脚本中应用的规则完全相同(还要确保您具有所有规则在那个脚本)。
另一个select,而不是运行该脚本是得到你想要的规则工作,然后做“服务iptables保存”或“/etc/init.d/iptables保存”。 希望这可以帮助。
iptables
规则立即生效。 由于您的脚本正在添加(-A)到INPUT和OUTPUT链,因此您的规则将被添加到这些链的末尾。 如果在这些规则之前还有其他终止规则,则它们将生效(而后面的规则则不会)。
例如,在INPUT / OUTPUT链中早期有一个-m state --state ESTABLISHED,RELATED -j ACCEPT
规则是非常普遍的,而且这个规则将优先于任何后面的规则。 该规则允许build立的连接继续,即使它们是通过脚本添加到防火墙的IP地址。
如果你在INPUT / OUTPUT链中有一个ESTABLISHED,RELATED规则(或其他一些规则覆盖了以后的规则),那么你必须接受你的新规则很多不会立即生效,或者你可以让你的脚本在ESTABLISHED,RELATED规则之前插入IP地址DROP规则。 这可以通过改变脚本为Insert(-I)而不是追加(-A)你的IP地址DROP规则来完成,例如
iptables -I INPUT -s $1 -j DROP iptables -I OUTPUT -d $1 -j DROP
您必须在filter表的开头添加您的规则。 所以你必须使用-I(插入)而不是-A(追加)