linux防火墙性能优化核心是减少每包匹配成本和绕过不必要处理:1.规则置顶(如established连接)、合并端口、清理僵尸规则、默认drop;2.用ipset/nftables set替代线性匹配;3.通过raw表notrack绕过conntrack;4.迁至nftables实现原子更新与动态策略。

直接把最常匹配的规则放在最前面,能显著减少每包处理时间。Linux 防火墙(iptables/nftables)是线性遍历规则的,只要命中就停止匹配——所以 80% 以上的流量如果能在第一条规则就放行,后面所有规则就完全跳过。
把 established 连接规则置顶
已建立的 TCP 连接(ESTABLISHED、RELATED)通常占全部入站流量的 80% 以上。这条规则应无条件放在 INPUT 和 OUTPUT 链最顶端:
- iptables: iptables -I INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
- nftables: nft add rule ip filter input ct state established,related accept
这样后续所有规则对回包、长连接数据流都不再参与匹配,大幅降低 CPU 开销。
合并端口与 IP,减少规则条目
不要为每个端口或每个网段单独写一条规则。高频服务(如 SSH、HTTP、HTTPS)应合并成单条规则:
- 用 nftables 的 set 语法: nft add rule ip filter input tcp dport {22, 80, 443} accept
- 用 ipset 管理大量 IP:先创建集合 ipset create allow_ips hash:net,再批量导入网段,最后用 iptables -A INPUT -m set --match-set allow_ips src -j ACCEPT
避免写几十条 -s 192.168.1.1 -j ACCEPT 这类离散规则——线性扫描代价高,而哈希查找接近常数时间。
PyCharm 2026.2.0.1 Linux版提供 JetBrains 官方 2026.2.0.1 版本安装包,适合需要指定 PyCharm 版本进行 Python 项目开发、运行和调试的用户。
绕过连接跟踪,释放 conntrack 压力
conntrack 表是性能热点,尤其对 UDP 流量(DNS、健康检查)或内部服务通信。不需要状态跟踪的流量,应从 raw 表标记 notrack:
- DNS 查询响应:nft add rule ip raw PREROUTING udp dport 53 notrack
- 内网可信网段互访:nft add rule ip raw PREROUTING ip saddr @trusted_nets ip daddr @trusted_nets notrack
- 同时调小超时值:sysctl -w net.netfilter.nf_conntrack_tcp_timeout_established=300
这能防止 conntrack 表快速填满,避免因哈希碰撞或内存耗尽导致丢包或延迟飙升。
迁移到 nftables 并启用原子更新
iptables 多表多链易引发规则冲突或瞬时放空;nftables 采用统一语法、树形结构和原子提交,更适合大规模动态策略:
- 导入导出整套规则:nft list ruleset > backup.nft,nft -f new_rules.nft
- 动态更新 IP 黑白名单:nft add element inet filter blocked_ips { 192.168.5.100 timeout 1h }
- 支持自动合并连续网段,比 ipset 更轻量,且原生集成 timeout 和 counters
新部署或规则频繁变更的场景,nftables 是更稳定、更可维护的选择。










