封鎖來自特定 IP 位址的 ping

封鎖來自特定 IP 位址的 ping

我的伺服器是 Ubuntu 12.04:->IP 192.168.56.100我有一個客戶端 Ubuntu 13.04:->IP 192.168.56.101

我必須阻止從客戶端到伺服器的 ping,所以我編寫了 IPTABLE 規則。

iptables -A INPUT -i eth0 -p ICMP -s 192.168.56.101 -j DROP

現在客戶端無法 ping 到伺服器,這部分正常,但伺服器無法 ping 到客戶端,這是不應該發生的。在新增此規則之前,伺服器和用戶端都可以互相 ping 通。

請告訴我我在這裡缺少什麼...

給出的答案是正確的,但它是如何工作的......?新增--icmp-typeecho-equest 確實解決了問題,但該規則已新增至 INPUT 鏈規則中,因此該規則怎麼會擾亂 OUTPUT 鏈,因為它阻止了對用戶端的 ping。

答案1

據我了解,ping命令向主機發送 ICMP 回顯請求,然後主機回覆 ICMP 回顯回應。因此,如果您封鎖所有 ICMP,則 ping 根本不起作用。

你應該添加這個:

iptables -A INPUT -i eth0 -p icmp --icmp-type echo-request -s 192.168.56.101 -j DROP

這只會阻止請求,但不會阻止回复

在評論裡回答你的問題

它不會阻止傳出 ping 請求。它會阻止所有傳入的 ICMP 封包。

當你執行ping

  1. ping發送 ICMP 請求封包至192.168.56.101(它是外發 ICMP)

  2. 192.168.56.101接收此資料包並發送回覆 ICMP 封包返回您的伺服器

  3. 現在你的伺服器 iptables 會阻止這個傳入的回覆封包。這就是正在發生的事情。

sudo tcpdump ip proto \\icmp您可以在 上使用此命令進行檢查192.168.56.101。它將向您顯示所有線上 ICMP 請求/回覆。

做這個:

  1. 從伺服器中刪除此規則:

    iptables -A INPUT -i eth0 -p icmp --icmp-type echo-request -s 192.168.56.101 -j DROP

  2. 將此規則新增至您的伺服器:

    iptables -A INPUT -i eth0 -p ICMP -s 192.168.56.101 -j DROP

  3. 現在執行此命令192.168.56.101

    sudo tcpdump ip proto \\icmp

  4. ping 192.168.56.101在伺服器上執行。

現在您應該看到192.168.56.101它收到 ping 請求並發送回應。但伺服器上的 iptables 阻止了此回應。

答案2

顯然你不會得到任何回應。 ping 請求由兩部分組成:

  • 客戶端 -> 伺服器:ICMP 回顯請求(又稱「ping」)
  • 伺服器 -> 客戶端:ICMP 回顯回應(又稱「pong」)

阻止所有類型的 ICMP 將帶來麻煩。如果您想封鎖客戶端「ping」(發送 PING 請求),請在伺服器

-A INPUT -i eth0 -s 192.168.56.101/32 -p ICMP --icmp-type echo-request -j DROP

若要先封鎖用戶端發送 ICMP ping 請求,您可以將此規則套用到客戶

-A OUTPUT -o eth0 -d 192.168.56.100/32 -p ICMP --icmp-type echo-request -j DROP

不過,從客戶端避免封鎖客戶端 ping 單一 IP 位址是非常不尋常的。您這樣做的唯一原因是您的任務要求ICMP ping 封包從客戶端流經網絡,定向到伺服器。

我想知道為什麼你要阻止 LAN 上的 ping 請求。透過ARP,客戶端仍然可以知道這台伺服器已連接到網路。

相關內容