Skip to content

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 的默认策略
  • 简化容器端口管理

基本用法

  1. 允许容器端口访问
sudo ufw-docker allow <容器名或服务名> <端口>

例:

sudo ufw-docker allow postgres 5432
sudo ufw-docker allow redis 6379
  1. 拒绝容器端口访问
sudo ufw-docker deny <容器名或服务名> <端口>
  1. 撤销容器端口配置
sudo ufw-docker delete allow/deny <容器名或服务名> <端口>
  1. 重载 UFW 规则
sudo ufw reload
  1. 查看状态
sudo ufw status verbose
  • 会看到 FWD 类型规则,表示 Docker 容器的端口映射规则

🔹 核心区别

功能ufwufw-docker
普通端口管理是(间接管理)
容器 NAT / FWD不方便自动处理 DOCKER-USER 链
外网/内网限制可以可以,并继承 ufw 策略
动态容器管理需要手动支持通过容器名自动管理

总结:

  • UFW → 系统防火墙,管理端口访问规则
  • ufw-docker → 解决 Docker 容器端口和 UFW 冲突,让容器端口规则可控