必须同时禁用IPv4/IPv6的accept_redirects和send_redirects(IPv6无需send_redirects),并设置secure_redirects=0、accept_source_route=0、rp_filter=1,写入/etc/sysctl.d/99-secure.conf后执行sudo sysctl -p生效并验证全为0。

直接禁用 net.ipv4.conf.all.accept_redirects = 0 只是基础动作,单设这一项无法真正防范中间人劫持。攻击者可能利用发送重定向、IPv6重定向或源路由等旁路方式绕过,必须组合配置才能形成有效防护。
必须同时关闭接收和发送重定向
只关接收(accept_redirects)而保留发送(send_redirects),本机可能被用作跳板向其他主机广播伪造重定向;反之,只关发送却留着接收,则本地路由表仍可能被恶意网关篡改。两者缺一不可:
-
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和过时的“安全重定向”机制
现代网络普遍启用IPv6,ICMPv6重定向同样可被用于拓扑欺骗。忽略它等于留一个高危缺口:
- 添加
net.ipv6.conf.all.accept_redirects = 0和net.ipv6.conf.default.accept_redirects = 0 - 显式设置
net.ipv4.conf.all.secure_redirects = 0:该参数已废弃多年,校验逻辑存在绕过漏洞,必须关闭
配合源路由与反向路径过滤构成纵深防御
攻击者常将ICMP重定向与源路由、伪造源IP结合使用。仅关重定向不够,还需封堵这些常见配合手法:
-
net.ipv4.conf.all.accept_source_route = 0—— 内核层直接丢弃含源路由选项的IP包,不进iptables -
net.ipv4.conf.all.rp_filter = 1—— 启用宽松反向路径过滤,丢弃源IP无法从同一接口回溯的入包 - (可选)
net.ipv4.conf.all.log_martians = 1—— 记录不可信源地址数据包,便于事后审计
生效与验证要点
配置写入 /etc/sysctl.d/99-secure.conf 或 /etc/sysctl.conf 后,执行:
-
sudo sysctl -p /etc/sysctl.d/99-secure.conf(推荐指定文件,避免覆盖其他配置) - 验证命令:
sysctl -a | grep -E 'redirects|source_route|rp_filter' | grep "= 0",应全部输出为0 - 检查路由是否异常:
ip route get 8.8.8.8,确认出向路径未因配置变更而错乱



















