DHCP Snooping

DHCP:动态主机配置协议,通过使用DHCP可以为网络中的客户端分配IP、子网掩码、网关、域名等信息,简化网络中主机的配置以及地址冲突带来的风险。

DHCP在提供方便的同时,也带来了一些风险,主要有:

1.一个网络中可以存在有多台DHCP服务器,客户端不知道所获取的地址是来自合法的DHCP服务器还是非法的DHCP服务器。

2.客户端并不使用DHCP获取地址,而是手动的指定地址,提高了IP地址冲突的风险。

3.DHCP服务器的DOS攻击通常DHCP服务器通过检查客户端发送的DHCP请求报文中的CHADDR(也就是客户端的MAC地址)字段来判断客户端的MAC地址。正常情况下该CHADDR字段和发送请求报文的客户端真实的MAC地址是相同的。攻击者可以利用伪造MAC的方式发送DHCP请求,但这种攻击可以使用Cisco交换机的端口安全特性来防止。端口安全特性(Port Security)可以限制每个端口只使用唯一的MAC地址。但是如果攻击者不修改DHCP请求报文的源MAC地址,而是修改DHCP报文中的CHADDR字段来实施攻击,那端口安全就不起作用了。由于DHCP服务器认为不同的CHADDR值表示请求来自不同的客户端,所以攻击者可以通过大量发送伪造CHADDR的DHCP请求,导致DHCP服务器上的地址池被耗尽,从而无法为其他正常用户提供网络地址,这是一种DHCP耗竭攻击。DHCP耗竭攻击可以是纯粹的DOS攻击,也可以与伪造的DHCP服务器配合使用。当正常的DHCP服务器瘫痪时,攻击者就可以建立伪造的DHCP服务器来为局域网中的客户端提供地址,使它们将信息转发给准备截取的恶意计算机。甚至即使DHCP请求报文的源MAC地址和CHADDR字段都是正确的,但由于DHCP请求报文是广播报文,如果大量发送的话也会耗尽网络带宽,形成另一种拒绝服务攻击。


DHCP消息类型:

dhcp discovery、dhcp offer、dhcp request、dhcp ack、dhcp nak、dhcp release、dhcp decline


dhcp snooping:

dhcp snooping是DHCP的一种安全特性。dhcp snooping将交换机的端口分为两类:

信任端口:连接合法的DHCP 服务器的端口或者是连接汇聚交换机的上行端口。

非信任端口:通常为连接终端设备的端口,如pc、网络打印机等


通过使用DHCP snooping特性,交换机限制非信任端口只能发送DHCP 请求报文(相对于DHCP报文来说的,其他的报文还是允许通过的),丢弃来自非信任端口的其他dhcp报文,如dhcp offer而且,并非所有来自用户端口(非信任端口)的DHCP请求都被允许通过,交换机还会比较DHCP 请求报文的(报文头里的)源MAC地址和(报文内容里的)DHCP客户机的硬件地址(即CHADDR字段),只有这两者相同的请求报文才会被转发,否则将被丢弃。这样就防止了DHCP耗竭攻击。信任端口可以接收所有的DHCP报文通常只将交换机连接到合法DHCP服务器的端口设置为信任端口,其他端口设置为非信任端口,就可以防止用户伪造DHCP服务器来攻击网络。DHCP监听特性还可以对端口的DHCP报文进行限速。通过在每个非信任端口下进行限速,将可以阻止合法DHCP请求报文的广播攻击。DHCP监听还有一个非常重要的作用就是建立一张DHCP监听绑定表(DHCP snooping Binding)。一旦一个连接在非信任端口的客户端获得一个合法的DHCP Offer,交换机就会自动在DHCP监听绑定表里添加一个绑定条目,内容包括了该非信任端口的客户端IP地址、MAC地址、端口号、VLAN编号、租期等信息。


DHCP Snooping不仅可以防范dhcp 攻击,还为ip source guard和动态arp检测提供了动态数据库支持。


注:

1. 当交换机收到一个DHCP DECLINE或DHCP RELEASE广播报文,并且报文头的源MAC地址存在于DHCP监听绑定表的一个条目中。但是报文的实际接收端口与绑定表条目中的端口字段不一致时,该报文将被丢弃

2. DHCP监听绑定表中的条目可以手工添加

3. DHCP监听绑定表在设备重启后会丢失,需要重新绑定,但可以通过设置将绑定表保存在flash或者FTP/TFTP服务器上,待设备重启后直接读取,而不需要客户端再次进行绑定

4. 客户端获取地址必须通过交换机。


DHCP Snooping的配置:

SW1(config)#ip dhcp snooping            //打开 dhcp snooping功能
SW1(config)#ip dhcp snooping vlan 10                //设置dhcp snooping功能将作用于哪些VLAN
SW1(config)#ip dhcp snooping verify mac-address                  //检测非信任端口收到的DHCP请求报文的源MAC和CHADDR字段是否相同,以防止DHCP耗竭攻击,该功能默认即为开启

