我有一个链条附加了许多规则,如:
> :i_XXXXX_i - [0:0] > -A INPUT -s 282.202.203.83/32 -j i_XXXXX_i > -A INPUT -s 222.202.62.253/32 -j i_XXXXX_i > -A INPUT -s 222.202.60.62/32 -j i_XXXXX_i > -A INPUT -s 224.93.27.235/32 -j i_XXXXX_i > -A OUTPUT -d 282.202.203.83/32 -j i_XXXXX_i > -A OUTPUT -d 222.202.62.253/32 -j i_XXXXX_i > -A OUTPUT -d 222.202.60.62/32 -j i_XXXXX_i > -A OUTPUT -d 224.93.27.235/32 -j i_XXXXX_i
当我试图删除这条链:
iptables -X XXXX
但得到错误(尝试iptables -F XXXXX之前):
iptables:太多的链接。
有一个简单的方法来删除链一次命令?
当带'-j CHAINTODELETE'的规则引用它们时,你不能删除链。 找出什么是你的链(链接),并删除。 另外,冲洗然后杀死。
-F,–flush [链]
冲洗选定的链条(如果没有给出,则表中的所有链条)。 这相当于逐个删除所有的规则。
-X, – 删除链[链]
删除指定的可选用户定义链。 一定不能提及这个链条。 如果有,则必须删除或replace引用规则,然后才能删除链。 链条必须是空的,即不包含任何规则。 如果没有提供参数,它将尝试删除表中的每个非内build链。
这可能是无关紧要的,但这是我发现这篇文章后所做的事情! 对于一些使用情况,iptables -D选项可能会有用。 因为它允许你清除用-A编程添加的引用规则(如果你确切地知道你是如何添加它们的话)。
例如
iptables -N MYCHAIN iptables -A INPUT -i interface -j MYCHAIN iptables -A MYCHAIN -j ACCEPT
可以逆转
iptables -D INPUT -i interface -j MYCHAIN iptables --flush MYCHAIN iptables -X MYCHAIN
你需要两个步骤,但这是在一个命令。
创build一个文件,并把它放在它。
# Empty the entire filter table *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] COMMIT
将该文件保存为“清除所有规则”。 现在,执行这个命令:
iptables-restore < clear-all-rules
现在只要一个命令就可以随时清除它。
这是一个备用计划。 它涉及三个命令,而不是一个,但运气好的话,它应该工作。
把你的iptables
规则集转储到一个文件中:
iptables-save > /tmp/iptables.txt
删除(和引用)违规链的所有用途:
sed -i '/i_XXXXX_i/d' /tmp/iptables.txt
然后重新加载规则集:
iptables-restore < /tmp/iptables.txt && rm /tmp/iptables.txt
沿着这些线路的东西将把所有这些都放在一个单独的行中,而不以任何方式使用iptables。
for chain in `iptables -L |grep i_XXXXX_i|awk '{ print $2 }'`; do iptables -X $chain; done
在iptables man文件中有一个选项-S
S,–list-rules [chain]打印所选链中的所有规则。 如果没有select链,所有链都打印如iptables-save。 和其他iptables命令一样,它也适用于指定的表(filter是默认的)。
通过使用iptables -S | grep <CHAINNAMEHERE>
iptables -S | grep <CHAINNAMEHERE>
。 例如:
root @ root:〜#iptables -S | grep TRAFFICLOG
-N TRAFFICLOG
-A FORWARD -i eth0 -j TRAFFICLOG
您可以看到哪些规则阻止从表中删除链。 通过每个规则(除了iptables -N <CHAINNAMEHERE>
并通过使用-D
选项删除规则
-D,–delete chain rulenum从选定的链中删除一个或多个规则。 该命令有两个版本:可以将规则指定为链中的数字(从第一条规则的第一条开始)或匹配的规则。
例如iptables -D FORWARD -i eth0 -j TRAFFICLOG
。 在删除链的每个规则之后,用-F
选项刷新链, iptables -F <CHAINNAMEHERE>
。
-F,–flush [链]冲洗选定的链(如果没有给出,则链中的所有链)。 这相当于逐个删除所有的规则。
然后用-X
选项删除你的链, iptables -X <CHAINNAMEHERE>
-X,–delete-chain [chain]删除指定的可选用户定义链。 一定不能提及这个链条。 如果有,则必须删除或replace引用规则,然后才能删除链。 链条必须是空的,即不包含任何规则。 如果没有提供参数,它将尝试删除表中的每个非内build链。
Iptables是一个复杂的工具集,所以需要一个理想的教程。 你可以在www.iptables.info上试一试
这将吐出链条并删除它们
for i in $(iptables -S | awk '{print $2}' | uniq ); do iptables -F $i && iptables -Z $i && iptables -X $i ; done