nftables 是更紧凑可扩展的网络控制框架,需通过分层链设计、集合复用、连接跟踪协同优化及流卸载加速来提升性能。

nftables 不是 iptables 的简单命令替换,而是一套更紧凑、更可扩展的网络控制框架。真正提升性能,关键不在堆规则数量,而在结构设计和对象复用。配置得当,单台 VPS 就能稳定承载千级并发连接,同时保持低延迟和高可观测性。
表与链的合理分层
避免把所有规则塞进一个 inet filter input 链里。应按流量意图拆分:基础链只做粗筛,再跳转到专用链处理细节。
- 主 input 链保留三类规则:回环放行、连接状态判断(established/related)、可疑源初步拦截(如 geoip 或速率异常)
- 为服务建独立链,例如 chain ssh_in、chain http_in,用 jump 引导流量
- 对内网访问、管理网段、监控探针等场景,单独设 chain internal,方便策略隔离与审计
用集合(set)代替重复规则
匹配多个端口、IP 或协议时,写一条规则引用集合,比罗列十几条规则更高效、更易维护。
- 定义常用端口集合:define svc_ports = { 22, 80, 443, 8080, 9000 }
- 定义可信管理 IP:add set ip filter mgmt_ips { type ipv4_addr; },然后动态添加:add element ip filter mgmt_ips { 192.168.1.5, 203.0.113.10 }
- 规则中直接引用:nft add rule ip filter input ip saddr @mgmt_ips tcp dport @svc_ports accept
连接跟踪与计数器协同优化
ct state 是基础,但仅靠它不够。搭配 counter 和 quota,才能实现细粒度控制与真实流量洞察。
- 给关键规则加 counter,后续用 nft list chain ... -a 查看命中次数,识别高频/低效规则
- 限制暴力尝试:为 SSH 新连接设置每分钟配额,超限后 drop,不依赖外部脚本:ct state new limit rate over 5/minute burst 3 packets counter name ssh_rate
- 对特定子网启用连接跟踪,其他直通流量禁用 ct(用 meta nfproto ipv4 meta pkttype host ct state invalid drop 前置过滤)减少开销
启用流卸载与内核调优
硬件加速不是可选项,而是现代服务器的标配能力。nftables 的 flow_offload 能显著降低 CPU 占用。
- 确认内核支持:zcat /proc/config.gz | grep NF_FLOW_TABLE(需 CONFIG_NF_FLOW_TABLE=m/y)
- 在 prerouting 和 postrouting 链中插入:flow_offload,例如:nft add rule ip filter prerouting flow_offload
- 同步调大 conntrack 表:修改 /etc/sysctl.conf 中 net.netfilter.nf_conntrack_max=131072 并执行 sysctl -p











