应精准拦截高风险ICMP类型而非全禁:阻断Traceroute依赖的Type 0/3/11响应报文(OUTPUT链)、ICMP时间戳Type 13/14收发(INPUT/OUTPUT双向),并限制超长Type 8请求(>1024字节),同时按网卡区分内外网策略以保障诊断功能。

Linux 使用 iptables 拦截非法外网 ICMP 探测包,核心是识别并阻断常见探测行为对应的 ICMP 类型和异常长度,同时避免误伤正常网络诊断功能。关键不在“全禁 ICMP”,而在精准过滤高风险子类。
拦截 Traceroute 类探测(UDP+ICMP 组合)
Traceroute 依赖 TTL 超时触发的 ICMP Type 11(Time Exceeded) 和目标不可达时的 Type 3(Destination Unreachable),还会接收 Type 0(Echo Reply) 确认路径。这些响应若被外部主动获取,会暴露网络拓扑。
- 在 INPUT 链禁止入站的探测请求本身意义不大(如 UDP 端口探测难拦截),重点是不向外回应
- 执行以下命令,阻止本机对外发送这三类响应报文:
iptables -I OUTPUT -p icmp --icmp-type 3 -j DROP
iptables -I OUTPUT -p icmp --icmp-type 11 -j DROP
封禁 ICMP Timestamp 扫描(Type 13/14)
ICMP Timestamp 请求(Type 13)及应答(Type 14)已属过时协议,现代系统基本不启用,但仍是信息收集类扫描的常用手段,可泄露系统时间、启动时间甚至设备型号。
- 直接丢弃所有进出的 timestamp 报文,无业务影响
- 规则需覆盖 INPUT 和 OUTPUT 两个方向:
iptables -I OUTPUT -p icmp --icmp-type 13 -j DROP
iptables -I INPUT -p icmp --icmp-type 14 -j DROP
iptables -I OUTPUT -p icmp --icmp-type 14 -j DROP
限制超长或异常 ICMP 报文长度
合法 ICMP 包(如 ping)通常很短(64–128 字节),而扫描工具常构造大尺寸载荷用于指纹识别或触发内存异常。结合 length 模块可增强识别精度。
- Ping 响应一般 ≤ 84 字节(含 IP+ICMP 头),超过 1024 字节即高度可疑
- 对 IPv4 的 Echo Request(Type 8),可拦截长度 > 1024 的包:
注意:该规则不影响标准 ping 工具(默认 56 字节数据),但能拦住多数畸形探测包。
补充建议:区分内外网,避免一刀切
完全禁用 ICMP 会影响故障排查(如 ping、traceroute 自查),建议按来源控制:
- 只对公网接口(如 eth0)应用上述规则,内网接口(如 eth1)可保留必要 ICMP
- 使用 -i 参数限定网卡,例如:iptables -I INPUT -i eth0 -p icmp --icmp-type 13 -j DROP
- 保存规则后启用持久化(如 service iptables save 或 systemctl enable iptables)


















