使用 UFW 管理 Docker 端口¶
预计阅读时长 : 3 分钟
背景¶
Docker 的端口映射功能,可以将容器内部的端口映射到宿主机上,从而实现容器内部服务的访问。但是,这样的端口映射会导致宿主机上的端口暴露,即使默认开启了 UFW 防火墙,依然无法阻断端口的直接暴露,存在一定的安全隐患。
为了进一步提升安全性,可以使用 ufw-dockers ⧉ 工具自动化配置 UFW,将 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 服务,如果没有生效,则可以尝试重启服务器。
暴露端口¶
对于例如 Gogs 这样,除了常规的 Web 端口之外,还需要暴露 SSH TCP 端口的容器,可以使用下列命令来暴露端口:
ufw-docker allow gogs_gogs_1 22
注意,这里的 gogs_gogs_1
是容器的名称,而 22
是容器的端口。完成这步操作之后,再将容器映射的端口加入到 UFW 的管理中,就可以实现端口的安全管理了。