Iptables和nftables是Linux内核Netfilter框架的两代用户态管理工具,用于配置数据包过滤、NAT转换和数据包修改规则。虽然nftables正在逐步取代iptables,但iptables的兼容层仍然广泛使用。本文以Ubuntu 24.04为例,深入讲解iptables和nftables的高级规则编写和应用场景。
▶一、Iptables基础架构
Iptables基于表和链(table-chain)的二维结构组织规则。四个内置表分别是:filter(过滤表,默认)、nat(地址转换表)、mangle(报文修改表)和raw(原始包处理表)。每条链代表数据包处理的特定阶段,如INPUT(入站)、OUTPUT(出站)、FORWARD(转发)、PREROUTING(路由前)和POSTROUTING(路由后)。
▶二、基础过滤规则配置
# 清空默认规则
iptables -F
iptables -X
# 设置默认策略
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# 允许已建立的连接
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 允许本地回环
iptables -A INPUT -i lo -j ACCEPT
# 开放SSH端口(仅限指定IP)
iptables -A INPUT -p tcp --dport 22 -s 192.168.1.0/24 -j ACCEPT
▶三、NAT地址转换配置
NAT(网络地址转换)是企业网络中最常用的功能,包括源NAT(SNAT)和目的NAT(DNAT)。SNAT用于内网访问外网时将私有IP转换为公网IP,DNAT用于外部访问内部服务时将公网IP和端口映射到内网服务器。配置NAT需要开启ip_forward内核参数。
▶四、连接追踪与状态匹配
# 连接追踪模块配置
iptables -A FORWARD -m state --state NEW -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
# 限制并发连接数
iptables -A INPUT -p tcp --syn -m connlimit --connlimit-above 100 -j REJECT
# 限制新建连接速率
iptables -A INPUT -p tcp --dport 80 -m limit --limit 50/minute -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j DROP
▶五、Nftables迁移配置
Nftables作为iptables的继任者,采用了更简洁的语法和更好的性能。它的配置结构与iptables不同,地址族支持inet(同时处理IPv4和IPv6)家族,规则集使用花括号分组,链使用命名方式管理:
# nftables配置示例
#!/usr/sbin/nft -f
table inet filter {
chain input {
type filter hook input priority 0; policy drop;
ct state established,related accept
iif lo accept
tcp dport ssh accept
tcp dport {http, https} accept
}
}
▶六、DDoS防护规则优化
针对常见的DDoS攻击,可通过iptables添加多种防御规则:限制SYN Flood使用synproxy模块、限制ICMP Flood的速率、限制单个IP的并发连接数、使用hashlimit限制每秒数据包数。多层防护规则配合使用可以有效缓解流量型攻击。
▶七、规则持久化与自动加载
# 保存iptables规则
iptables-save > /etc/iptables/rules.v4
ip6tables-save > /etc/iptables/rules.v6
# nftables规则保存
nft list ruleset > /etc/nftables.conf
# 设置开机自动加载(iptables-persistent)
systemctl enable netfilter-persistent
# 设置nftables开机加载
systemctl enable nftables
▶八、规则调试与日志分析
使用iptables的LOG目标记录匹配到的数据包信息到系统日志,通过dmesg或journalctl查看。配合tcpdump进行抓包验证规则是否按预期工作。对于nftables,使用nft monitor命令实时观察规则匹配情况,定位配置问题。
▶九、性能优化与规则排序
防火墙规则按顺序匹配,命中后不再继续匹配后续规则。因此应将最频繁匹配的规则放在前面,减少不必要的匹配开销。使用ipset将大量IP地址分组管理,相比单个IP规则可提升数倍性能。对于大流量场景,建议将规则数量控制在200条以内。
▶十、IPv6防火墙配置
随着IPv6部署的普及,必须同时配置IPv4和IPv6防火墙规则。IPv6的规则语法与IPv4相同,使用ip6tables工具管理。需要注意IPv6环境下每个接口都有链路本地地址(fe80:://10),需要配置对应的允许规则,同时注意ICMPv6协议在IPv6中的重要性。
▶十一、IP集(ipset)批量管理
当防火墙规则需要匹配大量IP地址时,使用传统的单个IP规则会严重影响性能。ipset技术将大量IP地址分组存储在内核哈希表中,匹配速度不随地址数量增加而下降。ipset支持多种存储类型:hash:net存储网段、hash:ip存储单个IP、list:set组合多个集合。配合iptables的set匹配模块,单条规则即可实现批量IP的允许或阻止。
▶十二、防火墙规则生命周期管理
防火墙规则需要像代码一样进行版本管理和定期审计。建立规则的版本号机制,每次修改记录变更人和原因。定期(建议每月)审查规则的有效性,移除长期未命中的规则和不再需要的临时规则。使用防火墙规则分析工具如iptables-save配合diff命令对比规则变更,及时发现异常规则修改。
▶十四、iptables规则优化与维护建议
大规模部署iptables规则时需要注意维护成本。建议将规则按照功能模块拆分成多个脚本文件便于管理,每个脚本专注于一个功能领域如基本过滤、端口映射、DDoS防护。规则顺序优化将命中率高的规则放在前面减少CPU开销。使用ipset管理大量IP地址避免规则膨胀。建立规则的变更日志记录每次修改人和原因。配合配置审计工具定期检查规则一致性确保所有服务器遵循相同的安全策略。
注册
登录控制台
