无法删除docker容器的默认iptables规则

时间:2018-04-29 08:07:10

标签: docker firewall iptables

如果我输入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?).

正如错误所暗示的,它无法找到匹配规则。我应该如何键入以删除该行?

3 个答案:

答案 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上的,因此您的文件/路径可能会有所不同。

  1. 编辑您的/etc/iptables.up.rules文件,备份文件,然后删除其中包含docker的所有内容-本地docker子网中可能还有其他几行(我的名字是172.17.x和172.19.x)-删除它们全部
  2. 刷新iptables:iptables -P INPUT ACCEPT && iptables -P OUTPUT ACCEPT && iptables -P FORWARD ACCEPT && iptables -F
  3. 重新加载iptables规则:iptables-restore < /etc/iptables.up.rules
  4. 验证/检查您的规则:iptables -L -n(不应再有任何Docker链或规则)

答案 2 :(得分:0)

如果您删除了docker软件包,而不仅仅是重启iptables服务,它将删除默认的docker iptables-

systemctl重新启动iptables.service