禁用icmp重定向需在/etc/sysctl.conf中设置accept_redirects和send_redirects为0(ipv4/ipv6均需配置),并补充secure_redirects、accept_source_route、rp_filter等参数实现纵深防御,最后执行sysctl -p生效并验证。

同时关闭IPv4接收与发送重定向
仅禁收或仅禁发都不够——攻击者可能利用本机转发能力作跳板,或通过伪造报文误导本地路由。必须双管齐下:在 /etc/sysctl.conf 或 /etc/sysctl.d/99-secure.conf 中添加以下四行:
- net.ipv4.conf.all.accept_redirects = 0 —— 禁止所有接口接收重定向
- net.ipv4.conf.default.accept_redirects = 0 —— 确保新创建接口也继承该策略
- net.ipv4.conf.all.send_redirects = 0 —— 禁止本机向其他主机发送重定向
- net.ipv4.conf.default.send_redirects = 0 —— 防止未来接口默认开启发送功能
执行 sysctl -p 生效,配置将在重启后自动加载。
同步禁用IPv6 ICMPv6重定向
IPv6已广泛部署,ICMPv6重定向同样可被用于拓扑欺骗。忽略IPv6等于留下高危缺口:- 添加两行:net.ipv6.conf.all.accept_redirects = 0 和 net.ipv6.conf.default.accept_redirects = 0
- IPv6默认不启用
send_redirects,但显式设为 0 更稳妥(可选)
运行 sysctl -a | grep redirect,确认所有相关参数输出值均为 = 0。
补充关键防护参数防绕过
ICMP重定向常与其他机制配合使用,需一并关闭以构建纵深防御:- net.ipv4.conf.all.secure_redirects = 0 —— 禁用已过时且易绕过的“安全重定向”校验
- net.ipv4.conf.all.accept_source_route = 0 —— 阻止源路由选项,防范IP地址伪造
- net.ipv4.conf.all.rp_filter = 1 —— 启用反向路径过滤,丢弃源IP不可信的入包
这些参数共同封堵常见路由操控路径,不增加运维负担,却显著提升抗劫持能力。
验证与注意事项
禁用后建议快速验证两项:
- 用 scapy 等工具从局域网另一台机器发送伪造ICMP重定向包,观察目标主机路由表是否不再变更
- 执行 ip route get 8.8.8.8,确认出向路径未受影响,业务连通性正常
若服务器运行Docker、Kubernetes或启用了 net.ipv4.ip_forward=1,需评估容器网络或转发逻辑是否依赖重定向——绝大多数云环境及标准服务无需该功能。











