配置 ufw 管理 docker 端口 | 提升 Linux 安全性

2024-4-6|2024-9-7
D_SUPER
D_SUPER
type
Post
status
Published
date
Apr 6, 2024
slug
ufw_docker_install
summary
本文旨在修复 ufw 对 docker 服务端口的管理,提升服务器 / Linux 安全性。安装和使用 ufw-docker,简单、高效地提高服务的安全性。
category
服务器
tags
开发运维
好用软件
icon

Uncomplicated Firewall (UFW) 是常用的管理 netfilter 防火墙的程序,具有易上手的特点广受欢迎。但是直接安装的 UFW (apt-install ufw) 无法管理 docker 的服务端口,私有服务有在公网暴露的风险。因此,需要进一步设置规则让 ufw 接管 docker 的服务端口访问。使用 ufw-docker 避免直接配置防火墙,更加简便。

安装ufw-docker

下载 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

使用案例

如果希望允许外部网络访问 Docker 容器提供的服务,比如有一个容器的服务端口是 80。那就可以用以下命令来允许外部网络访问这个服务:
ufw route allow proto tcp from any to any port 80
这个命令会允许外部网络访问所有用 Docker 发布出来的并且内部服务端口为 80 的所有服务。
请注意,这个端口 80 是容器的端口,而非使用 -p 0.0.0.0:8080:80 选项发布在服务器上的 8080 端口。
如果有多个容器的服务端口为 80,但只希望外部网络访问某个特定的容器。比如该容器的私有地址为 172.17.0.2,就用类似下面的命令:
ufw route allow proto tcp from any to 172.17.0.2 port 80
如果一个容器的服务是 UDP 协议,假如是 DNS 服务,可以用下面的命令来允许外部网络访问所有发布出来的 DNS 服务:
ufw route allow proto udp from any to any port 53
同样的,如果只针对一个特定的容器,比如 IP 地址为 172.17.0.2
ufw route allow proto udp from any to 172.17.0.2 port 53

报错及解决

安装可能会遇到报错: /usr/local/bin/ufw-docker: line 7: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
解决办法
直接使用命令设置:sudo locale-gen en_US.UTF-8
重新配置系统的 locale 设置:
sudo dpkg-reconfigure locales
来选择要编译的本地语言。或者,直接编辑该文件:
/etc/locale.gen
并取消注释所需的本地语言,然后运行:
sudo locale-gen

推荐阅读

 
💡
有关 ufw-docker 安装或者使用上的问题,欢迎您在底部评论区留言,一起交流~
 

私享 AList 被 Google 索引了怎么办? | AList 隐私设置批量修改 Memos 的资源库图片链接 | sql | sqlite | DBeaver
  • Twikoo
  • Waline
  • Cusdis