同时使用Docker和ufw,Docker 会绕过 UFW 规则的更好的解决方案

问题

UFW 是 Ubuntu 上一个流行的 iptables 前端,可以轻松管理防火墙规则。但是,安装 Docker 后,Docker 会绕过 UFW 规则,导致已发布的端口可以被外部访问。

解决方案

安装GitHub上一个项目:

这个项目把规则命令进行了封装,只需要:

安装

下载 ufw-docker 脚本

sudo wget -O /usr/local/bin/ufw-docker \
  https://github.com/chaifeng/ufw-docker/raw/master/ufw-docker
chmod +x /usr/local/bin/ufw-docker

使用下列命令来修改 ufw 的 after.rules 文件

ufw-docker install

这个命令做了以下事情:

  • 备份文件 /etc/ufw/after.rules
  • 把 UFW 和 Docker 的相关规则添加到文件 after.rules 的末尾

使用方法

显示帮助

ufw-docker help

检查 UFW 配置文件中防火墙规则的安装

ufw-docker check

更新 UFW 的配置文件,添加必要的防火墙规则

ufw-docker install

显示当前防火墙允许的转发规则

ufw-docker status

列出所有和容器 httpd 相关的防火墙规则

ufw-docker list httpd

暴露容器 httpd 的 80 端口

ufw-docker allow httpd 80

暴露容器 httpd 的 443 端口,且协议为 tcp

ufw-docker allow httpd 443/tcp

如果容器 httpd 绑定到多个网络上,暴露其 443 端口,协议为 tcp,网络为 foobar-external-network

ufw-docker allow httpd 443/tcp foobar-external-network

把容器 httpd 的所有映射端口都暴露出来

ufw-docker allow httpd

删除所有和容器 httpd 相关的防火墙规则

ufw-docker delete allow httpd

删除容器 httpd 的 tcp 端口 443 的规则

ufw-docker delete allow httpd 443/tcp

暴露服务 web 的 80 端口

docker service create --name web --publish 8080:80 httpd:alpine

ufw-docker service allow web 80
# 或者
ufw-docker service allow web 80/tcp

删除与服务 web 相关的规则

ufw-docker service delete allow web

ufw-docker service delete allow web 80/tcp
26 个赞

感谢教程,这就去试试

1 个赞

感谢大佬 !

感谢分享

1 个赞

研究下项目 感谢

1 个赞

又是好学的一天

感谢分享

感谢分享教程 :folded_hands:

4 个赞

docker端口设置为127.0.0.1:port:port就可以了

4 个赞

谢谢大佬的教程

2 个赞

可以看看你的托管商有没有“安全组”,这个docker不能绕过

2 个赞

感谢分享

1 个赞

感谢分享 :hand_with_index_finger_and_thumb_crossed:

1 个赞

网站的话,简单一点操作,是不是将端口映射到127.0.0.1也行?

1 个赞

可以,不过针对复杂应用就不建议在docker改了,比如dify

感谢大佬的教程分享

那其他人怎么访问呢,再加个nginx反代嘛

谢谢分享 :hand_with_index_finger_and_thumb_crossed: