在 Ubuntu 上 ufw(Uncomplicated Firewall)本质上是对 iptables 的前端封装,所以“iptables 与 ufw 并用”是完全可行的,但必须注意规则顺序和管理边界,否则容易出现“规则被覆盖/不生效”的问题。
下面按常见使用场景说明如何安全并用。
✅ 可以并用
❌ 不要两边都“抢占默认策略”
✅ 建议:ufw 管“基础策略”,iptables 管“高级/特殊规则”
✅ iptables 规则要插在 ufw 的链之前或指定链中
在 Ubuntu 中:
ufw
└── 调用 iptables
├── ufw 自定义链(ufw-before / ufw-after / ufw-user)
你执行:
ufw enable
实际上 ufw 会:
所以:
直接用 iptables 写的规则,可能在 ufw reload / enable 后被清掉
ufw enable
ufw default deny incoming
ufw default allow outgoing
ufw allow 22
ufw allow 80
ufw allow 443
例如:
示例(在 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 -A INPUT -p tcp --dport 12345 -j ACCEPT
ufw reload
→ 规则可能消失
ufw default deny incoming
iptables -P INPUT ACCEPT
→ 冲突、行为不可预期
iptables -L -n -v
或只看 ufw 相关:
iptables -L ufw-user-input -n -v
可以直接:
ufw disable
然后自己写 iptables 规则(或 nftables)
apt install iptables-persistent
netfilter-persistent save
把 iptables 命令写进:
/etc/ufw/before.rules
或
/etc/ufw/after.rules
ufw 是“管理员”,iptables 是“底层工具”
用 ufw 定大方向,用 iptables 补细节,插在 ufw 的链里,就不会打架。
如果你愿意,可以告诉我:
我可以给你一套可直接用的规则模板。