arp 理解

        <p>不瞭解ARP的同學,看下面來自[url]http://www.oxid.it/[/url]的演示:</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="492" height="492" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://www.bsdmap.com/wp-content/uploads/2008/09/apr-intro.swf" /><embed type="application/x-shockwave-flash" width="492" height="492" src="http://www.bsdmap.com/wp-content/uploads/2008/09/apr-intro.swf"></embed></object></p>
<p><a href="http://www.bsdmap.com/wp-content/uploads/2008/09/apr-intro.swf">全屏顯示</a></p>
簡單點兒說:之所以有ARP***是因爲ARP協議本身設計的缺陷。網絡設備在動態更新系統的ARP表時,會被惡意欺騙。ARP協議是在2層設備(數據鏈路層:交換機)之間傳遞的協議,ARP包可以在整個“衝突域”中傳遞。而一般而言,一個衝突域就是一個子網。VLAN就是設計用來隔離“衝突域”的,所以VLAN可以隔離ARP***。簡單點說,就是不要和***者在一個子網。可惜不是所有的IDC都提供單獨的子網(VLAN)給用戶,因爲劃分子網會浪費IP地址。
解決ARP***,有幾種方法:
第一:使用獨立的VLAN(子網)。VLAN(子網)實際上劃分了一個ARP安全域,在這個VLAN裏的機器之間邏輯上是互相信任的,VLAN將其他不不信任、不安全的設備隔離在ARP協議發揮作用的區域之外,這樣便可以不用擔心“鄰居”中毒而受到連累。這是最保險的做法。但是,假如自家VLAN(網段)裏有機器中毒進行***,則網絡仍然會亂作一團。
第二:網關與服務器雙雙使用靜態ARP記錄。之前寫過一篇《防止ARP中間人***的一個技巧》提到過。簡單的點兒說就是在網關(路由器)上設定服務器網卡的MAC,在服務器上設定網關的MAC爲靜態。這樣,路由器和服務器就不會再更新對應的ARP記錄,就不會被欺騙。這個方法可以隔離每一臺設備,而不用劃VLAN(划子網浪費IP),比較適合單設備託管的用戶。然而,絕大多數ISP都不會爲用戶做MAC綁定。而對於設備比多的用戶,網關綁定MAC後,每次設備換IP都需要ISP重新設定MAC綁定,比較麻煩;而使用了某些用到ARP機制的應用,在綁定的環境下,則可能會運行不起來,比如HA集羣中的failover切換。
第三,被動偵測,以毒攻毒。之前寫過一篇關於send_arp的blog,其中無意間提到過這個方法。就是使用send_arp程序,糾正錯誤的ARP記錄。之所以說是以毒攻毒,是因爲send_arp程序本身就是一個利用ARP協議缺陷的程序。
另外,需要說明的是。有些ISP以端口保護爲技術手段,認爲可以阻止ARP***,實際上,這種技術是不能完全阻止ARP***的。
端口保護(有的稱爲PVLAN,不知道是不是相同的技術)之後,交換機上的端口下連接的設備只能和網關通信,不可以和“鄰居”通信。這樣可以起到一定的保護作用。但是,你的“鄰居”,仍然是可以訪問你的網關的(你們是同一個網關)。它只要欺騙網關,告訴網關你的MAC地址爲一個錯誤的地址,或者乾脆改成自己的MAC,那麼,你的服務器就會斷網,因爲網關發給你的服務器的包,發到了錯誤的MAC地址上。
解決辦法,就以毒攻毒。使用send_arp,強制讓網關更新關於你的ARP(MAC)記錄:send_arp  你的IP地址   你綁定該IP網絡接口的MAC   你網關的IP   你網關的MAC
這個命令十分有用。管理員可能都會有這麼一種經歷,將一個IP地址調整到另一臺服務器上的時候,會有一段時間這個IP是不通的。這個時候,這個工具又可以發揮作用了:使用相同的命令格式。
需要說明的是,send_arp命令是不需要必須在本地運行的,在網一網段(VLAN)內的任意主機上執行即可。
解決問題的基本思想是在同網段的機器上,執行兩個send_arp,一個是發給網關的,一個是發給被***的主機的。
實際上,可以寫一個角本,放在本地,使用crontab每兩分鐘運行一次,假如被ARP***,則自行通知網關更新相應的ARP記錄。
首先將網關MAC綁定成靜態:將下面的命令添加到/etc/rc.local
arp -s  網關IP  網關MAC
cat /opt/cron/moniter_gw.sh
#!/bin/bash
# gw_ip=網關地址
# gw_hw=網關MAC
gw_ip=192.168.0.1
local_ip=192.168.0.45
local_hw= 00:14:78:07:23:00
if ping -c1 -w5 ${gw_ip} ; do
:
else
/usr/local/bin/send_arp   ${local_ip} ${local_hw}   ${gw_ip}   ${gw_hw}
done
crontab :
*/2  *  *  *  *     /bin/bash  /opt/cron/moniter_gw.sh
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章