广播 ICMP 与放大攻击
如果主机响应发往广播地址的 ICMP Echo 请求,攻击者就能利用大量主机作为反射器,把一个小请求放大成成规模的流量打到受害者,这类放大攻击历史上被称为 Smurf。加固方式是让内核忽略广播 ICMP 请求,同时忽略伪造的错误响应。单播 ping 不受影响,因此关闭它没有实际兼容性代价。
基本信息
| 加固项 | ICMP 放大攻击缓解 |
|---|---|
| 适用平台 | Linux(RHEL/CentOS/Debian/Ubuntu) |
| 风险等级 | 中 |
| 基线 | net.ipv4.icmp_echo_ignore_broadcasts=1;net.ipv4.icmp_ignore_bogus_error_responses=1 |
| 生效方式 | sysctl.d 片段 + sysctl --system |
典型使用场景
- 边界主机加固:避免成为反射放大器,同时也是出口合规要求
- 云主机基线:第三方镜像默认值不保证,需逐项核查
- 合规核查:CIS 与等保对网络参数有明确条款
- 排障后复核:测试期间临时改动需确认已恢复
- 模板固化:新镜像创建时自动应用参数
核查与加固
核查与加固
sysctl net.ipv4.icmp_echo_ignore_broadcasts net.ipv4.icmp_ignore_bogus_error_responses
cat >> /etc/sysctl.d/99-hardening.conf <<'EOF'
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.icmp_ignore_bogus_error_responses = 1
EOF
sysctl --system
ping -c 1 127.0.0.1 # 单播 ping 仍应正常,验证未影响连通性
sysctl -a 2>/dev/null | grep icmp_ | head -10参数取值读法
| 参数与取值 | 含义 | 正常与异常 |
|---|---|---|
| icmp_echo_ignore_broadcasts=1 | 忽略广播地址的 Echo 请求 | 基线要求值 |
| =0 | 会响应广播请求 | 可被用作放大反射器 |
| icmp_ignore_bogus_error_responses=1 | 忽略伪造的 ICMP 错误响应 | 建议开启,减少无效处理 |
| 单播 ping 行为 | 普通 ping 不受影响 | 若不通说明是其它网络问题 |
该参数只管广播地址的 ICMP Echo,不影响子网内合法的服务发现协议:不要把它当成通用的“禁广播”开关。
落地要点
- 两个参数一起设置,避免只处理一部分放大路径
- 改动记入变更记录,保留改动前后的取值
- 老内网心跳或发现工具若依赖广播 ping,会表现为节点互不可见,改动后先观察监控再定稿
- 把参数写入 sysctl.d 片段而不是临时 sysctl -w,确保重启后仍生效
- 云环境注意安全组与主机参数是两层,参数改对了但安全组仍放行广播流量也无意义
依赖广播发现的遗留系统要单独确认:改动后立刻验证业务节点是否仍能互相发现,避免影响生产。