防范MTU欺骗攻击的核心是禁用PMTUD、阻止ICMP Type 3 Code 4报文、禁止非必要IP分片、统一设置最小MTU(如1280)、实施TCP MSS钳制,并监控异常ICMP与分片流量。

防范针对网络路径 MTU 的欺骗攻击,核心不是直接“配置防火墙策略”来拦截 MTU 欺骗本身,而是通过合理设置系统级 MTU、禁用危险的 ICMP 控制报文、配合防火墙规则限制异常分片行为,从而消除攻击面并阻断利用链路。MTU 欺骗(如伪造 ICMP “Fragmentation Needed” 报文)常被用于绕过防火墙检测、诱导分片重组漏洞或辅助中间人攻击,其危害依赖于目标系统盲目信任并响应恶意 ICMP 错误消息。
关闭或严格限制 ICMP 路径 MTU 发现(PMTUD)响应
现代操作系统默认启用 PMTUD,但攻击者可伪造 ICMP Type 3 Code 4(“Fragmentation Needed and DF set”)报文,诱使客户端降低 MTU,造成连接异常或触发内核分片处理缺陷。应主动削弱该机制的可信度:
- Windows:在管理员 PowerShell 中执行 netsh interface ipv4 set subinterface "以太网" mtu=1500 store=persistent(替换“以太网”为实际接口名),并禁用自动 PMTUD:netsh interface ipv4 set global maxoffloadsize=0;
- Linux:编辑 /etc/sysctl.conf,添加 net.ipv4.ip_no_pmtu_disc = 1(完全禁用)或 net.ipv4.ip_forward_use_pmtu = 0(仅禁用转发路径);
- 所有系统需在防火墙中阻止入站 ICMP Type 3 Code 4:在 Windows 高级安全防火墙中新建入站规则,协议选 ICMPv4,自定义类型=3,代码=4,动作为“阻止”;Linux 使用 iptables -A INPUT -p icmp --icmp-type 3/4 -j DROP。
禁止非必要 IP 分片与小包重组
MTU 欺骗常配合 IP 分片(尤其是超小分片)绕过深度包检测(DPI)或触发内核重组漏洞(如 Linux CVE-2021-29623)。防火墙应主动干预分片行为:
- Windows:在“高级安全防火墙”→“入站规则”中启用“记录被阻止的连接”,再新建规则匹配“IP 协议类型=4”且“IP 标志=More Fragments 或 Fragment Offset > 0”,动作设为“阻止”;
- Linux:使用 iptables -A INPUT -f -j DROP 直接丢弃所有后续分片;对首片加限制:iptables -A INPUT -p tcp --tcp-flags ALL NONE -m length --length 0:64 -j DROP(拦截常见攻击工具发送的极短 SYN 包);
- 禁用 IPv4 分片转发(若非路由器):sysctl -w net.ipv4.ip_forward=0,避免成为反射跳板。
统一强制端到端最小 MTU 并验证路径稳定性
不依赖动态 PMTUD,而采用静态、保守的 MTU 值(如 1280 字节,兼容 IPv6 最小要求),可从根本上规避欺骗诱导:
- 在终端设备和关键服务器上,将接口 MTU 统一设为 1280(而非默认 1500),命令同上(netsh 或 ip link set dev eth0 mtu 1280);
- 使用 ping -f -l 1200 example.com(Windows)或 ping -M do -s 1200 example.com(Linux)测试路径是否支持该 MTU,无“Packet needs to be fragmented”提示即为稳定;
- 在防火墙出站策略中,对关键业务流量(如 HTTPS、数据库连接)添加“TCP MSS Clamp”规则:Windows 可通过组策略启用“TCP/IP 筛选”中的 MSS 限制;Linux 使用 iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1240(预留 40 字节 TCP/IP 头)。
监控异常 ICMP 和分片流量模式
真实攻击往往伴随高频 ICMP Type 3 Code 4 报文或大量偏移量异常的分片。需建立基线并告警:
- Windows:启用防火墙日志(Windows Defender 防火墙→高级设置→属性→记录→自定义→记录被阻止的连接),定期用 PowerShell 解析 pfirewall.log,筛选 Protocol=1 AND SubStatus=0x00000004(ICMPv4 Code 4);
- Linux:用 tcpdump -i any 'icmp[0] == 3 and icmp[1] == 4' 实时捕获,并结合 fail2ban 自动封禁高频源 IP;
- 云环境(如 Azure/AWS):启用 VPC 流日志,过滤 protocol=1 dstport=0(ICMP)且 bytes > 1000 的异常大 ICMP 包,关联 WAF 地理位置规则临时封禁来源区域。

















