美文网首页
Docker不遵守UFW防火墙规则冲突解决方法

Docker不遵守UFW防火墙规则冲突解决方法

作者: 老中医167788 | 来源:发表于2024-06-26 11:38 被阅读0次

    Docker不遵守ufw规则

    如果你在服务端使用 Docker 映射了某个宿主机端口,然后公网访问这个端口的话,你会发现仍然可以访问,即使 ufw 禁用了这个端口,却不起效果。

    因为默认状态下的 Docker 并不遵守 ufw 的防火墙规则

    解决ufw和docker的问题

    解决方案:https://github.com/chaifeng/ufw-docker

    目前新的解决方案只需要修改一个 UFW 配置文件即可,Docker 的所有配置和选项都保持默认。

    修改 UFW 的配置文件 /etc/ufw/after.rules ,在最后添加上如下规则:

    # BEGIN UFW AND DOCKER
    *filter
    :ufw-user-forward - [0:0]
    :ufw-docker-logging-deny - [0:0]
    :DOCKER-USER - [0:0]
    -A DOCKER-USER -j ufw-user-forward
    
    -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 -p udp -m udp --sport 53 --dport 1024:65535 -j RETURN
    
    -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
    -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
    -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
    -A DOCKER-USER -j ufw-docker-logging-deny -p udp -m udp --dport 0:32767 -d 192.168.0.0/16
    -A DOCKER-USER -j ufw-docker-logging-deny -p udp -m udp --dport 0:32767 -d 10.0.0.0/8
    -A DOCKER-USER -j ufw-docker-logging-deny -p udp -m udp --dport 0:32767 -d 172.16.0.0/12
    
    -A DOCKER-USER -j RETURN
    
    -A ufw-docker-logging-deny -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW DOCKER BLOCK] "
    -A ufw-docker-logging-deny -j DROP
    
    COMMIT
    # END UFW AND DOCKER
    

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

    如果希望允许外部网络访问 Docker 容器提供的服务,比如有一个容器的服务端口是 80。那就可以用以下命令来允许外部网络访问这个服务:
    ufw route allow proto tcp from any to any port 80
    

    添加禁止 ICMP ping 的规则

    在 before.rules 文件中,找到 *filter 和 COMMIT 之间的位置,通常在文件的顶部。然后,添加以下规则来禁止 ICMP ping 请求:

    # Block ICMP ping
    -A INPUT -p icmp --icmp-type echo-request -j DROP
    
    

    重新加载 ufw 配置
    为了使更改生效,需要重新加载 ufw:

    sudo ufw reload
    

    相关文章

      网友评论

          本文标题:Docker不遵守UFW防火墙规则冲突解决方法

          本文链接:https://www.haomeiwen.com/subject/ircscjtx.html