解决Docker容器未经允许自动开放防火墙端口问题
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