1. Ping 与 ICMP 协议简介

  • Ping 是网络中常用的测试工具,用于检测目标主机是否可达。

  • 它的实现基于 ICMP 协议(Internet Control Message Protocol),属于 TCP/IP 协议族。

  • 工作原理:Ping 命令会向目标主机发送 ICMP Echo Request(回显请求)报文,目标主机收到后回应一个 ICMP Echo Reply(回显应答)报文。

  • ICMP 协议本质是为网络设备间传递错误和诊断信息设计的。

2. 为什么要禁止 Ping

  • 安全原因:防止被扫描、探测,隐藏服务器是否在线,减少被攻击风险(如被 DDoS 攻击者发现可用 IP)。

  • 某些应用场景下,需要服务器对外“不可见”或低调。

3. UFW 禁止 Ping 的原理

  • UFW(Uncomplicated Firewall)是 Ubuntu 等系统的简单防火墙管理工具。

  • 默认只能直接控制 TCP/UDP 端口,对于 ICMP(Ping)需要自定义底层规则。

  • 禁止 Ping 的本质是 丢弃入站 ICMP Echo Request 数据包

4. 配置步骤

1. 编辑 UFW 的底层规则

sudo vim /etc/ufw/before.rules

2. 添加丢弃 ICMP Echo Request 规则

找到类似下方的内容(大约在前几十行):

# ok icmp codes for INPUT
-A ufw-before-input -p icmp --icmp-type echo-request -j ACCEPT

可以将其注释掉(在前面加 #),或者直接在文件较前的位置加入以下内容:

# 禁止所有 ping 请求
-A ufw-before-input -p icmp --icmp-type echo-request -j DROP

保存文件,退出编辑器

3. 重新加载 UFW 规则

sudo ufw reload

5. 验证配置效果

  • 从另一台主机或者本地尝试 ping 服务器IP,应该提示“请求超时”或无响应。

  • 可以用 tcpdumpwireshark 等抓包工具确认 ICMP Echo Request 被丢弃。

6. 恢复或取消禁止 Ping

如需恢复 Ping,只需将 -A ufw-before-input -p icmp --icmp-type echo-request -j DROP 这行删除或注释,并将原 ACCEPT 规则恢复,然后再次 sudo ufw reload

7. 小结

  • 禁止 Ping 是提升安全性的一种手段,但有些场景(如服务器健康监控)需要开放 Ping,应根据实际需求配置。

  • ICMP 协议本身对网络诊断很有用,全面禁止可能会影响排障和监控。