跳转至

使用 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

这个命令做了以下事情:

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

最后,重启 UFW 服务,如果没有生效,则可以尝试重启服务器。

暴露端口

对于例如 Gogs 这样,除了常规的 Web 端口之外,还需要暴露 SSH TCP 端口的容器,可以使用下列命令来暴露端口:

ufw-docker allow gogs_gogs_1 22

注意,这里的 gogs_gogs_1 是容器的名称,而 22 是容器的端口。完成这步操作之后,再将容器映射的端口加入到 UFW 的管理中,就可以实现端口的安全管理了。