生产环境nftables高效报文处理核心是结构清晰、匹配精准、路径最短:优先放行ESTABLISHED/RELATED连接,白名单驱动静默拦截新连接,启用flowtable硬件卸载,并对可疑丢弃限速日志。

生产环境用 nftables 实现高效报文分类与拦截,关键不在堆规则数量,而在于结构清晰、匹配精准、执行路径短。核心思路是:早放行、快拒绝、少计算、可审计。
按连接状态优先分流
所有规则必须把已建立连接(ESTABLISHED/RELATED)放在最前面。这类流量不走端口和协议匹配,直接由 conntrack 模块查表放行,开销几乎为零。
- nft add rule ip filter input ct state established,related accept
- nft add rule ip filter input ct state invalid drop
- 确保 net.netfilter.nf_conntrack_enabled=1 已启用,且 nf_conntrack_max 设置合理(如 1048576),避免连接跟踪表溢出导致新连接被误丢
白名单驱动的静默拦截
不靠“黑名单式”逐条封禁,而是定义明确的业务端口白名单,其余新连接一律静默丢弃(drop)。这种方式既减少规则匹配次数,又提升隐蔽性。
- 先确认真实监听端口:ss -tln | awk '{print $5}' | cut -d: -f2 | sort -u
- 写入规则时使用集合语法,避免多条重复规则:nft add rule ip filter input tcp dport != {22, 80, 443} ct state new drop
- UDP 同理,但需谨慎:仅放行必需端口(如 DNS 的 53、NTP 的 123),其他 udp dport != {53} ct state new drop
- 务必把这条规则放在 ACCEPT 白名单规则之后、但仍在 INPUT 链靠前位置(priority 0 或更高),防止被后续规则干扰
硬件感知的快速路径优化
若服务器网卡支持 flow offload(如 Intel ixgbe、Mellanox ConnectX 系列),可启用 nftables flowtable,将高频连接卸载到网卡硬件处理,大幅降低 CPU 占用。
- 创建 flowtable:nft add table inet fastpath
- 绑定入口设备:nft add flowtable inet fastpath ft0 '{ hook ingress priority -30; devices = [ eth0 ]; }'
- 在 input 链中引用:nft add rule ip filter input meta nfproto ipv4 @fastpath
- 验证是否生效:nft list flowtable inet fastpath 查看命中计数
日志与限速协同审计
只对真正可疑的丢弃行为打日志,且必须限频,否则日志风暴会拖垮磁盘和 syslog 服务。
- 对静默丢弃加轻量级计数器:nft add rule ip filter input tcp dport != {22,80,443} ct state new counter name tcp_silent_drop
- 如需记录,用 log + limit 组合:nft add rule ip filter input tcp dport != {22,80,443} ct state new limit rate 5/second counter log prefix "BLOCKED_TCP:"
- 日志前缀带规则标识,便于在 rsyslog 或 journalctl 中过滤:journalctl -t kernel | grep BLOCKED_TCP










