如何使用 iptables 阻止 docker 容器端口?

kam*_*ami 5 iptables docker

我使用 docker 服务来设置容器网络。我只是为目标 IP 打开端口 7035 并将其暴露给主机。
当我使用“iptables -nvL”检查 iptables 时,我看到了 FORWARD 链:

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 DROP       tcp  --  *      *       0.0.0.0/0            172.18.0.2           tcp dpt:7053
1680K  119M DOCKER-ISOLATION  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
1680K  119M DOCKER     all  --  *      br-287ce7f19804  0.0.0.0/0            0.0.0.0/0           
1680K  119M ACCEPT     all  --  *      br-287ce7f19804  0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
Run Code Online (Sandbox Code Playgroud)

和 DOCKER 链:

Chain DOCKER (4 references)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     tcp  --  !br-287ce7f19804 br-287ce7f19804  0.0.0.0/0            172.18.0.2           tcp dpt:7053
    0     0 ACCEPT     tcp  --  !br-287ce7f19804 br-287ce7f19804  0.0.0.0/0            172.18.0.2           tcp dpt:7051
    0     0 ACCEPT     tcp  --  !br-287ce7f19804 br-287ce7f19804  0.0.0.0/0            172.18.0.3           tcp dpt:2181
    0     0 ACCEPT     tcp  --  !br-287ce7f19804 br-287ce7f19804  0.0.0.0/0            172.18.0.4           tcp dpt:7053
    0     0 ACCEPT     tcp  --  !br-287ce7f19804 br-287ce7f19804  0.0.0.0/0            172.18.0.4           tcp dpt:7051
    0     0 ACCEPT     tcp  --  !br-287ce7f19804 br-287ce7f19804  0.0.0.0/0            172.18.0.6           tcp dpt:7053
    0     0 ACCEPT     tcp  --  !br-287ce7f19804 br-287ce7f19804  0.0.0.0/0            172.18.0.6  
Run Code Online (Sandbox Code Playgroud)

我想阻止容器172.18.0.2,它的端口7053。所以我使用sudo iptables -I FORWARD -p tcp -d 172.18.0.2 --dport 7053 -j DROP.

但是,它不起作用。那么,如何屏蔽目标ip和端口呢?

小智 3

以下应该有效:

iptables -I DOCKER 1 -p tcp --dport 7053 -j DROP
Run Code Online (Sandbox Code Playgroud)

这会将 DROP 规则插入到 DOCKER 链中所有其他规则之前。

以下是一个有用的命令:

iptables --list DOCKER -n --line
Run Code Online (Sandbox Code Playgroud)

同样,如果您添加-v(详细),您会获得更多详细信息

到目前为止,您可能已经有了答案,但这可能对其他人有帮助。

  • docker iptables 规则应添加到 DOCKER-USER 链而不是 DOCKER 链 (4认同)