我如何删除 iptables 规则?

我如何删除 iptables 规则?

我想临时添加以下 iptables 规则,以查看是否允许端口 5000 上的入站流量,以便能够连接到我的 docker 容器和其中运行的 web 服务器:

$ sudo iptables -A INPUT -p tcp --dport 5000 -m state --state NEW -j ACCEPT

然后,如果这次尝试不成功,我会删除上述规则,但我不知道该怎么做。
我使用iptables-persistent,正如建议的那样dokku 文档, 我不使用ufw

答案1

追加与插入

在回答问题之前,我们先来看一下该命令的结构:

iptables -A INPUT 'the rule'

这意味着iptables -AINPUT在链的末尾添加遵循规则。添加规则的另一种常见方式iptables是通过插入选项:

iptables -I INPUT 'the rule'

这意味着iptables -IINPUT在链的开头插入遵循规则或者当我们想要在某个位置插入规则时,例如在链中某个现有的第 3 条规则之前:

iptables -I INPUT 3 'the rule'


规则的数字

规则的数量在iptablesipchain)。例如,假设我们有以下规则结构:

1. Deny all UDP 
2. Allow UDP on port 456

UDP 不应被允许在端口 456 上使用,因为它已被拒绝在所有端口上使用,因此结构必须是:

1. Allow UDP on port 456
2. Deny all (rest) UDP 

如果您想读取链的结构,INPUT请使用:

sudo iptables -S INPUT

如果需要获取规则的数量,那么可以使用以下命令:

sudo iptables -L INPUT -n --line-numbers # you can omit '-n'


答案

为了从已知链中删除某些规则,可以使用以下命令:

iptables -D CHAIN_NAME 'the rule'

这意味着iptables -DCHAIN_NAME从中选择遵循规则。或者你的情况命令应该是:

sudo iptables -D INPUT -p tcp --dport 5000 -m state --state NEW -j ACCEPT

另外,您可以根据链中的编号删除规则,假设它是编号 3:

sudo iptables -D INPUT 3


结论

我同意这个观点,简单的防火墙工具——ufw也就是的前端iptables——有时会让事情变得更加复杂:)

这是一篇很好的文章,由数字海洋,描述与这个答案相同,但更详细:如何列出和删除 Iptables 防火墙规则

相关内容