我的伺服器是 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-type
echo-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
:
ping
發送 ICMP 請求封包至192.168.56.101
(它是外發 ICMP)192.168.56.101
接收此資料包並發送回覆 ICMP 封包返回您的伺服器現在你的伺服器 iptables 會阻止這個傳入的回覆封包。這就是正在發生的事情。
sudo tcpdump ip proto \\icmp
您可以在 上使用此命令進行檢查192.168.56.101
。它將向您顯示所有線上 ICMP 請求/回覆。
做這個:
從伺服器中刪除此規則:
iptables -A INPUT -i eth0 -p icmp --icmp-type echo-request -s 192.168.56.101 -j DROP
將此規則新增至您的伺服器:
iptables -A INPUT -i eth0 -p ICMP -s 192.168.56.101 -j DROP
現在執行此命令
192.168.56.101
:sudo tcpdump ip proto \\icmp
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,客戶端仍然可以知道這台伺服器已連接到網路。