禁用ICMP重定向是防范内网路由劫持最直接有效的方式,需同时关闭IPv4/IPv6的accept_redirects和send_redirects(IPv6无需send_redirects),并配套禁用source_route、启用rp_filter等加固项。

在Linux内核层面禁用ICMP重定向,是防范内网路由劫持最直接有效的方式。它不依赖防火墙规则,而是从协议栈源头切断接收与发送能力,特别适用于Web服务器、数据库、API后端等非路由器角色的主机。
必须同时关闭接收和发送
ICMP重定向劫持依赖两个环节:攻击者伪造重定向报文让目标主机改写路由表(需accept_redirects=0),或把本机当作跳板向其他主机广播恶意重定向(需send_redirects=0)。只关其一仍存在风险。
- 禁收:防止被网关或恶意设备误导,错误更新本地路由表
- 禁发:避免本机被利用为中间人,转发伪造重定向报文
- IPv4和IPv6都要处理,现代网络双栈普遍启用,缺一不可
配置关键参数(推荐写入/etc/sysctl.d/99-secure.conf)
使用独立配置文件更清晰,也便于安全基线统一管理:
-
IPv4重定向控制:
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 -
IPv6重定向控制(常被忽略):
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(阻断源路由IP欺骗)
net.ipv4.conf.all.rp_filter = 1(启用反向路径过滤,丢弃不可信源IP包)
立即生效并验证
执行以下命令加载配置:
sudo sysctl -p /etc/sysctl.d/99-secure.conf
验证是否全部设为0:
sysctl -a | grep -E 'redirects|source_route|rp_filter' | grep =\ 0
若输出包含所有目标参数且值为0,说明已生效。还可配合ip route get 8.8.8.8确认出向路径未异常变动。
注意事项与例外场景
绝大多数云服务器、容器宿主机(Docker/K8s)、常规业务节点都不需要ICMP重定向功能,可放心禁用。
- 若系统明确开启
net.ipv4.ip_forward = 1且承担真实路由职责,需评估是否影响上游网关逻辑;但即便如此,通常也只需保留特定接口的重定向,而非全局开启 - 禁用后不影响TCP/UDP通信、DNS解析、HTTP服务等核心功能,仅限制ICMP路由类报文交互
- 无需重启系统,
sysctl -p即可持久生效(因配置已落盘)











