1 个月前   devdocs   Docker

配置 ufw 阻止外部访问 ubuntu docker 服务的端口

在 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

更多详细的内容可以看这里:

https://github.com/chaifeng/ufw-docker