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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章