在 Ubuntu 上,ufw(Uncomplicated Firewall)本质是对 iptables(或 nftables)的前端封装。只要使用方式正确,它们是“天然兼容”的。下面从原理、使用建议、常见冲突与解决方法几个方面说明。
✅ 推荐做法:只用 ufw,不要直接改 iptables
✅ ufw 的规则最终都会写入 iptables
❌ 不要一边用 ufw,一边手写 iptables -A/-I 乱改规则
❌ 不要在 ufw 规则之外直接清空 iptables(iptables -F)
在 Ubuntu 中:
ufw → 用户友好工具iptables → 真正的内核防火墙规则filter 表ufw-* 链(如 ufw-before、ufw-after)查看真实规则:
sudo iptables -L -n -v
你会看到大量 ufw-* 链。
sudo ufw enable
sudo ufw allow 22
sudo ufw allow 80/tcp
sudo ufw deny 3306
✅ 这些规则会自动同步到 iptables
sudo nano /etc/ufw/before.rules
# 或
sudo nano /etc/ufw/after.rules
示例(放行特定内网):
-A ufw-before-input -s 10.0.0.0/8 -j ACCEPT
然后:
sudo ufw reload
✅ 这样完全兼容 ufw
iptables -A INPUT -j DROP结果:
✅ 解决:
before.rules / after.rules检查:
sudo ufw status
sudo ufw status verbose
确保:
Docker 会直接写 iptables,可能绕过 ufw。
✅ 解决(二选一):
ufw 兼容模式(复杂)/etc/docker/daemon.json 禁用 iptables:{
"iptables": false
}
⚠️ 不推荐新手这么做
# 查看 ufw 规则
sudo ufw status numbered
# 查看真实 iptables
sudo iptables -S
sudo iptables -L -n -v
# 查看 ufw 日志
sudo tail -f /var/log/ufw.log
| 场景 | 建议 |
|---|---|
| 普通服务器 | 只用 ufw |
| 需要复杂规则 | 写 before/after.rules |
| Docker | 谨慎处理 |
| 云平台 | 同时看安全组 |
如果你有具体场景(比如:Docker + ufw、K8s、端口转发、NAT),可以贴出来,我可以给你一份可直接用的配置示例。