nftables通过ct state invalid拦截异常包、tcp标志匹配阻断扫描、联动rp_filter防ip伪造来应对协议欺骗:invalid规则须前置,xmas/null等非法标志组合直接drop,rp_filter需设为1或2,禁止单靠ip黑名单等无效做法。

要应对网络通信中的协议欺骗行为,nftables 本身不解析协议状态机,但能结合内核 conntrack 和 TCP 标志校验机制,在连接建立前就识别并拦截异常流量。核心思路是:用 ct state 拦 invalid 包,用 TCP 标志组合匹配 拦非法扫描,再辅以 内核参数联动 防 IP 源伪造。
先拦无法归类的包:ct state invalid 必须前置
conntrack 是 nftables 状态检测的基础。当分片丢失、NAT 映射错乱或时序异常时,包会被标记为 invalid——这类包极可能是被篡改或重放的欺骗流量。它必须放在所有新建连接规则之前,否则会被误判为 new 放行:
nft add rule inet filter input ct state invalid drop- 不要写成
ct state new在前;invalid规则位置靠后会导致漏放 - 常见触发场景:伪造的 SYN+ACK(非三次握手中合法响应)、重复 FIN、TCP 序号跳变过大
再拦非法 TCP 标志:精准阻断隐蔽扫描
标准 conntrack 不校验 TCP 标志合法性,而 nftables 可通过 tcp flags 匹配直接拦截典型欺骗包:
- Xmas 扫描:
tcp flags & (fin | urg | psh) == (fin | urg | psh)→ drop - Null 扫描:
tcp flags & (syn | rst | fin | ack | urg | psh) == 0→ drop - SYN+FIN 同时置位(违反 RFC):
tcp flags & (syn | fin) == (syn | fin)→ drop - 全标志置位(All set):
tcp flags & 0x3f == 0x3f→ drop
配合内核参数防源地址伪造
nftables 无法阻止二层或三层源 IP 伪造,但可与内核反向路径过滤(rp_filter)协同增强防护:
- 启用严格模式:
sysctl -w net.ipv4.conf.all.rp_filter=1 - 对多网卡环境建议设为 2(loose 模式),避免误丢合法回程包
- 注意:该参数仅对入向流量生效,且依赖路由表一致性,不能替代 nftables 规则
不推荐单独依赖的“伪防护”
有些做法看似加强安全,实则无效甚至有害:
- 仅靠
ip saddr黑名单封 IP:欺骗者可随意更换源地址,效果极差 - 在 raw 表中丢弃所有 ICMP:会破坏路径 MTU 发现和 traceroute,影响运维
- 用
tcp dport单独匹配却不带协议前提:语法错误,nftables 直接报错 - 试图用 nftables 解密 TLS 或识别 HTTP Host:超出其能力范围,需交由 userspace helper 或 Suricata 等补充











