用其所有规则删除一个iptables链

我有一个链条附加了许多规则,如:

> :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