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

禁用非法ICMP重定向是Linux安全加固中防止路由劫持、中间人攻击和网络拓扑欺骗的关键一步。它不依赖防火墙规则,而是从内核层面切断重定向报文的接收与发送能力,尤其适用于非路由器角色的服务器(如Web服务、数据库、API后端等)。
关闭IPv4重定向接收与发送
ICMP重定向分“接收”(accept)和“发送”(send)两类,二者都需禁用才能真正阻断劫持路径:
- 禁收:防止主机被恶意网关误导,错误更新本地路由表
- 禁发:避免本机被利用为跳板,向其他主机广播伪造重定向报文
在 /etc/sysctl.conf 或 /etc/sysctl.d/99-secure.conf 中添加以下四行:
net.ipv4.conf.all.accept_redirects = 0<br>net.ipv4.conf.default.accept_redirects = 0<br>net.ipv4.conf.all.send_redirects = 0<br>net.ipv4.conf.default.send_redirects = 0
执行 sysctl -p 立即生效,并确保重启后持续有效。
同步禁用IPv6重定向
现代网络普遍启用IPv6,ICMPv6重定向同样可被用于劫持。忽略IPv6会留下明显缺口:
- 添加两行至同一配置文件:
net.ipv6.conf.all.accept_redirects = 0net.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不可信的入包
这些参数共同构成对ICMP类路由操控行为的纵深防御。
验证与注意事项
禁用后建议做两项检查:
- 从局域网另一台机器尝试发送伪造ICMP重定向包(需工具如scapy),确认目标主机路由表不再变更
- 使用
ip route get 8.8.8.8等命令确认出向路径未受干扰,业务连通性正常
注意:若服务器运行Docker、Kubernetes或开启 net.ipv4.ip_forward=1,需评估容器网络或转发逻辑是否依赖重定向——绝大多数云环境无需启用,可放心禁用。











