解决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

posted @ 2022-11-06 11:58  lvusyy  阅读(2140)  评论(0编辑  收藏  举报