在 ubuntu 上部署好 docker 应用后,默认情况下 ufw 是禁用不了 docker 暴露的端口,需要自己重新配置 docker 和 iptables,但是修改它们的配置会导致容器无法访问外部网络。
所以更好的的办法是修改 ufw 的配置,只需改一处地方即可,编辑 /etc/ufw/after.rules
,在末尾添加:
# BEGIN UFW AND DOCKER
*filter
:ufw-user-forward - [0:0]
:DOCKER-USER - [0:0]
-A DOCKER-USER -j RETURN -s 10.0.0.0/8
-A DOCKER-USER -j RETURN -s 172.16.0.0/12
-A DOCKER-USER -j RETURN -s 192.168.0.0/16
-A DOCKER-USER -j ufw-user-forward
-A DOCKER-USER -j DROP -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -d 192.168.0.0/16
-A DOCKER-USER -j DROP -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -d 10.0.0.0/8
-A DOCKER-USER -j DROP -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -d 172.16.0.0/12
-A DOCKER-USER -j DROP -p udp -m udp --dport 0:32767 -d 192.168.0.0/16
-A DOCKER-USER -j DROP -p udp -m udp --dport 0:32767 -d 10.0.0.0/8
-A DOCKER-USER -j DROP -p udp -m udp --dport 0:32767 -d 172.16.0.0/12
-A DOCKER-USER -j RETURN
COMMIT
# END UFW AND DOCKER
保存后重启 ufw(如果不生效可以重启机器试试):
sudo systemctl restart ufw
这样子就可以禁掉 docker 暴露的端口了,统一由 ufw 进行管理。
如果出现容器内无法访问宿主机端口,那么可以这样解决:
sudo ufw allow from 172.17.0.0/12
更多详细的内容可以看这里: