问题
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