我想临时添加以下 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
-A
INPUT
在链的末尾添加遵循规则。添加规则的另一种常见方式iptables
是通过插入选项:
iptables -I INPUT 'the rule'
这意味着iptables
-I
INPUT
在链的开头插入遵循规则或者当我们想要在某个位置插入规则时,例如在链中某个现有的第 3 条规则之前:
iptables -I INPUT 3 'the rule'
规则的数字
规则的数量在iptables
(ipchain
)。例如,假设我们有以下规则结构:
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
-D
CHAIN_NAME
从中选择遵循规则。或者你的情况命令应该是:
sudo iptables -D INPUT -p tcp --dport 5000 -m state --state NEW -j ACCEPT
另外,您可以根据链中的编号删除规则,假设它是编号 3:
sudo iptables -D INPUT 3
结论
我同意这个观点,简单的防火墙工具——ufw
也就是的前端iptables
——有时会让事情变得更加复杂:)
这是一篇很好的文章,由数字海洋,描述与这个答案相同,但更详细:如何列出和删除 Iptables 防火墙规则。