ufw无效 - Docker 暴露端口无法禁用【已解决】
环境和原因说明
Ubuntu 22LTS 使用 docker compose 部署的一个服务,端口绑定是 8080:80,nginx 反代到 localhost:8080.
ufw 启用,并 设置默认入栈拒绝sudo ufw default deny incoming
,然后发现通过ip+端口8080也能访问。
通过 命令 iptables-save
查看防火墙,发现docker在防火墙添加了规则,然后就没走到ufw。端口就放了,故此导致ufw无效了。
root@dev:~# iptables-save |grep 8080
-A DOCKER ! -i br-f732b01ca22d -p tcp -m tcp --dport 8080 -j DNAT --to-destination 172.18.0.3:80
解决办法
方案一:禁用docker默认添加防火墙规则
修改docker
的配置文件/etc/docker/daemon.json
(若没有就新建一个), 添加如下内容:
{ "iptables": false }
重启docker:
systemctl restart docker
此时再启动docker容器, 就不会修改防火墙了.
注意:该方案会导致docker部署的nginx 80/443端口无法获取到用户真实IP
方案二:docker-compose.yml配置修改
docker-compose.yml配置中,端口部分
8080:80
修改为:127.0.0.1:8080:80
重启生效
关联文章:
- ufw deny port 不生效问题(已解决,注意docker端口外漏)
- ufw 禁用端口未生效 - 烟草的香味
- Linux ufw(防火墙)使用指南,解决ufw和docker冲突问题,保护你的服务器/VPSUFW 是 ”简单防火墙“
https://www.syntaxspace.com/article/2411191705309263.html
评论