核心是优化防火墙规则匹配效率:将established/related规则置顶,合并端口与ip集合,绕过conntrack对无状态流量的跟踪,并定期清理零命中冗余规则。

核心是让每包匹配路径更短、查找更快、状态开销更低。规则数量多不是问题,低效的结构和顺序才是瓶颈。
把高频规则放在最前面
已建立连接(ESTABLISHED/RELATED)通常占入向流量 80% 以上,这条规则必须无条件置顶:
- iptables:
iptables -I INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT - nftables:
nft add rule ip filter input ct state established,related accept
HTTP、HTTPS、SSH 等服务流量也应紧随其后。避免把默认 DROP 放在链首,否则所有合法流量都要遍历全部规则才能被放行。
合并离散规则,用集合替代线性扫描
单 IP 或端口逐条写规则,在十万级规模下会退化为 O(n) 查找,CPU 开销陡增。正确做法是:
- 端口合并:nftables 用
tcp dport {22,80,443};iptables 用-m multiport --dports 22,80,443 - IP 黑白名单:用
ipset创建哈希集合,例如ipset create blacklist hash:ip maxelem 120000 - 批量导入:生成
.ipsetrestore 文件后执行ipset restore -f,比循环add快一个数量级 - 引用规则:只写一条
iptables -I INPUT -m set --match-set blacklist src -j DROP
绕过不必要的连接跟踪
conntrack 是性能热点,尤其对 DNS、健康检查、UDP 或内网互访流量。不需要状态管理的场景应跳过:
- 在 raw 表中标记 notrack:
nft add rule ip raw PREROUTING udp dport 53 notrack - 可信内网段互访也可跳过:
nft add rule ip raw PREROUTING ip saddr @trusted ip daddr @trusted notrack - 同步调小 conntrack 超时:
sysctl -w net.netfilter.nf_conntrack_tcp_timeout_established=300
定期清理无效与冗余规则
长期运行后容易积累零命中、重复、过期或测试残留规则,它们不拦截流量,却拖慢匹配速度:
- 查非零命中规则:
iptables -nvxL INPUT | grep -v "0\ \ 0"或 nft 加-a显示 handle 后筛选计数 - 对连续 30 天命中为 0 的规则,备份后删除:
iptables -D INPUT <num></num>或nft delete rule ip filter input handle <handle></handle> - 封禁网段统一用 CIDR(如
-s 192.168.10.0/24),避免逐条加单 IP











