firewalld限制ICMP ping探测的核心是精准屏蔽echo-request(类型8),同时保留必要ICMP功能:一、基础禁Ping;二、白名单放行可信源;三、进阶封禁traceroute及时间戳探测;四、推荐使用icmp-block实现静默DROP。

在 Linux 系统中,用 firewalld 限制 ICMP ping 探测,核心是精准拦截 echo-request(类型 8)报文,同时避免误伤网络诊断必需的 ICMP 功能。不建议直接禁全部 ICMP,而应分层控制:先让服务器“不可见”,再收窄探测路径。
一、基础禁 Ping:屏蔽外部 echo-request
这是最常用且见效快的方式,适用于绝大多数公网服务器:
- 执行命令永久屏蔽:firewall-cmd --add-icmp-block=echo-request --permanent
- 立即生效:firewall-cmd --reload
- 验证是否生效:firewall-cmd --list-icmp-blocks 应显示 echo-request
此时外部 ping 将超时(Request timed out),不会返回任何响应,扫描器无法确认主机在线状态。
二、白名单放行:仅允许可信来源 ping
若内网运维需保留 ping 能力,可结合 rich rule 实现源地址控制:
- 放行指定网段(如 10.0.0.0/8):firewall-cmd --add-rich-rule='rule family="ipv4" source address="10.0.0.0/8" icmp-type="echo-request" accept' --permanent
- 再全局屏蔽其他所有 echo-request:firewall-cmd --add-icmp-block=echo-request --permanent
- 重载规则:firewall-cmd --reload
注意:rich rule 必须在 icmp-block 前添加,否则会被后者覆盖;顺序由添加时间决定,必要时可用 --direct 或调整区域默认行为确保优先级。
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
三、进阶防护:阻断 traceroute 与时间戳探测
攻击者常通过 traceroute 和 ICMP 时间戳进一步测绘网络结构,这些报文业务中基本不用,建议一并屏蔽:
- 封禁 traceroute 关键类型:firewall-cmd --add-icmp-block=time-exceeded --permanent、firewall-cmd --add-icmp-block=port-unreachable --permanent
- 禁用时间戳请求/回复:firewall-cmd --add-icmp-block=timestamp-request --permanent、firewall-cmd --add-icmp-block=timestamp-reply --permanent
- 全部配置后重载:firewall-cmd --reload,再用 --list-icmp-blocks 确认已生效
这样既不影响 destination-unreachable(Type 3)等关键错误反馈,又切断了常见探测链路。
四、关键提醒:DROP 比 REJECT 更静默
firewalld 默认使用 REJECT 行为,会向客户端返回“ICMP port unreachable”等提示,反而暴露防火墙存在。要实现真正“零响应”,推荐:
- 将区域目标设为 DROP:firewall-cmd --set-target=DROP --permanent(慎用,影响所有未显式允许的流量)
- 或更稳妥地:保持 default target 不变,仅对 ICMP 使用 --add-icmp-block —— firewalld 的 icmp-block 机制底层即为 DROP,不发任何回包
相比 sysctl 内核级禁 ping,firewalld 方案更灵活、可逆、支持策略分层,也便于审计和批量管理。

















