nftables无法在prerouting链识别或丢弃“混杂模式嗅探包”,因混杂模式是网卡驱动层状态,数据包未匹配本机MAC即不会进入Netfilter钩子;所谓嗅探无协议特征,只能基于IP欺骗、异常TCP标志、无效连接等可观察行为做防护。

直接在 prerouting 链丢弃“混杂模式嗅探包”这个说法本身存在概念混淆——nftables 无法识别或检测某台设备是否处于混杂模式,也无法判断某个数据包是否来自“嗅探行为”。混杂模式是网卡驱动层的工作状态,对网络层(IP)和传输层(TCP/UDP)的数据包内容完全透明;nftables 运行在 Netfilter 的 hook 点上,只能基于数据包的可见字段(如源/目的 IP、端口、协议、标志位、连接状态等)做匹配和动作,不能感知物理层或链路层的监听行为。
为什么 prerouting 无法识别“嗅探包”
– 混杂模式下,网卡接收所有经过该网段的帧,但操作系统内核只将**目标 MAC 匹配本机或广播/多播地址**的帧上送到网络协议栈;其他帧(如发给邻居主机的帧)根本不会进入 prerouting 钩子。
– 即使攻击者伪造 MAC 或利用 ARP 欺骗让流量经过本机,其数据包在 IP 层仍是合法的:源 IP、目的 IP、协议、端口都正常,nftables 无特征可判别为“嗅探”。
– 所谓“嗅探流量”不是一种协议类型,也没有专用端口、ICMP 类型或 TCP 标志组合。它只是被动接收,不主动发包(或仅发极少量探测包),而这部分发包行为也属于常规流量范畴。
能做的合理防护方向
虽然不能拦“嗅探”,但可通过以下方式降低被嗅探的风险或阻断配套攻击:
-
禁用不必要的二层暴露:关闭未使用的网卡混杂模式(用
ip link set dev eth0 promisc off),确保交换环境而非集线器/HUB,启用端口安全(如 DHCP Snooping、DAI、IPSG)在交换机侧隔离异常 MAC 行为。 -
在 prerouting 链阻断典型辅助行为:例如,丢弃非本网段却声称来自本地子网的入向包(防 IP 欺骗):
nft add rule ip filter prerouting ip saddr 192.168.1.0/24 iifname != "eth0" drop -
限制异常扫描行为:结合
ct state invalid、tcp flags & (fin|syn|rst|ack) == fin | syn | rst等规则,在 prerouting 或 input 链中丢弃明显畸形或高频试探包(如 SYN 扫描、XMAS 扫描)。 - 启用连接跟踪并默认拒绝 NEW 连接:确保只有明确放行的服务(如 SSH、HTTPS)能建立新连接,其余 NEW 流量在 prerouting 后被 input 链的默认策略拦截,大幅压缩攻击面。
如果你真想在 prerouting 做初步过滤
可以添加如下典型防护规则(需配合完整规则集使用):
- 丢弃源地址为私有地址但来自外网接口的包(防源地址欺骗):
nft add rule ip filter prerouting ip saddr { 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 } iifname "eth1" drop - 丢弃含可疑 TCP 标志组合的包(如 NULL 扫描、FIN 扫描):
nft add rule ip filter prerouting tcp flags & (fin|syn|rst|psh|ack|urg) == 0 dropnft add rule ip filter prerouting tcp flags & (fin|syn|rst|psh|ack|urg) == fin drop - 记录并丢弃无效连接状态包:
nft add rule ip filter prerouting ct state invalid log prefix "INVALID: " drop
这些操作针对的是可观察的异常网络行为,而非“嗅探”本身。真正防御嗅探,依赖的是网络分段、加密通信(TLS/SSH/IPsec)、可信交换环境和端点安全策略。

















