一、DHCP工作原理概述
在学习DHCP Snooping之前,我们需要先回顾一下DHCP的工作原理。下面从两个场景分析DHCP工作原理
1.DHCP无中继场景
DHCP无中继场景
(1) 发现阶段
DHCP客户端通过广播DHCP Discover报文来向局域网内的DHCP服务器请求服务。
(2) 提供阶段
DHCP服务器根据自身配置的IP地址池、相应的子网掩码和网关等信息,通过DHCP Offer报文应答客户端。
(3) 请求阶段
若接受DHCP Offer报文中的配置,DHCP客户端则广播DHCP Request报文以通告DHCP服务器和局域网内其他主机其生效的IP地址。
() 确认阶段
DHCP客户端收到DHCP ACK报文,会广播发送免费ARP报文,探测本网段是否有其他终端使用服务器分配的IP地址。
2.DHCP有中继场景
DHCP有中继场景
(1) 发现阶段
DHCP中继接收到DHCP客户端广播发送的DHCP DISCOVER报文后,进行如下处理:
- 第1步:检查DHCP报文中的hops字段,如果大于16,则丢弃DHCP报文;否则,将hops字段加1(表明经过一次DHCP中继),并继续第2步的操作。
- 第2步:检查DHCP报文中的giaddr字段。如果是0,将giaddr字段设置为接收DHCP DISCOVER报文的接口IP地址。如果不是0,则不修改该字段,继续第3步的操作。
- 第3步:将DHCP报文的目的IP地址改为DHCP服务器或下一跳中继的IP地址,源地址改为中继连接客户端的接口地址,通过路由转发将DHCP报文单播发送到DHCP服务器或下一跳中继。
(2) 提供阶段
DHCP服务器接收到DHCP DISCOVER报文后,选择与报文中giaddr字段为同一网段的地址池,并为客户端分配IP地址等参数,然后向giaddr字段标识的DHCP中继单播发送DHCP OFFER报文。
DHCP中继收到DHCP OFFER报文后,会进行如下处理:
- 第1步:检查报文中的giaddr字段,如果不是接口的地址,则丢弃该报文;否则,继续下面的操作。
- 第2步:DHCP中继检查报文的广播标志位。如果广播标志位为1,则将DHCP OFFER报文广播发送给DHCP客户端;否则将DHCP OFFER报文单播发送给DHCP客户端。
(3) 请求阶段
中继接收到来自客户端的DHCP REQUEST报文的处理过程同"发现阶段"。
(4) 确认阶段
中继接收到来自服务器的DHCP ACK报文的处理过程同"提供阶段"。
二、DHCP Snooping概述
为了保证网络通信业务的安全性,引入了DHCP Snooping技术,在DHCP Client和DHCP Server之间建立一道防火墙,以抵御网络中针对DHCP的各种攻击。
DHCP Snooping是DHCP的一种安全特性,用于保证DHCP客户端从合法的DHCP服务器获取IP地址。DHCP 服务器记录DHCP客户端IP地址与MAC地址等参数的对应关系,防止网络上针对DHCP攻击。
目前DHCP协议在应用的过程中遇到很多安全方面的问题,网络中存在一些针对DHCP的攻击,如DHCP Server仿冒者攻击、DHCP Server的拒绝服务攻击、仿冒DHCP报文攻击等。
DHCP Snooping主要是通过DHCP Snooping信任功能和DHCP Snooping绑定表实现DHCP网络安全。
DHCP Snooping信任功能
DHCP Snooping的信任功能,能够保证客户端从合法的服务器获取IP(Internet Protocol)地址。
如下图所示,网络中如果存在私自架设的DHCP Server仿冒者,则可能导致DHCP客户端获取错误的IP地址和网络配置参数,无法正常通信。DHCP Snooping信任功能可以控制DHCP服务器应答报文的来源,以防止网络中可能存在的DHCP Server仿冒者为DHCP客户端分配IP地址及其他配置信息。
DHCP Snooping信任功能示意图
DHCP Snooping信任功能将接口分为信任接口和非信任接口:
- 信任接口正常接收DHCP服务器响应的DHCP ACK、DHCP NAK和DHCP Offer报文。
- 非信任接口收到的DHCP Server发送的DHCP OFFER、DHCP ACK、DHCP NAK报文会被直接丢弃。
- 配置dhcp snooping enable命令的接口,收到DHCP请求报文后,转发给所有的信任接口;收到DHCP响应报文后丢弃。
- 配置dhcp snooping trusted命令的接口,收到DHCP请求报文后,转发给所有的信任接口,如果没有其他信任接口,则丢弃该DHCP请求报文;收到DHCP响应报文后,只转发给连接对应客户端的并且配置命令dhcp snooping enable的接口,如果查不到上述接口,则丢弃该DHCP响应报文。
三、DHCP Snooping绑定表
DHCP Snooping绑定表功能示意图
二层接入设备使能了DHCP Snooping功能后,从收到DHCP ACK报文中提取关键信息(包括PC的MAC地址以及获取到的IP地址、地址租期),并获取与PC连接的使能了DHCP Snooping功能的接口信息(包括接口编号及该接口所属的VLAN),根据这些信息生成DHCP Snooping绑定表。
由于DHCP Snooping绑定表记录了DHCP客户端IP地址与MAC地址等参数的对应关系,故通过对报文与DHCP Snooping绑定表进行匹配检查,能够有效防范非法用户的攻击。
DHCP Snooping绑定表根据DHCP租期进行老化或根据用户释放IP地址时发出的DHCP Release报文自动删除对应表项。
四、DHCP Snooping 的作用
DHCP Snooping功能用于防止:
- DHCP Server仿冒者攻击
- 中间人攻击与IP/MAC Spooping攻击
- 改变CHADDR值的DoS攻击
根据不同的攻击类型,DHCP Snooping提供不同的工作模式,如下表:
1.DHCP Server仿冒者攻击
(1) 攻击原理:
由于DHCP请求报文以广播形式发送,所以DHCP Server仿冒者可以侦听到此报文。DHCP Server仿冒者回应给DHCP Client仿冒信息,如错误的网关地址、错误的DNS服务器、错误的IP等,达到DoS(Deny of Service)的目的。
(2) 解决方法:
- 为防止DHCP Server仿冒者攻击,可使用DHCP Snooping的“信任(Trusted)/不信任(Untrusted)”工作模式。
- 把某个物理接口或者VLAN的接口设置为“信任(Trusted)”或者“不信任(Untrusted)”。
- 凡是从“不信任(Untrusted)”接口上收到的DHCP Reply(Offer、ACK、NAK)报文直接丢弃,这样可以隔离DHCP Server仿冒者攻击。
2.改变CHADDR值的DoS攻击
(1) 攻击原理:
攻击者持续大量地向DHCP Server申请IP地址,直到耗尽DHCP Server地址池中的IP地址,导致DHCP Server不能给正常的用户进行分配。
(2) 解决方法:
为了避免受到攻击者改变CHADDR值的攻击,可以在设备上配置DHCP Snooping功能,检查DHCP Request报文中CHADDR字段。如果该字段跟数据帧头部的源MAC相匹配,转发报文;否则,丢弃报文。从而保证合法用户可以正常使用网络服务。
3.DHCP中间人攻击
(1) 攻击原理:
攻击者利用ARP机制,让Client学习到DHCP Server IP与Attacker MAC的映射关系,又让Server学习到Client IP与Attacker Mac的映射关系。如此一来,Client与Server之间交互的IP报文都会经过攻击者中转。从本质上讲,中间人攻击是一种Spoofing IP/MAC攻击,中间人利用了虚假的IP地址与MAC地址之间的映射关系来同时欺骗DHCP的客户端和服务器。
(2) 解决方法:
为防御中间人攻击与IP/MAC Spoofing攻击,可使用DHCP Snooping的绑定表工作模式,当接口接收到ARP或者IP报文,使用ARP或者IP报文中的“源IP+源MAC”匹配DHCP Snooping绑定表。如果匹配就进行转发,如果不匹配就丢弃。
五、DHCP Snooping配置命令介绍
(1) 全局使能DHCP Snooping功能:
[Huawei] dhcp snooping enable [ ipv4 | ipv6 ]
(2) VLAN视图下使能DHCP Snooping功能:
[Huawei-vlan2] dhcp snooping enable
在VLAN视图下执行此命令,则对设备所有接口接收到的属于该VLAN的DHCP报文命令功能生效。
(3) VLAN视图下配置接口为“信任”状态\
[Huawei-vlan2] dhcp snooping trusted interface interface-type interface-number
在VLAN视图下执行此命令,则命令功能仅对加入该VLAN的接口收到的属于此VLAN的DHCP报文生效。
(4) 接口视图下使能DHCP Snooping功能
[Huawei-GigabitEthernet0/0/1] dhcp snooping enable
(5) 接口视图下配置接口为“信任”状态
[Huawei-GigabitEthernet0/0/1] dhcp snooping trusted
缺省情况下,设备接口为非信任状态。
(6)(可选)配置丢弃GIADDR字段非零的DHCP报文
[Huawei] dhcp snooping check dhcp-giaddr enable vlan { vlan-id1 [ to vlan-id2 ] }
使能检测DHCP Request报文中GIADDR字段是否非零的功能。此命令同时可以在VLAN视图或接口视图下进行配置。在VLAN视图下执行此命令,则对设备所有接口接收到的属于该VLAN的DHCP报文命令功能生效;在接口下执行该命令,则对该接口下的所有DHCP报文命令功能生效。
六、DHCP Snooping配置举例
如图所示,DHCP和VLAN基础配置已完成,在Switch配置DHCP Snooping功能。
(1) 配置方式一:接口视图
[Switch] dhcp snooping enable ipv4
[Switch] interface GigabitEthernet 0/0/1
[Switch-GigabitEthernet0/0/1] dhcp snooping enable
[Switch] interface GigabitEthernet 0/0/2
[Switch-GigabitEthernet0/0/2] dhcp snooping enable
[Switch] interface GigabitEthernet 0/0/3
[Switch-GigabitEthernet0/0/3] dhcp snooping enable
[Switch-GigabitEthernet0/0/3] dhcp snooping trusted
(2) 配置方式二:VLAN视图
[Switch] dhcp snooping enable ipv4
[Switch] vlan 2
[Switch-vlan2] dhcp snooping enable
[Switch] interface GigabitEthernet 0/0/3
[Switch-GigabitEthernet0/0/3] dhcp snooping trusted
配置验证执行命令display dhcp snooping interface,查看接口下的DHCP Snooping运行信息。
[Switch]display dhcp snooping interface GigabitEthernet 0/0/3
DHCP snooping running information for interface GigabitEthernet0/0/3 :
DHCP snooping : Enable
Trusted interface : Yes
Dhcp user max number : 1024 (default)
Current dhcp user number : 0
Check dhcp-giaddr : Disable (default)
Check dhcp-chaddr : Disable (default)
Alarm dhcp-chaddr : Disable (default)
Check dhcp-request : Disable (default)
Alarm dhcp-request : Disable (default)
----- more ------