删除 iptables 链及其所有规则

删除 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:链接太多。

有没有一种简单的方法可以通过一次命令删除链条?

答案1

当带有“-j CHAINTODELETE”的规则引用链时,您无法删除链。找出引用链的内容(链接),然后将其删除。此外,刷新然后终止。

-F, --flush [链]

刷新选定的链(如果没有指定,则刷新表中的所有链)。这相当于逐个删除所有规则。

-X, --delete-chain [链]

删除指定的可选用户定义链。 一定不能有任何对该链的引用。 如果有的话,你必须删除或替换引用规则 删除链之前。链必须为空,即不包含任何规则。如果没有给出参数,它将尝试删除表中的每个非内置链。

答案2

这可能有点离题,但这是我在找到这篇文章后做的!对于某些用例,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

答案3

您需要两个步骤,但这样做命令。

创建一个文件,并将其放入其中。

# Empty the entire filter table
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
COMMIT

将文件另存为“clear-all-rules”。现在,执行以下命令:

iptables-restore < clear-all-rules

现在您只需一个命令即可随时清除它。

答案4

在 iptables man 文件中有一个选项-S

S, --list-rules [chain] 打印所选链中的所有规则。如果未选择任何链,则像 iptables-save 一样打印所有链。与其他所有 iptables 命令一样,它适用于指定的表(默认为过滤器)。

通过使用iptables -S | grep <CHAINNAMEHERE>。例如:

root@root:~# iptables -S | grep TRAFFICLOG

-N 交通记录

-A 转发 -i eth0 -j 流量日志

然后,您可以查看哪些规则阻止从表中删除链。检查每条规则(除了 ),然后使用选项iptables -N <CHAINNAMEHERE>删除规则-D

-D, --delete chain rulenum 从选定链中删除一个或多个规则。此命令有两个版本:规则可以指定为链中的编号(第一条规则从 1 开始)或要匹配的规则。

例如iptables -D FORWARD -i eth0 -j TRAFFICLOG,删除链中的每个规则后,使用选项刷新-Fiptables -F <CHAINNAMEHERE>

-F, --flush [chain] 刷新选定的链(如果没有指定,则刷新表中的所有链)。这相当于逐个删除所有规则。

然后使用以下选项删除你的链-Xiptables -X <CHAINNAMEHERE>

-X, --delete-chain [chain] 删除指定的可选用户定义链。必须没有对该链的引用。如果有,则必须先删除或替换引用规则,然后才能删除该链。该链必须为空,即不包含任何规则。如果没有给出参数,它将尝试删除表中的每个非内置链。

Iptables 是一个复杂的工具集,因此需要一个理想的教程。你可以尝试一下www.iptables.info

相关内容