ICMP 重定向为什么危险
ICMP 重定向本是路由器告诉主机“有更优下一跳”的机制。主机如果接受这类报文,攻击者就能伪造重定向,让本机把发往关键网段的流量改送到攻击者主机,形成同网段中间人;发送方向则可以配合实现流量牵引。普通服务器不是路由器,既不需要接受也不需要发送这类报文,因此基线要求把接受与发送重定向一并关闭。
基本信息
| 加固项 | ICMP 重定向路由防护 |
|---|---|
| 适用平台 | Linux 主机(RHEL/CentOS、Debian/Ubuntu) |
| 权限要求 | root |
| 基线值 | accept_redirects、secure_redirects、send_redirects 全为 0 |
| 生效层级 | conf.all 与 conf.default,接口级参数会分别继承 |
典型使用场景
- 主机基线巡检的“网络参数”专项
- 同网段部署多台服务器时阻断内网流量劫持路径
- 容器宿主机与 K8s 节点统一内核安全参数
- 等保测评中“入侵防范”条款的取证项
- 排查路由被异常改写导致的访问漂移问题
核查当前值
核查当前值
sysctl net.ipv4.conf.all.accept_redirects net.ipv4.conf.default.accept_redirects # 期望 0
sysctl net.ipv4.conf.all.secure_redirects net.ipv4.conf.default.secure_redirects # 期望 0
sysctl net.ipv4.conf.all.send_redirects net.ipv4.conf.default.send_redirects # 期望 0
sysctl -a --pattern 'net.ipv4.conf.*.(accept|secure|send)_redirects' # 全接口复核,防止漏掉具体网卡加固:成套写入
加固:成套写入
cat > /etc/sysctl.d/99-net-hardening.conf <<'EOF'
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.default.secure_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
EOF
sysctl --system # 使配置生效并复核六个键的分工
| 参数 | 方向 | 说明 |
|---|---|---|
| accept_redirects | 接收 | 是否接受任何来源的 ICMP 重定向 |
| secure_redirects | 接收 | 是否接受来自默认网关列表的重定向,漏改等于留门 |
| send_redirects | 发送 | 主机不应承担路由器角色,普通服务器关闭 |
| conf.all 与 default | 层级 | all 立即对全部接口生效,default 影响后续新建接口 |
六个键必须成套修改。只把 accept_redirects 设为 0 而留下 secure_redirects=1 时,来自“默认网关”的重定向仍会被接受,攻击者只要伪造网关地址就能绕过,检查时六个键要一次性核对。
send_redirects 关的是路由器功能,普通服务器和容器节点都应关闭;如果这台机器本身就是按网关或路由转发角色部署的,改动前要确认业务转发行为不依赖它,并在变更后做一次连通性回归测试。