修复 UFW 无法管理 Docker 端口

UFW 可以方便的管理防火墙的规则,但是当安装了 Docker,UFW 无法管理 Docker 发布出来的端口。我们通过修改一个 UFW 配置文件,Docker 的所有配置和选项都保持默认,实现 ufw 对 docker 外部端口的管理。

本文出处:chaifeng/ufw-docker

修改 UFW 的配置文件

vi /etc/ufw/after.rules,在最后添加上如下规则:

 1# BEGIN UFW AND DOCKER
 2*filter
 3:ufw-user-forward - [0:0]
 4:ufw-docker-logging-deny - [0:0]
 5:DOCKER-USER - [0:0]
 6-A DOCKER-USER -j ufw-user-forward
 7
 8-A DOCKER-USER -j RETURN -s 10.0.0.0/8
 9-A DOCKER-USER -j RETURN -s 172.16.0.0/12
10-A DOCKER-USER -j RETURN -s 192.168.0.0/16
11
12-A DOCKER-USER -p udp -m udp --sport 53 --dport 1024:65535 -j RETURN
13
14-A DOCKER-USER -j ufw-docker-logging-deny -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -d 192.168.0.0/16
15-A DOCKER-USER -j ufw-docker-logging-deny -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -d 10.0.0.0/8
16-A DOCKER-USER -j ufw-docker-logging-deny -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -d 172.16.0.0/12
17-A DOCKER-USER -j ufw-docker-logging-deny -p udp -m udp --dport 0:32767 -d 192.168.0.0/16
18-A DOCKER-USER -j ufw-docker-logging-deny -p udp -m udp --dport 0:32767 -d 10.0.0.0/8
19-A DOCKER-USER -j ufw-docker-logging-deny -p udp -m udp --dport 0:32767 -d 172.16.0.0/12
20
21-A DOCKER-USER -j RETURN
22
23-A ufw-docker-logging-deny -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW DOCKER BLOCK] "
24-A ufw-docker-logging-deny -j DROP
25
26COMMIT
27# END UFW AND DOCKER

重启 UFW

sudo systemctl restart ufw

现在外部就已经无法访问 Docker 发布出来的任何端口了,但是容器内部以及私有网络地址上可以正常互相访问,而且容器也可以正常访问外部的网络。可能由于某些未知原因,重启 UFW 之后规则也无法生效,请重启服务器。

打开端口8080

打开容器端口 ufw route allow 8080 现在公共网络可以访问所有容器端口为 8080 的服务,但是主机的 8080 端口仍未打开。如果我们希望打开主机上的 8080 端口,可以执行下面的命令 ufw allow 8080

版权

评论