如何调整Linux内核设置以抵御ICMP重定向攻击?
- 内容介绍
- 文章标签
- 相关推荐
本文共计657个文字,预计阅读时间需要3分钟。
直接禁用TCP和UDP、ICMP重定向报文,是防止被利用进行路由攻击的最有效方式。这并非依赖防火墙过滤,而是从内核行为层面切断攻击入口,特别适用于不直接处理路由器的业务服务器。
关闭 IPv4 和 IPv6 的重定向收发
必须同时禁用“接收”和“发送”,否则仍存在被误导或被当跳板的风险:
- 禁收:防止主机误信伪造重定向,错误更新本地路由表
- 禁发:避免本机因配置异常(如网关错设)主动广播重定向,成为攻击中转点
在 /etc/sysctl.d/99-secure.conf(推荐)或 /etc/sysctl.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<br>net.ipv6.conf.all.accept_redirects = 0<br>net.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 不可信的入包(若有多网卡或使用 Kubernetes,可先试 =2 宽松模式)
使配置生效并验证
执行以下命令加载新配置:
sudo sysctl -p /etc/sysctl.d/99-secure.conf
验证是否全部生效:
sysctl -a | grep redirect | grep "= 0"
应看到所有相关参数值均为 0。再用 ip route get 8.8.8.8 确认出向路径未受影响,业务连通性正常。
注意事项与例外场景
若服务器启用了 net.ipv4.ip_forward=1、运行 Docker 或 Kubernetes,需确认容器网络逻辑是否隐式依赖重定向——绝大多数云环境和标准服务部署中并不依赖,可安全禁用。临时测试可用 sysctl -w,但务必写入配置文件,否则重启失效。
本文共计657个文字,预计阅读时间需要3分钟。
直接禁用TCP和UDP、ICMP重定向报文,是防止被利用进行路由攻击的最有效方式。这并非依赖防火墙过滤,而是从内核行为层面切断攻击入口,特别适用于不直接处理路由器的业务服务器。
关闭 IPv4 和 IPv6 的重定向收发
必须同时禁用“接收”和“发送”,否则仍存在被误导或被当跳板的风险:
- 禁收:防止主机误信伪造重定向,错误更新本地路由表
- 禁发:避免本机因配置异常(如网关错设)主动广播重定向,成为攻击中转点
在 /etc/sysctl.d/99-secure.conf(推荐)或 /etc/sysctl.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<br>net.ipv6.conf.all.accept_redirects = 0<br>net.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 不可信的入包(若有多网卡或使用 Kubernetes,可先试 =2 宽松模式)
使配置生效并验证
执行以下命令加载新配置:
sudo sysctl -p /etc/sysctl.d/99-secure.conf
验证是否全部生效:
sysctl -a | grep redirect | grep "= 0"
应看到所有相关参数值均为 0。再用 ip route get 8.8.8.8 确认出向路径未受影响,业务连通性正常。
注意事项与例外场景
若服务器启用了 net.ipv4.ip_forward=1、运行 Docker 或 Kubernetes,需确认容器网络逻辑是否隐式依赖重定向——绝大多数云环境和标准服务部署中并不依赖,可安全禁用。临时测试可用 sysctl -w,但务必写入配置文件,否则重启失效。

