Linux需禁用ICMP重定向以阻断路由劫持,必须同时关闭IPv4/IPv6的接收与发送功能,并配合secure_redirects、accept_source_route、rp_filter等参数实现纵深防御,配置后通过sysctl -p生效并验证全为0。

Linux 使用 sysctl 关闭 ICMP 重定向,核心是禁用内核对重定向报文的接收与发送能力。这不是简单“关 ping”,而是阻断路由劫持的关键底层防护——尤其对 Web、数据库等非网关角色的服务器必须关闭。
同时禁用 IPv4 接收和发送重定向
只关接收或只关发送都不安全:攻击者可能伪造重定向误导本机路由,也可能利用本机转发能力向其他主机广播恶意重定向。必须双端封堵:
-
net.ipv4.conf.all.accept_redirects = 0—— 所有接口不接受任何 ICMP 重定向 -
net.ipv4.conf.default.accept_redirects = 0—— 新建网络接口默认继承该策略 -
net.ipv4.conf.all.send_redirects = 0—— 本机绝不主动发送重定向报文 -
net.ipv4.conf.default.send_redirects = 0—— 防止未来接口意外启用发送功能
同步处理 IPv6 ICMPv6 重定向
IPv6 已成主流,ICMPv6 重定向同样可被用于拓扑欺骗。忽略它等于留一个高危后门:
net.ipv6.conf.all.accept_redirects = 0net.ipv6.conf.default.accept_redirects = 0- IPv6 默认不启用
send_redirects,但显式设为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 不可信的入包
配置落地与验证
将上述参数写入 /etc/sysctl.d/99-secure.conf(优先于 /etc/sysctl.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 net.ipv6.conf.all.accept_redirects = 0 net.ipv6.conf.default.accept_redirects = 0 net.ipv4.conf.all.secure_redirects = 0 net.ipv4.conf.all.accept_source_route = 0 net.ipv4.conf.all.rp_filter = 1
执行 sysctl -p 生效;重启后自动加载。验证是否生效:
sysctl -a | grep redirect —— 所有相关行输出值应全为 = 0


















