最推荐的做法是在防火墙默认策略为“阻止所有入站”的基础上,单独添加一条允许 ICMPv4 回显请求(Echo Request)的入站规则,这样既能保留网络诊断能力,又不会开放任何业务端口。
先说结论:通过配置防火墙白名单机制,仅放行 ICMP 协议类型 8 的入站流量,其余所有 TCP/UDP 端口保持默认阻止状态。
- 适合:需要远程排查网络连通性但不希望暴露业务端口的服务器或办公电脑。
- 优先做:确认防火墙默认策略为“阻止”,再添加 ICMP 允许规则,避免规则顺序错误导致失效。
- 再验证:从外网 Ping 测试应通,但 Telnet 测试业务端口应不通。
命令速用版
如果你需要快速生效,可以参考以下命令。Linux 使用 iptables 或 firewalld,Windows 使用 netsh。
Linux (iptables)
iptables -A INPUT -p icmp `--icmp-type` 8 -j ACCEPT
iptables -A INPUT -p icmp `--icmp-type` 0 -j ACCEPT
iptables-save > /etc/iptables/rules.v4
Linux (IPv6)
ip6tables -A INPUT -p icmpv6 `--icmpv6-type` 128 -j ACCEPT
ip6tables-save > /etc/ip6tables/rules.v6
Linux (firewalld/CentOS 7+)
firewall-cmd `--remove-icmp-block`=echo-request `--permanent`
firewall-cmd `--reload`
Windows (命令行)
netsh advfirewall firewall add rule name="Allow Ping" dir=in action=allow protocol=icmpv4:8,any
为什么会这样
Ping 命令依赖的是 ICMP 协议,而不是常见的 TCP 或 UDP 端口。防火墙默认为了安全,通常会阻止所有未经明确允许的入站连接。如果完全关闭 ICMP,网络故障时无法通过 Ping 判断是网络断了还是服务挂了;但如果开放了所有端口,又会带来安全风险。因此,单独放行 ICMP 回显请求(类型 8)是一种平衡安全与运维便利的常见做法。
分步处理
1. Windows 系统配置
打开“高级安全 Windows Defender 防火墙”(运行 wf.msc),选择“入站规则”->“新建规则”。规则类型选“自定义”,程序选“所有程序”。协议类型选择