禁用 ICMP Echo Request (Ping) 是基礎主機加固動作,可減少偵察面、緩解洪水攻擊。Linux 提供內核參數、防火牆規則兩大層面實現,本文詳解生效機制、持久化陷阱、選擇性放行策略。
net.ipv4.icmp_echo_ignore_all (推薦、全局生效)
# 立即生效
sysctl -w net.ipv4.icmp_echo_ignore_all=1
# 驗證
sysctl net.ipv4.icmp_echo_ignore_all
# net.ipv4.icmp_echo_ignore_all = 1
# 測試
ping -c 3 192.168.1.100
# 客戶端顯示 100% packet loss,無回應
# 追加到 /etc/sysctl.conf
echo "net.ipv4.icmp_echo_ignore_all = 1" >> /etc/sysctl.conf
# 立即套用
sysctl -p
# 或 sysctl --system (systemd 系統)
⚠️ 陷阱:/etc/sysctl.d/ 下若有 *.conf 覆蓋此值,以字母序最後者為準。建議建立 /etc/sysctl.d/99-disable-ping.conf 確保優先級最高。
sysctl -w net.ipv4.icmp_echo_ignore_all=0
sed -i '/icmp_echo_ignore_all/d' /etc/sysctl.conf
sysctl -p
# 永久禁止所有 ICMP Echo Request
firewall-cmd --permanent --add-icmp-block=echo-request
firewall-cmd --reload
# 允許特定管理網段 Ping (富規則)
firewall-cmd --permanent --add-rich-rule='
rule family="ipv4"
source address="10.10.10.0/24"
protocol value="icmp"
icmp-type name="echo-request"
accept
'
firewall-cmd --reload
# iptables 禁止
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
iptables-save > /etc/sysconfig/iptables
# nftables (現代)
nft add rule inet filter input icmp type echo-request drop
| 類型 | 代碼 | 用途 | 建議策略 |
|---|---|---|---|
| Echo Request | 8 | Ping 請求 | 內網放行、外網禁止 |
| Echo Reply | 0 | Ping 回應 | 允許 (狀態機自動) |
| Destination Unreachable | 3 | 路徑 MTU 發現 (PMTUD)、端口不可達 | 必須允許,否則 TCP 連接卡死 |
| Time Exceeded | 11 | Traceroute、TTL 超時 | 內網允許 |
| Parameter Problem | 12 | IP 頭部錯誤 | 允許 |
| Source Quench | 4 | 擁塞控制 (已廢棄) | 忽略 |
| Redirect | 5 | 路由重定向 | 禁止 (安全風險) |
💡 內核參數方案會屏蔽所有 ICMP 類型,可能導致 PMTUD 失效 → 大包傳輸卡死。生產環境強烈建議使用防火牆精準屏蔽 echo-request,保留其他 ICMP 類型。
# 內核參數
sysctl -w net.ipv6.icmp.echo_ignore_all=1
echo "net.ipv6.icmp.echo_ignore_all = 1" >> /etc/sysctl.d/99-disable-ping.conf
# firewalld
firewall-cmd --permanent --add-icmp-block=echo-request --zone=public
# IPv6 icmp-type 名稱同 IPv4
| 測試項 | 命令 | 預期結果 |
|---|---|---|
| 本機 Ping | ping -c 3 localhost | 100% loss (內核參數) / 無回應 (防火牆) |
| 外部 Ping | ping -c 3 192.168.1.100 | 同上 |
| Traceroute | traceroute 192.168.1.100 | 防火牆模式下顯示中間跳點、目標 * * * |
| PMTUD 測試 | ping -M do -s 1472 192.168.1.100 | 防火牆模式正常回應;內核參數模式可能失敗 |
簡單粗暴、臨時測試 →
sysctl -w net.ipv4.icmp_echo_ignore_all=1
生產長期、需保留 PMTUD →firewall-cmd --add-icmp-block=echo-request+ 富規則放行管理網段
IPv6 同理雙協議栈均配置
精準控制 ICMP,讓主機在「隱身」與「可診斷」間取得最佳平衡。