Appearance
1️⃣ UFW 基本概念
UFW 是 Ubuntu / Debian 系列常用的防火墙管理工具,它本质上是对 iptables/nftables 的封装,命令简单易用。
核心特点
- 简化 iptables 配置
- 支持基于端口、IP、协议的规则
- 支持 IPv4 / IPv6
- 默认策略可配置(允许或拒绝)
核心命令
| 命令 | 说明 |
|---|---|
sudo ufw enable | 启用防火墙 |
sudo ufw disable | 禁用防火墙 |
sudo ufw status | 查看状态(简略) |
sudo ufw status verbose | 查看详细状态,包括默认策略、日志等级等 |
sudo ufw allow 80/tcp | 允许 TCP 80 端口访问 |
sudo ufw deny 22/tcp | 拒绝 TCP 22 端口访问 |
sudo ufw delete allow 80/tcp | 删除规则 |
sudo ufw default deny incoming | 设置默认拒绝入站 |
sudo ufw default allow outgoing | 设置默认允许出站 |
进阶用法
- 按 IP 限制:
sudo ufw allow from 10.0.0.0/16 to any port 35244- 日志设置:
sudo ufw logging on # 开启低等级日志
sudo ufw logging high # 高等级日志2️⃣ Docker 与 UFW 的冲突
Docker 自己会在 iptables 中插入规则管理 NAT / 转发,导致:
- 容器端口暴露可能绕过 UFW
- 外网访问可能受 UFW 默认策略限制
- UFW 无法识别 Docker 动态创建的网桥接口
3️⃣ ufw-docker 工具
ufw-docker 是一个辅助脚本,用来解决 UFW 与 Docker NAT 规则冲突 的问题。它的作用:
- 自动在
DOCKER-USER链里插入规则 - 允许你指定容器端口的访问,而不破坏 UFW 的默认策略
- 简化容器端口管理
基本用法
- 允许容器端口访问
sudo ufw-docker allow <容器名或服务名> <端口>例:
sudo ufw-docker allow postgres 5432
sudo ufw-docker allow redis 6379- 拒绝容器端口访问
sudo ufw-docker deny <容器名或服务名> <端口>- 撤销容器端口配置
sudo ufw-docker delete allow/deny <容器名或服务名> <端口>- 重载 UFW 规则
sudo ufw reload- 查看状态
sudo ufw status verbose- 会看到 FWD 类型规则,表示 Docker 容器的端口映射规则
🔹 核心区别
| 功能 | ufw | ufw-docker |
|---|---|---|
| 普通端口管理 | 是 | 是(间接管理) |
| 容器 NAT / FWD | 不方便 | 自动处理 DOCKER-USER 链 |
| 外网/内网限制 | 可以 | 可以,并继承 ufw 策略 |
| 动态容器管理 | 需要手动 | 支持通过容器名自动管理 |
总结:
- UFW → 系统防火墙,管理端口访问规则
- ufw-docker → 解决 Docker 容器端口和 UFW 冲突,让容器端口规则可控