Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Linux 禁 Ping 設定:sysctl 臨時/永久生效、防火牆替代方案與 ICMP 協議細節

編輯:Linux 教學

禁用 ICMP Echo Request (Ping) 是基礎主機加固動作,可減少偵察面、緩解洪水攻擊。Linux 提供內核參數、防火牆規則兩大層面實現,本文詳解生效機制、持久化陷阱、選擇性放行策略。

方案一:內核參數 net.ipv4.icmp_echo_ignore_all (推薦、全局生效)

1. 臨時生效 (重啟失效)


# 立即生效
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,無回應

2. 永久生效 (寫入配置文件)


# 追加到 /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 確保優先級最高。

3. 恢復 Ping


sysctl -w net.ipv4.icmp_echo_ignore_all=0
sed -i '/icmp_echo_ignore_all/d' /etc/sysctl.conf
sysctl -p

方案二:防火牆層面過濾 (靈活、可針對性放行)

firewalld (CentOS 7+/RHEL 7+)


# 永久禁止所有 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/nftables (通用)


# 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

ICMP 協議細節:不只 Echo Request

類型代碼用途建議策略
Echo Request8Ping 請求內網放行、外網禁止
Echo Reply0Ping 回應允許 (狀態機自動)
Destination Unreachable3路徑 MTU 發現 (PMTUD)、端口不可達必須允許,否則 TCP 連接卡死
Time Exceeded11Traceroute、TTL 超時內網允許
Parameter Problem12IP 頭部錯誤允許
Source Quench4擁塞控制 (已廢棄)忽略
Redirect5路由重定向禁止 (安全風險)

💡 內核參數方案會屏蔽所有 ICMP 類型,可能導致 PMTUD 失效 → 大包傳輸卡死。生產環境強烈建議使用防火牆精準屏蔽 echo-request,保留其他 ICMP 類型。

IPv6 禁 Ping


# 內核參數
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

驗證清單

測試項命令預期結果
本機 Pingping -c 3 localhost100% loss (內核參數) / 無回應 (防火牆)
外部 Pingping -c 3 192.168.1.100同上
Traceroutetraceroute 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,讓主機在「隱身」與「可診斷」間取得最佳平衡。

Copyright © Windows教程網 All Rights Reserved