温馨提示×

ubuntu iptables如何与ufw并用

小樊
55
2026-10-21 11:09:11
栏目: 智能运维

在 Ubuntu 上 ufw(Uncomplicated Firewall)本质上是对 iptables 的前端封装,所以“iptables 与 ufw 并用”是完全可行的,但必须注意规则顺序和管理边界,否则容易出现“规则被覆盖/不生效”的问题。

下面按常见使用场景说明如何安全并用。


一、先说结论(重点)

✅ 可以并用
❌ 不要两边都“抢占默认策略”
✅ 建议:ufw 管“基础策略”,iptables 管“高级/特殊规则”
✅ iptables 规则要插在 ufw 的链之前或指定链中


二、ufw 与 iptables 的关系

在 Ubuntu 中:

ufw
 └── 调用 iptables
      ├── ufw 自定义链(ufw-before / ufw-after / ufw-user)

你执行:

ufw enable

实际上 ufw 会:

  • 清空部分 iptables 规则
  • 加载自己的一套链和规则

所以:

直接用 iptables 写的规则,可能在 ufw reload / enable 后被清掉


三、推荐做法(最稳妥)

✅ 方案 1:ufw 管策略,iptables 管细节(推荐)

1️⃣ 用 ufw 做基础防火墙

ufw enable
ufw default deny incoming
ufw default allow outgoing
ufw allow 22
ufw allow 80
ufw allow 443

2️⃣ 用 iptables 做“ufw 不擅长的事”

例如:

  • 限速
  • 防 SYN Flood
  • 标记数据包
  • 复杂 NAT

示例(在 ufw 之后插入):

iptables -I ufw-before-input -p tcp --dport 22 -m conntrack --ctstate NEW -m recent --set
iptables -I ufw-before-input -p tcp --dport 22 -m conntrack --ctstate NEW -m recent --update --seconds 60 --hitcount 10 -j DROP

✅ 使用 ufw-before-* 链,不会被 ufw 覆盖


四、不要这样做(常见坑)

❌ 直接用 iptables 写 INPUT 规则后 ufw reload

iptables -A INPUT -p tcp --dport 12345 -j ACCEPT
ufw reload

→ 规则可能消失

❌ ufw 和 iptables 同时设默认策略

ufw default deny incoming
iptables -P INPUT ACCEPT

→ 冲突、行为不可预期


五、查看 ufw 实际生成的 iptables 规则

iptables -L -n -v

或只看 ufw 相关:

iptables -L ufw-user-input -n -v

六、如果你想“完全用 iptables,不用 ufw”

可以直接:

ufw disable

然后自己写 iptables 规则(或 nftables)


七、进阶:持久化 iptables 规则(避免重启丢失)

方法 1(推荐 Ubuntu 新版本)

apt install iptables-persistent
netfilter-persistent save

方法 2(配合 ufw)

把 iptables 命令写进:

/etc/ufw/before.rules

或

/etc/ufw/after.rules

八、总结一句话

ufw 是“管理员”,iptables 是“底层工具”
用 ufw 定大方向,用 iptables 补细节,插在 ufw 的链里,就不会打架。

如果你愿意,可以告诉我:

  • Ubuntu 版本
  • 想实现什么功能(端口 / NAT / 限速 / 容器)

我可以给你一套可直接用的规则模板。

0 踩