源路由为什么危险
IP 源路由选项允许发送方在报文里指定转发路径,接收方如果接受这种选项,就等于让外部输入参与本机的转发判断,可能绕过部分基于目的地址的访问控制。CIS 主机基线要求 IPv4 与 IPv6 的 accept_source_route 在 all 与 default 两处都为 0;现代发行版默认即如此,核查重点是防止镜像模板或所谓网络优化脚本把它改回 1。
基本信息
| 加固项 | 源路由选项禁用 |
|---|---|
| 适用平台 | Linux(RHEL/CentOS/Debian/Ubuntu) |
| 风险等级 | 中 |
| 基线 | net.ipv4 与 net.ipv6 的 all/default accept_source_route 均为 0 |
| 生效方式 | sysctl.d 片段 + sysctl --system |
典型使用场景
- 等保与 CIS 基线核查:作为网络参数加固的固定项
- 模板交付前检查:镜像与虚拟机模板出厂前确认参数未被改回
- 排障后复核:网络排障时临时开启源路由测试,结束必须恢复
- 参数统一:把 v4/v6 四个值成对写入同一份 sysctl 片段
- 云主机加固:云上镜像常来自第三方,默认值不保证
核查与加固
核查与加固
sysctl net.ipv4.conf.all.accept_source_route net.ipv4.conf.default.accept_source_route
sysctl net.ipv6.conf.all.accept_source_route net.ipv6.conf.default.accept_source_route
cat >> /etc/sysctl.d/99-hardening.conf <<'EOF'
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
net.ipv6.conf.all.accept_source_route = 0
net.ipv6.conf.default.accept_source_route = 0
EOF
sysctl --system # 重新加载全部 sysctl 片段并确认无报错参数逐项读法
| 参数 | 含义 | 正常与异常 |
|---|---|---|
| ipv4.conf.all | 对所有已存在接口生效 | 非 0=存在接受源路由的接口 |
| ipv4.conf.default | 对之后新建的接口生效 | 非 0=新接口会继承不安全默认值 |
| ipv6.conf.all | IPv6 版本的同名项 | 最容易被漏查的一项 |
| ipv6.conf.default | IPv6 新接口默认值 | 应与 v4 成对处理 |
| sysctl --system | 重载配置并输出生效项 | 报错说明片段语法或路径有误 |
该参数只影响本机是否接受源路由选项,不影响正常路由与转发:关闭它对常规业务没有副作用,不存在兼容性顾虑。
网络设备侧同样存在源路由开关,但命令与 Linux 完全不同,需按对应厂商手册单独核查。
落地要点
- 四个参数写在同一份片段里,避免后续更新漏项
- 把片段纳入配置管理,模板与镜像创建时自动应用
- 核查用 sysctl 与 sysctl -a 双路径确认,排除片段未加载
- 网络设备与主机分别核查,两者命令体系完全不同
- 变更记录里保留改动前后取值,便于审计追溯
sysctl.d 片段按文件名排序加载,编号靠后的优先级更高:加固片段建议用 99- 前缀,确保最终生效。