如果我输入iptables -L
,则输出中会出现以下行:
Chain DOCKER (1 references)
target prot opt source destination
ACCEPT tcp -- anywhere 172.17.0.2 tcp dpt:http-alt
我的容器公开曝光,我可以从任何地方请求虚拟http服务器(已测试)。我尝试删除该规则,因此只有80只暴露在我的服务器(localhost:80
)内。我试过了:
root@ns25252:~# iptables -D DOCKER --destination 172.17.0.2 -p tcp --dport 80 -j ACCEPT
iptables: Bad rule (does a matching rule exist in that chain?).
正如错误所暗示的,它无法找到匹配规则。我应该如何键入以删除该行?
答案 0 :(得分:2)
通过数字删除通常更容易,除非在列出规则的时间和删除规则的时间之间,数字可能会发生变化。
以下是按行号删除的方法:
# iptables -L --line-numbers
(snip)
Chain DOCKER (2 references)
num target prot opt source destination
1 ACCEPT tcp -- anywhere 172.17.0.2 tcp dpt:http
(snip)
# iptables -D DOCKER 1
或者,您可以通过iptables -S
获得完整的规范。例如:
# iptables -S
(snip)
-A DOCKER -d 172.17.0.2/32 -p tcp -m tcp --dport 80 -j ACCEPT
(snip)
将-A
变为-D
,并将其作为iptables
的参数删除规则:
# iptables -D DOCKER -d 172.17.0.2/32 -p tcp -m tcp --dport 80 -j ACCEPT
答案 1 :(得分:0)
这有点旧,但是如果有人在寻找如何从iptables规则中完全删除docker的方法,这就是我的操作方法,还请记住,这是在debian上的,因此您的文件/路径可能会有所不同。
/etc/iptables.up.rules
文件,备份文件,然后删除其中包含docker的所有内容-本地docker子网中可能还有其他几行(我的名字是172.17.x和172.19.x)-删除它们全部iptables -P INPUT ACCEPT && iptables -P OUTPUT ACCEPT && iptables -P FORWARD ACCEPT && iptables -F
iptables-restore < /etc/iptables.up.rules
iptables -L -n
(不应再有任何Docker链或规则)答案 2 :(得分:0)
如果您删除了docker软件包,而不仅仅是重启iptables服务,它将删除默认的docker iptables-
systemctl重新启动iptables.service