iptables 与 UFW 对比:Linux 防火墙怎么选
iptables 直连内核 netfilter 功能全但语法晦涩;UFW 是其友好封装,常见任务一条命令搞定。本文讲清两者机制、规则写法、持久化与混合使用姿势。
直接回答:iptables 是直接对话内核 netfilter 框架的底层工具——控制到每个数据包,但命令密集晦涩易出错;UFW(Uncomplicated Firewall)是它的友好封装,常用规则一句话搞定。日常服务器防护用 UFW;复杂网络策略(NAT、集合与精细规则;流量整形通常由 tc 负责)回 iptables/nftables。不要让多个工具竞争同一规则集;UFW 通过 iptables 工具链管理规则,实际使用 legacy 或 nft 兼容后端需检查系统配置。
机制对照
netfilter 在内核里对每个包做决策。iptables 直接编写规则链(INPUT/FORWARD/OUTPUT);UFW 生成这些规则但只暴露高层命令。
远程变更安全
修改默认策略、启停管理器或重载规则前,先记录当前规则与实际 SSH 端口、管理来源地址,保留现有会话并确认云控制台/带外终端可用。先放行必要的 SSH、回环与已建立连接,再从第二个终端新建 SSH 会话验证,成功后才收紧旧规则。准备经验证的限时回退,不要远程清空规则或盲目执行 reset。IPv4、IPv6、云安全组及 Docker 转发路径都需分别验证。监控告警不能代替防锁定措施。
规则写法对比
# iptables:放行 22 端口
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
# UFW:同一件事
ufw allow 22/tcp
UFW 常用命令:ufw status verbose、ufw status numbered;删除前重查编号,启用或修改默认策略必须先遵循上面的远程安全流程。
复杂场景回 iptables
端口转发、NAT 伪装、按连接速率限速、自定义链——UFW 的高级规则可在其配置框架内管理,不要随意注入临时规则(或 /etc/ufw/before.rules 混合注入)。
持久化
iptables 规则重启即失——需 iptables-save/netfilter-persistent 固化;UFW 规则默认持久。这是新手最容易踩的坑之一。
常见问题(FAQ)
Q:用了 UFW 还能手写 iptables 规则吗?
A:能,但注意规则顺序——具体链路需检查 ufw show raw;before.rules 进入其相应处理阶段,并不无条件优先于系统所有规则。
Q:nftables 和这两个什么关系?
A:nftables 是 netfilter 的新前端(取代 iptables 的官方路线)。新系统可直接学 nftables;UFW 在使用 iptables-nft 的发行版可经兼容层生成 nftables 规则,不代表拥有通用原生 nft 后端。
Q:云服务器还需要 UFW 吗?
A:安全组是第一道、主机防火墙是第二道——纵深防御不嫌多。安全组误配置时,主机防火墙是最后防线。
官方参考
本文依据官方文档整理,示例未在本文中进行运行验证。生产部署需按所用版本、权限和实际负载验证。