SW1(config-if)#ip dhcp snooping trust   //配置接口为DHCP监听特性的信任接口,所有接口默认为非信任接口

SW1(config-if)#ip dhcp snooping limit rate 15                //限制非信任端口的DHCP报文速率为每秒15个包(默认即为每秒15个包)如果不配该语句,则show ip dhcp snooping的结果里将不列出没有该语句的端口,可选速率范围为1-2048

建议:在配置了端口的DHCP报文限速之后,最好配置以下两条命令
SW1(config)#errdisable recovery cause dhcp-rate-limit             //使由于DHCP报文限速原因而被禁用的端口能自动从err-disable状态恢复
SW1(config)#errdisable recovery interval 30                 //设置恢复时间;端口被置为err-disable状态后,经过30秒时间才能恢复

SW1(config)#ip dhcp snooping information option              //设置交换机是否为非信任端口收到的DHCP报文插入Option 82,默认即为开启状态
SW1(config)#ip dhcp snooping information option allow-untrusted              //设置汇聚交换机将接收从非信任端口收到的接入交换机发来的带有选项82的DHCP报文
SW1#ip  dhcp snooping binding 000f.1fc5.1008 vlan 10 192.168.10.131 interface fa0/2 expiry 692000       //特权模式命令;手工添加一条 DHCP监听绑定条目;expiry为时间值,即为监听绑定表中的lease(租期)

SW1(config)#ip dhcp snooping database flash:dhcp_snooping.db            //将DHCP监听绑定表保存在flash中,文件名为dhcp_snooping.db
SW1(config)#ip dhcp snooping database tftp://192.168.2.5/Switch/dhcp_snooping.db                //将DHCP监听绑定表保存到tftp服务器;192.168.2.5为tftp服务器地址,必须事先确定可达。URL中的Switch是tftp服务器下一个文件夹;保存后的文件名为dhcp_snooping.db,当更改保存位置后会立即执行“写”操作。
SW1(config)#ip dhcp snooping database write-delay 30                 //指DHCP监听绑定表发生更新后,等待30秒,再写入文件,默认为300秒;可选范围为15-86400秒
SW1(config)#ip dhcp snooping database timeout 60                  //指DHCP监听绑定表尝试写入操作失败后,重新尝试写入操作,直到60秒后停止尝试。默认为300秒;可选范围为0-86400秒
说明:实际上当DHCP
监听绑定表发生改变时会先等待write-delay的时间,然后执行写入操作,如果写入操作失败(比如tftp服务器不可达),接着就等待timeout的时间,在此时间段内不断重试。在timeout时间过后,停止写入尝试。但由于监听绑定表已经发生了改变,因此重新开始等待write-delay时间执行写入操作……不断循环,直到写入操作成功。
SW1#renew ip dhcp snooping database flash:dhcp_snooping.db                  //特权级命令;立即从保存好的数据库文件中读取DHCP
监听绑定表。

查看DHCP Snooping Binding:

SW1#sh ip dhcp snooping binding

MacAddress          IpAddress        Lease(sec)  Type           VLAN  Interface

------------------  ---------------  ----------  -------------  ----  --------------------

AA:BB:CC:00:03:00   172.16.1.103     2591963     dhcp-snooping   10    Ethernet0/1

AA:BB:CC:00:04:00   172.16.1.104     2591997     dhcp-snooping   10    Ethernet0/2

Total number of bindings: 2


SW1#


注意:路由器连接到交换机的端口需要配置ip  dhcp relay information trusted,否则客户端将无法得到IP地址

这是因为交换机配置了(默认情况)ip dhcp snooping information option,此时交换机会在客户端发出的DHCP请求报文中插入options 82信息。另一方面由于DHCP服务器(这里指Cisco IOS DHCP服务器)与客户端处于同一个VLAN中,所以请求实际上并没有经过DHCP中继代理。

对于Cisco IOS DHCP服务器来说,如果它收到的DHCP请求被插入了选项82信息,那么它会认为这是一个从DHCP中继代理过来的请求报文,但是它检查了该报文的giaddr字段却发现是0.0.0.0,而不是一个有效的IP地址(DHCP请求报文中的giaddr字段是该报文经过的第一个DHCP中继代理的IP地址,具体请参考DHCP报文格式),因此该报文被认为“非法”,所以将被丢弃。可以参考路由器上的DHCP的debug过程。

Cisco IOS里有一个命令,专门用来处理这类DHCP请求报文ip dhcp relay information trusted(接口命令)或者ip dhcp relay information trust-all(全局命令,对所有路由器接口都有效);这两条命令的作用就是允许被插入了选项82信息,但其giaddr字段为0.0.0.0的DHCP请求报文通过。

II、如果交换机不插入选项82信息,即配置了no ip dhcp snooping information option,那么就不会出现客户端无法得到IP地址的情况,路由器也不需要配置ip dhcp relay information trusted命令。

III、Windows DHCP服务器应该没有检查这类DHCP请求的机制,所以上一个实例中不论交换机是否插入选项82信息,客户端总是可以得到IP地址。


你可能感兴趣的:(DHCP,Snooping)