解决docker和ufw冲突,不用禁用 iptables 来解决 UFW 不生效问题.
查看本机dokcer ip
ip a s |grep inet
inet 172.20.0.1/16 brd 172.20.255.255 scope global br-6fcdfc299f7a
inet6 fe80::42:35ff:fe09:c91d/64 scope link
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
修改 UFW 的配置文件 /etc/ufw/after.rules,在最后添加上如下规则:
*filter
:ufw-user-forward - [0:0]
:DOCKER-USER - [0:0]
-A DOCKER-USER -j RETURN -s 172.17.0.1/16
-A DOCKER-USER -j RETURN -s 172.20.0.1/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 172.17.0.1/16
-A DOCKER-USER -j DROP -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -d 172.20.0.1/16
-A DOCKER-USER -j DROP -p udp -m udp --dport 0:32767 -d 172.17.0.0/16
-A DOCKER-USER -j DROP -p udp -m udp --dport 0:32767 -d 172.26.0.0/16
-A DOCKER-USER -j RETURN
COMMIT
注:
由于某些未知原因,重启 UFW 之后规则也无法生效,需重启服务器解决。
如果希望允许外部网络访问 Docker 容器提供的服务,比如有一个容器的服务端口是 80。那就可以用以下命令来允许外部网络访问这个服务:
ufw route allow proto tcp from any to any port 80
开放本机端口正常使用 ufw allow 命令即可.
如 开放本机22端口
ufw allow 22
REF:
https://chaifeng.com/to-fix-ufw-and-docker-security-flaw-without-disabling-iptables