Docker 容器使用 -p 端口映射后可能会在防火墙自动打开相应的映射端口

之前不清楚这个问题 直到前两天检测发现服务器开放了好几个Docker镜像的映射端口,按之前的理解 防火墙未开放这些端口,外部网络是不应该访问到才对

这两天新装系统 趁机搜索了下这个问题 找到了相应的解决方案

环境:Ubuntu
服务:Docker

修改ufw默认的配置

vi /etc/default/ufw

把DEFAULT_FORWARD_POLICY修改成下面这样

DEFAULT_FORWARD_POLICY="ACCEPT"

修改docker的默认配置 DOCKER_OPTS这行,在参数后添加添加-iptables=false

vi /etc/default/docker

修改文件成这个样子

DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4 -iptables=false"

查看Docker容器ID

docker ps

查看Docker容器的IP

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' 容器ID

修改/etc/ufw/before.rules

vi /etc/ufw/before.rules

*filter前面添加下面内容 ( 有多少IP就把-A POSTROUTING ! -o docker0 -s 172.17.0.0/16 -j MASQUERADE 更改下添加多少条 )

*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING ! -o docker0 -s 172.9.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.10.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.11.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.12.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.13.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.14.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.15.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.16.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.17.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.18.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.19.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.20.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.21.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.22.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.23.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.24.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.25.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.26.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.27.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.28.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.29.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.30.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.31.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.32.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.33.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.34.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.35.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.36.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.37.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.38.0.0/16 -j MASQUERADE
-A POSTROUTING ! -o docker0 -s 172.39.0.0/16 -j MASQUERADE
COMMIT

新增文件/etc/docker/daemon.json

vi /etc/docker/daemon.json

写入以下内容

{
"iptables": false
}

重启

reboot

再次测试 外网已无法访问到相应端口

参考

https://blog.csdn.net/qadzhangc/article/details/96140703
https://www.codeprj.com/blog/b080cd1.html