
核心要点(TL;DR)
- nftables是Linux内核新一代包过滤框架,性能与语法均优于iptables。
- firewalld提供动态管理,适合需要频繁变更规则的场景。
- iptables仍广泛兼容,但已进入维护模式,新项目建议迁移。
- 选型需考虑发行版支持、团队熟悉度及长期维护成本。
痛点:防火墙规则混乱,选型困难
许多运维人员在配置Linux防火墙时,面对iptables、firewalld和nftables往往感到困惑:旧教程用iptables,新系统默认firewalld,而nftables又号称下一代。选错工具可能导致规则不生效、性能瓶颈甚至安全漏洞。本文将对比三者的核心差异,提供实战配置命令与选型清单,助你快速决策并落地。
三者是什么:核心架构与关系
iptables是传统的包过滤工具,基于netfilter框架,通过表(tables)和链(chains)管理规则。firewalld是iptables的动态管理前端,引入区域(zones)和服务概念,支持运行时配置无需重启。nftables是新一代框架,取代iptables,提供更简洁的语法、更好的性能和集合支持。
| 特性 | iptables | firewalld | nftables |
|---|---|---|---|
| 内核框架 | netfilter | netfilter(前端) | nf_tables |
| 管理方式 | 命令行直接操作 | 动态管理,支持D-Bus | 命令行或API |
| 性能 | 一般 | 依赖后端 | 高(集合、映射) |
| 语法 | 复杂 | 简单(服务/区域) | 简洁统一 |
| 适用场景 | 传统静态规则 | 动态环境 | 新系统、高性能需求 |
原理与危害:选型不当的后果
iptables规则线性匹配,规则过多时性能下降;firewalld若配置不当,可能因区域混淆导致规则失效;nftables语法虽简洁,但旧脚本不兼容可能引发配置错误。例如,误将默认策略设为ACCEPT,会暴露所有端口;规则顺序错误可能阻断合法流量。根据统计,配置错误是防火墙失效的主因之一。
具体排查:如何确认当前防火墙状态
执行以下命令检查:
# 查看firewalld状态
systemctl status firewalld
# 查看iptables规则
iptables -L -n -v
# 查看nftables规则
nft list ruleset
# 查看iptables后端
alternatives --display iptables若firewalld运行,则iptables规则可能由它生成。使用firewall-cmd --list-all查看当前区域规则。
分步解决:三大工具实战配置
iptables基础配置
允许SSH和HTTP,默认拒绝:
iptables -P INPUT DROP
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
service iptables save # 保存规则firewalld动态管理
添加服务并重载:
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=ssh
firewall-cmd --reload
firewall-cmd --list-allnftables现代语法
创建表和链,允许SSH和HTTP:
nft add table inet filter
nft add chain inet filter input { type filter hook input priority 0 \; policy drop \; }
nft add rule inet filter input iif lo accept
nft add rule inet filter input tcp dport {22,80} accept
nft add rule inet filter input ct state established,related accept
nft list ruleset > /etc/nftables.conf选型清单与防护建议
根据场景选择:
- 新系统(如RHEL 8+、Debian 10+):优先nftables,性能好且未来兼容。
- 需要动态调整:选firewalld,配合区域管理。
- 旧系统或简单规则:iptables仍可用,但建议逐步迁移。
无论选择哪种,务必遵循最小权限原则,定期审计规则。对于需要集中管理的场景,可考虑AegisX的防火墙策略管理能力,实现规则统一下发与合规检查。
行动建议
立即检查你的服务器防火墙状态,根据上述清单选定工具,并备份现有规则。测试新规则时,先在非生产环境验证,避免锁死SSH。保持规则简洁,注释清晰,并纳入版本控制。
常见问题(FAQ)
我的服务器是CentOS 7,应该用iptables还是firewalld?
CentOS 7默认使用firewalld,但iptables也可用。若你熟悉iptables且规则简单,可继续使用;若需要动态调整或区域管理,建议用firewalld。长期看,CentOS 7已停止维护,建议迁移到新系统并使用nftables。
nftables能完全替代iptables吗?迁移复杂吗?
nftables已能替代iptables绝大多数功能,且语法更简洁。迁移时可用iptables-nft-translate工具转换规则,但需测试兼容性。对于复杂规则集,建议逐步重构,利用nftables的集合和映射特性优化性能。
firewalld和iptables有什么区别?哪个性能更好?
firewalld是iptables的前端管理工具,底层仍调用iptables或nftables。性能取决于底层实现,nftables后端性能更优。firewalld胜在动态管理和区域概念,适合需要频繁变更的环境;iptables更直接,适合简单静态规则。
如何查看当前系统正在使用哪个防火墙?
运行`systemctl status firewalld`查看firewalld状态;`iptables -L -n -v`查看iptables规则;`nft list ruleset`查看nftables规则。若firewalld运行,则规则可能由它管理。也可用`alternatives --display iptables`查看iptables后端。
生产环境防火墙规则备份与恢复怎么做?
iptables用`iptables-save > rules.v4`备份,恢复用`iptables-restore rules.nft`备份,恢复用`nft -f rules.nft`。建议定期备份并版本控制。