HCIP-6.0DHCP协议原理与配置
- 1、DHCP的应用场景
- 2、DHCP的基本原理
- 2.1、DHCP协议报文
- 2.2、DHCP工作原理
- 2.2.1、和DHCP服务器进行报文交互。
- 2.2.2、DHCP租期更新
- 2.2.3、DHCP重绑定
- 2.2.4、IP地址释放
- 3、配置基于接口地址池的DHCP
- 3.1、DHCP接口地址池配置
- 3.1.1、地址池
- 3.1.2、接口地址池
- 3.1.3、DHCP全局地址池配置
- 3.1.4、DHCP中继代理
- 4、DHCP面临的安全威胁
- 4.1、DHCP饿死攻击
- 4.2、仿冒DHCP Server攻击
- 4.3、DHCP中间人攻击
- 4.4、DHCP Snooping技术的出现
- 4.4.1、DHCP Snooping用于防止DHCP饿死攻击
- 4.4.2、DHCP Snooping用于防止仿冒DHCP Server攻击
- 4.4.3、DHCP Snooping用于防止DHCP中间人攻击
- 4.4.4、DHCP Snooping与IPSG技术的联动
在大型企业网络中,会有大量的主机或设备需要获取IP地址等网络参数。如果采用手工配置,工作量大且不好管理,如果有用户擅自修改网络参数,还有可能会造成IP地址冲突等问题。使用动态主机配置协议DHCP(Dynamic Host Configuration Protocol)来分配IP地址等网络参数,可以减少管理员的工作量,避免用户手工配置网络参数时造成的地址冲突。
1、DHCP的应用场景
在大型企业网络中,一般会有大量的主机等终端设备。每个终端都需要配置IP地址等网络参数才能接入网络。在小型网络中,终端数量很少,可以手动配置IP地址。但是在大中型网络中,终端数量很多,手动配置IP地址工作量大,而且配置时容易导致IP地址冲突等错误。
DHCP可以为网络终端动态分配IP地址,解决了手工配置IP地址时的各种问题。
2、DHCP的基本原理
2.1、DHCP协议报文
报文类型 | 含义 |
---|---|
DHCP DISCOVER | 客户端用来寻找DHCP服务器。 |
DHCP OFFER | DHCP服务器用来响应DHCP DISCOVER报文,此报文携带了各种配置信息。 |
DHCP REQUEST | 客户端请求配置确认,或者续借租期。 |
DHCP ACK | 服务器对REQUEST报文的确认响应。 |
DHCP NAK | 服务器对REQUEST报文的拒绝响应。 |
DHCP RELEASE | 客户端要释放地址时用来通知服务器。 |
DHCP协议主要协议报文有8种:
- DHCP Discover报文
- DHCP Offer报文
- DHCP Request报文
- DHCP Release报文
- DHCP ACK/NAK报文
- DHCP Decline报文
- DHCP Inform报文
- DHCP Nak报文
DHCP服务器与DHCP客户端之间通过DHCP报文进行通信。DHCP报文是基于UDP协议传输的。DHCP客户端向DHCP服务器发送
报文时采用68端口号
,DHCP服务器向DHCP客户端发送报文时采用67端口号
。
DHCP的报文格式:
Hops:表示当前的DHCP报文经过的DHCP中继的数目
。该字段由客户端或服务器设置为0,每经过一个DHCP中继时,该字段加1。此字段的作用是限制DHCP报文所经过的DHCP中继数目。服务器和客户端之间的DHCP中继数目不能超过16个,也就是Hops值不能大于16,否则DHCP报文将被丢弃。
flags:0:客户端请求服务器以单播形式
发送响应报文
1:客户端请求服务器以广播形式
发送响应报文
Giaddr: 表示第一个DHCP中继的IP地址
。若在到达DHCP服务器前经过了多个DHCP中继,该字段作为客户端所在的网段的标记,填充了第一个DHCP中继的IP地址后不会再变更。
Options字段的格式:
中继代理信息选项(Option82)
Option 141表示为DHCP客户端分配的FTP/SFTP用户名。
Option 142表示为DHCP客户端分配的FTP/SFTP用户密码。
2.2、DHCP工作原理
2.2.1、和DHCP服务器进行报文交互。
为了获取IP地址等配置信息,DHCP客户端需要和DHCP服务器进行报文交互。
1、 首先,DHCP客户端发送DHCP发现报文来发现DHCP服务器。为了学习到DHCP服务器的IP地址,DHCP客户端以广播方式发送DHCP DISCOVER报文(目的IP地址为255.255.255.255)给同一网段内的所有设备(包括DHCP服务器或中继)。
DHCP DISCOVER报文中携带了客户端的MAC地址(chaddr字段)、需要请求的参数列表选项(Option55)、广播标志位(flags字段)等信息。
2、DHCP服务器会选取一个未分配的IP地址,向DHCP客户端发送DHCP提供报文DHCP OFFER。此报文中包含分配给客户端的IP地址和其他配置信息。如果存在多个DHCP服务器,每个DHCP服务器都会响应。
3、如果有多个DHCP服务器向DHCP客户端发送DHCP提供报文,DHCP客户端将会选择收到的第一个DHCP提供报文,然后发送DHCP请求报文,报文中包含请求的IP地址。
4、收到DHCP请求报文后,提供该IP地址的DHCP服务器会向DHCP客户端发送一个DHCP确认报文,包含提供的IP地址和其他配置信息。
5、DHCP客户端收到DHCP确认报文后,会发送免费ARP报文,检查网络中是否有其他主机使用分配的IP地址。如果指定时间内没有收到ARP应答,DHCP客户端会使用这个IP地址。如果有主机使用该IP地址,DHCP客户端会向DHCP服务器发送DHCP拒绝报文,通知服务器该IP地址已被占用。然后DHCP客户端会向服务器重新申请一个IP地址。
DHCP的租约过程,有租期的。windows的租期是8天,不同设备租期不一样。
2.2.2、DHCP租期更新
IP租约期限到达50%时,DHCP客户端会请求更新IP地址租约。
申请到IP地址后,DHCP客户端中会保存三个定时器
,分别用来控制租期更新,租期重绑定和租期失效。DHCP服务器为DHCP客户端分配IP地址时会指定三个定时器的值。如果DHCP服务器没有指定定时器的值,DHCP客户端会使用缺省值,缺省租期为1天
。
默认情况下,还剩下50%的租期时,DHCP客户端开始租约更新过程,DHCP客户端向分配IP地址的服务器发送DHCP请求报文来申请延长IP地址的租期。DHCP服务器向客户端发送DHCP确认报文,给予DHCP客户端一个新的租期。
2.2.3、DHCP重绑定
DHCP客户端在租约期限到达87.5%时,还没收到服务器响应,会申请重绑定IP。
DHCP客户端发送DHCP请求报文续租时,如果DHCP客户端没有收到DHCP服务器的DHCP应答报文。默认情况下,重绑定定时器在租期剩余12.5%的时候超时。
超时后,DHCP客户端会认为原DHCP服务器不可用,开始重新发送DHCP请求报文。网络上任何一台DHCP服务器都可以应答DHCP确认或DHCP非确认报文。
- 如果收到DHCP服务器确认报文,DHCP客户端重新进入绑定状态,复位租期更新定时器和重绑定定时器。
- 如果收到DHCP服务器非确认报文,DHCP客户端进入初始化状态。此时,DHCP客户端必须立刻停止使用现有IP地址,重新申请IP地址。
2.2.4、IP地址释放
- 如果IP租约到期前都没有收到服务器响应,客户端停止使用此IP地址。
- 如果DHCP客户端不再使用分配的IP地址,也可以主动向DHCP服务器发送DHCP RELEASE 报文,释放该IP地址。
如果DHCP客户端在租期失效定时器超时前没有收到服务器的任何回应,DHCP客户端必须立刻停止使用现有IP地址,发送DHCP Release报文,并进入初始化状态。然后,DHCP客户端重新发送DHCP发现报文,申请IP地址。
3、配置基于接口地址池的DHCP
3.1、DHCP接口地址池配置
3.1.1、地址池
DHCP服务器的地址池是用来定义分配给主机的IP地址范围,有两种形式。
- 接口地址池为连接到同一网段的主机或终端分配IP地址。可以在服务器的接口下执行dhcp select interface命令,配置DHCP服务器采用接口地址池的DHCP服务器模式为客户端分配IP地址。
- 全局地址池为所有连接到DHCP服务器的终端分配IP地址。可以在服务器的接口下执行dhcp select global命令,配置DHCP服务器采用全局地址池的DHCP服务器模式为客户端分配IP地址。
3.1.2、接口地址池
接口地址池的优先级比全局地址池高
。配置了全局地址池后,如果又在接口上配置了地址池,客户端将会从接口地址池中获取IP地址。在X7系列交换机上,只能在VLANIF逻辑接口上配置接口地址池。
DHCP接口配置:
[Huawei]dhcp enable //启用DHCP
[Huawei]interface g0/0/0
[Huawei-GigabitEthernet0/0/0]dhcp select interface //选择DHCP接口地址池
[Huawei-GigabitEthernet0/0/0]dhcp server dns-list 8.8.8.8 //指定DNS服务器地址
排除10.1.1.2这个地址,不能给客户端使用
[Huawei-GigabitEthernet0/0/0]dhcp server excluded-ip-address 10.1.1.2
#DHCP的租期是3天,默认是一天
[Huawei-GigabitEthernet0/0/0]dhcp server lease day 3
配置实例:
[Huawei]sysname DHCP
[DHCP]dhcp enable
[DHCP]int g0/0/0
[DHCP-GigabitEthernet0/0/0]ip add 192.168.1.1 255.255.255.0
[DHCP-GigabitEthernet0/0/0]dhcp select int //选择DHCP接口地址池
[DHCP-GigabitEthernet0/0/0]dhcp server dns-list 4.4.4.4
[DHCP-GigabitEthernet0/0/0]dhcp server excluded-ip-add 192.168.1.2 192.168.1.10 //把1.2到1.10排除
[DHCP-GigabitEthernet0/0/0]dhcp server lease day 5
[DHCP-GigabitEthernet0/0/0]dis this
interface GigabitEthernet0/0/0
ip address 192.168.1.1 255.255.255.0
dhcp select interface
dhcp server excluded-ip-address 192.168.1.2 192.168.1.10
dhcp server lease day 5 hour 0 minute 0
dhcp server dns-list 4.4.4.4
google的DNS:4.4.4.4&8.8.8.8
阿里的公共DNS:223.5.5.5&223.6.6.6
PC端:
PC>ipconfig
Link local IPv6 address...........: fe80::5689:98ff:fe8c:d6a
IPv6 address......................: :: / 128
IPv6 gateway......................: ::
IPv4 address......................: 192.168.1.254
Subnet mask.......................: 255.255.255.0
Gateway...........................: 192.168.1.1
Physical address..................: 54-89-98-8C-0D-6A
DNS server........................: 4.4.4.4
<DHCP>dis ip pool
Pool-name : GigabitEthernet0/0/0
Pool-No : 0
Position : Interface Status : Unlocked
Gateway-0 : 192.168.1.1
Mask : 255.255.255.0
VPN instance : --
IP address Statistic
Total :253 //地址池一共有253个地址
Used 使用的:1 Idle 空的:243
Expired :0 Conflict :0 排除的地址 Disable :9
3.1.3、DHCP全局地址池配置
[Huawei]sysname DHCP
#开启DHCP
[DHCP]dhcp enable
[DHCP]ip pool R1 //创建R1的地址池
[DHCP-ip-pool-R1]net 192.168.2.0 mask 24 //网段是多少?
[DHCP-ip-pool-R1]gateway-list 192.168.2.1 //网关
[DHCP-ip-pool-R1]dns-list 8.8.8.8 4.4.4.4 //主DNS地址和副DNS地址
#排除的网段
[DHCP-ip-pool-R1]excluded-ip-address 192.168.2.200 192.168.2.210
[DHCP-ip-pool-R1]lease day 10 //租期
[DHCP]int g0/0/0 //在接口上启用
[DHCP-GigabitEthernet0/0/0]ip add 192.168.2.1 24
[DHCP-GigabitEthernet0/0/0]dhcp select global
PC>ipconfig
[DHCP]dis ip pool
-------------------------------------------------------------------
Pool-name : R1 地址池名称
Pool-No : 0
Position : Local Status : Unlocked
Gateway-0 : 192.168.2.1
Mask : 255.255.255.0
IP address Statistic
Total :253 总共地址
Used使用地址 :1 空闲地址 Idle :241
Expired :0 Conflict :0 排除的地址Disable :11
3.1.4、DHCP中继代理
DHCP Relay组网场景如下图:把用户的上线请求报文转发给DHCP Server
为每个网段安装一台DHCP服务器,但这种方式的弊端是:资源浪费与不利于管理;
当DHCP服务器与客户端不在同一网络内,这时候客户端的所发的广播包不能被服务器端口接收,这时我们采用中继代理,让收到客户端收到的广播转换为到服务器的单播包,转送给DHCP服务器。
DHCP服务器收到DHCP DISCOVER,回应DHCP OFFER广播包,中继代理将广播包转换成单播包
传送给客户端。
DHCP客户端利用DHCP中继代理来从DHCP客户端那里获取IP地址等配置参数时,DHCP中继代理必须与DHCP客户端位于同一个二层广播域,但DHCP Server可以与DHCP Relay位于同一个二层广播域,也可以与DHCP Relay位于不同的二层广播域。DHCP Client与DHCP Relay之间是以广播方式交换DHCP消息的,但DHCP Relay与DHCP Server之间是以单播方式交换DHCP消息的(这就意味着,DHCP Relay必须事先知道DHCP Server的IP地址)。
第一步:发现阶段
DHCP中继接收到DHCP客户端广播发送的DHCP DISCOVER报文后,进行如下处理:
1.检查DHCP报文中的hops字段,如果大于16,则丢弃DHCP报文;否则,将hops字段加1(表明经过一次DHCP中继),并继续下面的操作。
2.检查DHCP报文中的giaddr字段。如果是0,将giaddr字段设置为接收DHCP DISCOVER报文的接口IP地址。如果不是0,则不修改该字段,继续下面的操作。
3.将DHCP报文的目的IP地址改为DHCP服务器或下一跳中继的IP地址,源地址改为中继连接客户端的接口地址,通过路由转发将DHCP报文单播发送到DHCP服务器或下一跳中继。
如果DHCP客户端与DHCP服务器之间存在多个DHCP中继,后面的中继接收到DHCP DISCOVER报文的处理流程同前面所述。
第二步:提供阶段
DHCP服务器接收到DHCP DISCOVER报文后,选择与报文中giaddr字段为同一网段的地址池,并为客户端分配IP地址等参数,然后向giaddr字段标识的DHCP中继单播发送DHCP OFFER报文。
DHCP中继收到DHCP OFFER报文后,会进行如下处理:
1.检查报文中的giaddr字段,如果不是接口的地址,则丢弃该报文;否则,继续下面的操作。
2.DHCP中继检查报文的广播标志位。如果广播标志位为1,则将DHCP OFFER报文广播发送给DHCP客户端;否则将DHCP OFFER报文单播发送给DHCP客户端。
第三步:选择阶段
中继接收到来自客户端的DHCP REQUEST报文的处理过程同“第三步:选择阶段”。
第四步:确认阶段
中继接收到来自服务器的DHCP ACK报文的处理过程同“第四步:确认阶段”。
DHCP Relay配置实现:
配置DHCP-Server:
(以基于全局地址池分配地址为例)
dhcp enable //使能DHCP
ip pool DHCP-relay //地址池DHCP-relay
gateway-list 192.168.1.1 //网关192.168.1.1
network 192.168.1.0 mask 24 //network表明了DHCP服务中的Client可用地址池
dns-list 10.1.1.1 //DNS
interface g0/0/0
ip address 10.1.1.1 24
dhcp select global //全局应用
ip route-static 192.168.1.0 24 10.1.1.2
配置DHCP中继(GW):
dhcp server group DHCP //创建一个DHCP服务器组
dhcp-server 10.1.1.1 //DHCP服务器地址
dhcp enable
interface g0/0/1
ip address 192.168.1.1 24
dhcp select relay //使能DHCP中继功能
dhcp relay server-select DHCP //配置DHCP中继所对应的DHCP服务器组。
interface g0/0/0
ip address 10.1.1.2 24
配置案例:
基本配置
[Huawei]sysname SW1
[SW1]undo info en
[SW1]vlan batch 2 3
[SW1-GigabitEthernet0/0/2]port link-ty access
[SW1-GigabitEthernet0/0/2]port default vlan 2
[SW1-GigabitEthernet0/0/2]int g0/0/3
[SW1-GigabitEthernet0/0/3]port link-ty access
[SW1-GigabitEthernet0/0/3]port default vlan 3
[SW1-GigabitEthernet0/0/3]dis vlan
2 common UT:GE0/0/2(U)
3 common UT:GE0/0/3(U)
配置网关:
[SW1]int vlanif 1
[SW1-Vlanif1]ip add 12.1.1.1 24
[SW1-Vlanif1]int vlanif 2
[SW1-Vlanif2]ip add 192.168.2.1 24 //Vlan 2的网关
[SW1-Vlanif2]int vlanif 3
[SW1-Vlanif3]ip add 192.168.3.1 24 // Vlan 3的网关
[SW1]dis ip rout
Routing Tables: Public
Destinations : 8 Routes : 8
Destination Proto Pre Cost Flags NextHop Interface
12.1.1.0/24 Direct 0 0 D 12.1.1.1 Vlanif1
12.1.1.1/32 Direct 0 0 D 127.0.0.1 Vlanif1
127.0.0.0/8 Direct 0 0 D 127.0.0.1 lo 0
127.0.0.1/32 Direct 0 0 D 127.0.0.1 lo 0
192.168.2.0/24 Direct 0 0 D 192.168.2.1 Vlanif2
192.168.2.1/32 Direct 0 0 D 127.0.0.1 Vlanif2
192.168.3.0/24 Direct 0 0 D 192.168.3.1 Vlanif3
192.168.3.1/32 Direct 0 0 D 127.0.0.1 Vlanif3
配置OSPF路由
[AR1]int g0/0/0
[AR1-GigabitEthernet0/0/0]ip add 12.1.1.2 24
[AR1]ospf 100
[AR1-ospf-100]area 0
[AR1-ospf-100-area-0.0.0.0]net 12.1.1.0 0.0.0.255
[AR1-ospf-100-area-0.0.0.0]net 192.168.2.0 0.0.0.255
[AR1-ospf-100-area-0.0.0.0]net 192.168.3.0 0.0.0.255
[SW1]ospf 100
[SW1-ospf-100]area 0
[SW1-ospf-100-area-0.0.0.0]net 12.1.1.0 0.0.0.255
[SW1-ospf-100-area-0.0.0.0]net 192.168.2.0 0.0.0.255
[SW1-ospf-100-area-0.0.0.0]net 192.168.3.0 0.0.0.255
[AR1-ospf-100]dis ospf peer
OSPF Process 100 with Router ID 12.1.1.2
Neighbors
Area 0.0.0.0 interface 12.1.1.2(GigabitEthernet0/0/0)'s neighbors
Router ID: 12.1.1.1 Address: 12.1.1.1
State: Full Mode:Nbr is Slave Priority: 1
DR: 12.1.1.2 BDR: 12.1.1.1 MTU: 0
Dead timer due in 34 sec
Retrans timer interval: 5
Neighbor is up for 00:09:55
配置DHCP服务器全局配置
[AR1]ip pool vlan2 // vlan2地址池
[AR1-ip-pool-vlan2]net 192.168.2.0 mask 255.255.255.0
[AR1-ip-pool-vlan2]gateway-list 192.168.2.1 //网关
[AR1-ip-pool-vlan2]dns-list 4.4.4.4 //DNS
[AR1-ip-pool-vlan2]lease day 2 //租期
[AR1-ip-pool-vlan2]q
[AR1]ip pool vlan3
Info: It's successful to create an IP address pool.
[AR1-ip-pool-vlan3]net 192.168.3.0 mask 255.255.255.0
[AR1-ip-pool-vlan3]gateway-list 192.168.3.1
[AR1-ip-pool-vlan3]dns-list 4.4.4.4
[AR1-ip-pool-vlan3]lease day 3
[AR1]dhcp en
[AR1]int g0/0/0
[AR1-GigabitEthernet0/0/0]dhcp select global
配置中继代理
[SW1]dhcp enable
[SW1]int vlanif 2
[SW1-Vlanif2]dhcp select relay //启用中继代理
[SW1-Vlanif2]dhcp relay server-ip 12.1.1.2 //DHCP地址
[SW1-Vlanif2]int vlanif 3
[SW1-Vlanif3]dhcp select relay //启用中继代理
[SW1-Vlanif3]dhcp relay server-ip 12.1.1.2 //DHCP地址
PC>ipconfig
Link local IPv6 address...........: fe80::5689:98ff:fe2b:33fc
IPv6 address......................: :: / 128
IPv6 gateway......................: ::
IPv4 address......................: 192.168.2.254
Subnet mask.......................: 255.255.255.0
Gateway...........................: 192.168.2.1
Physical address..................: 54-89-98-2B-33-FC
DNS server........................: 4.4.4.4
查看所有接口上DHCP中继的配置信息
[SW1]display dhcp relay configuration
DHCP relay agent running information of interface vlan2 :
Server IP address [00] : 12.1.1.2
Gateway address in use : 192.168.2.1
Anycast gateway re-route: disable
查看接口地址池的分配情况
[SW1]display ip pool interface vlanif2
Pool-name : vlan2
Pool-No : 0
Lease : 2 Days 0 Hours 0 Minutes
DNS-server0 : 4.4.4.4
NBNS-server0 : -
Netbios-type : -
Position : Interface
Status : Unlocked
Gateway-0 : 192.168.2.1
Network : 192.168.2.0
Mask : 255.255.255.0
4、DHCP面临的安全威胁
DHCP在设计上未充分考虑到安全因素,从而留下了许多安全漏洞,使得DHCP很容易受到攻击。实际网络中,针对DHCP的攻击行为主要有以下三种:
- DHCP饿死攻击
- 仿冒DHCP Server攻击
- DHCP中间人攻击
4.1、DHCP饿死攻击
攻击原理:攻击者持续大量地向DHCP Server申请IP地址,直到耗尽DHCP Server地址池中的IP地址,导致DHCP Server不能给正常的用户进行分配。
漏洞分析:DHCP Server向申请者分配IP地址时,无法区分正常的申请者与恶意的申请者。
配置防止DHCP报文泛洪攻击。
DHCP饿死攻击是攻击者通过持续大量地向DHCP Server申请IP地址来实现的,其目的是耗尽DHCP Server地址池中的IP地址,导致DHCP Server没有IP地址分配给正常的用户。DHCP消息中有一个名叫CHADDR(Client Hardware Address)的字段,该字段是由DHCP客户端填写的,表示的是客户端的硬件地址(也就是客户端的MAC地址)。DHCP Server是针对CHADDR来分配IP地址的,对于不同的CHADDR,DHCP Server会分配不同的IP地址;DHCP Server无法区分什么样的CHADDR是合法的,什么样的CHADDR是非法的。利用这个漏洞,攻击者每申请一个IP地址时,就在DHCP消息的CHADDR字段中填写一个不同的值,以此来冒充是不同的用户在申请IP地址。
4.2、仿冒DHCP Server攻击
攻击原理:攻击者仿冒DHCP Server,向客户端分配错误的IP地址及提供错误的网关地址等参数,导致客户端无法正常访问网络。
漏洞分析:DHCP客户端接收到来自DHCP Server的DHCP消息后,无法区分这些DHCP消息是来自仿冒的DHCP Server,还是来自合法的DHCP Server。
仿冒DHCP Server和合法的DHCP Server都能够收到该DHCP Discover消息,并且都会回应DHCP Offer消息。如果客户端最先收到的DHCP Offer消息是来自仿冒DHCP Server,那么客户端就会继续向仿冒DHCP Server(而不是合法的DHCP Server)请求获得IP地址等参数,而仿冒DHCP Server就会乘机向客户端分配错误的IP地址及提供错误的网关地址等参数。
4.3、DHCP中间人攻击
攻击原理:攻击者利用ARP机制,让PC-A学习到IP-S与MAC-B的映射关系,又让Server学习到IP-A与MAC-B的映射关系。如此一来,PC-A与Server之间交互的IP报文都会经过攻击者中转。
漏洞分析:从本质上讲,中间人攻击是一种Spoofing IP/MAC攻击,中间人利用了虚假的IP地址与MAC地址之间的映射关系来同时欺骗DHCP的客户端和服务器。
4.4、DHCP Snooping技术的出现
- 为了增强网络安全,防止DHCP受到攻击,一种称为DHCP Snooping的技术应运而生。DHCP Snooping不是一种标准技术,尚未有统一的标准规范,不同的网络设备制造商在DHCP Snooping的实现上也不尽相同。
- DHCP Snooping部署在交换机上,其作用类似于在DHCP客户端与DHCP服务器端之间构筑了一道虚拟的防火墙。
4.4.1、DHCP Snooping用于防止DHCP饿死攻击
为阻止饿死攻击,DHCP Snooping技术支持在端口下对DHCP Request报文的源MAC地址与CHADDR(客户端的MAC地址)进行一致性检查:如果二者相同,则转发报文;如果二者不相同,则丢弃。如果要在某端口下实施源MAC地址与CHADDR的一致性检查,可以在该端口下使用命令dhcp snooping check dhcp-chaddr enable。
配置:
int g0/0/0
dhcp snooping check dhcp-chaddr enable
还可能存在这样一种饿死攻击,就是攻击者不断同时变换MAC地址和CHADDR,并且每一次变换时,都让CHADDR与MAC地址相同,如此一来,便可以躲过上述源MAC地址与CHADDR的一致性检查!
4.4.2、DHCP Snooping用于防止仿冒DHCP Server攻击
- DHCP Snooping将交换机上的端口分为两种类型,即信任端口(Trusted端口)和非信任端口(Untrusted端口);与合法的DHCP Server相连接的端口应配置为Trusted端口,其他端口应配置为Untrusted端口。
- 交换机从Trusted端口接收到服务器端DHCP响应报文(例如DHCP Offer报文、DHCP Ack报文等等)后,会转发这些报文,从而保证合法的DHCP Server可以正常地分配IP地址及提供其他网络参数;交换机从Untrusted端口接收到DHCP响应报文(例如DHCP Offer报文、DHCP Ack报文等等)后,会丢弃这些报文,从而阻止仿冒的DHCP Server分配IP地址及提供其他网络参数。
- 关键配置命令:交换机的端口默认是Untrusted端口。如果需要将交换机的某个端口配置为Trusted端口,可以在该端口视图下使用命令dhcp snooping trusted。如果需要将某个Trusted端口恢复为Untrusted端口,可以在该端口视图下使用命令undo dhcp snooping trusted。
配置:
Int g0/0/0
dhcp snooping trusted
int g0/0/1
undo dhcp snooping trusted
4.4.3、DHCP Snooping用于防止DHCP中间人攻击
运行了DHCP Snooping的交换机会“侦听(Snooping)”往来于用户与DHCP Server之间的DHCP消息,并从中收集用户的MAC地址(这里的MAC地址是指DHCP消息中CHADDR字段的值)、用户的IP地址(这里的IP地址是指DHCP Server分配给相应CHADDR的IP地址)等信息,这些信息会集中存放在一个数据库中,该数据库也被称为DHCP Snooping绑定表。运行了DHCP Snooping的交换机会建立并动态维护DHCP Snooping绑定表,绑定表中除了包含了用户的MAC地址、用户的IP地址外,还包括IP地址租用期、VLAN-ID等等信息。
如图所示,假设DHCP Server给PC-A分配了IP地址IP-A,给PC-B分配了IP地址IP-B,那么IP-A与MAC-A就形成了绑定关系,IP-B与MAC-B也形成了绑定关系,这种绑定关系都存放于DHCP Snooping绑定表中。攻击者为了让Server学习到IP-A与MAC-B的映射关系,会发送ARP请求报文(将ARP报文中的源IP地址填为IP-A,源MAC地址填为MAC-B)。交换机接收到ARP请求报文后,会检查该ARP请求报文中的源IP地址和源MAC地址,发现该IP/MAC(IP-A/MAC-B)映射关系不能匹配DHCP Snooping绑定表中的条目,于是会丢弃该ARP请求报文,这样就有效地防止了Spoofing IP/MAC攻击。
如果需要使用上面所描述的防止Spoofing IP/MAC攻击(进而防止中间人)的方法,就必须在交换机的系统视图下执行配置命令arp dhcp-snooping-detect enable。
配置:
<SW1>sys
[SW1]arp dhcp-snooping-detect enable
4.4.4、DHCP Snooping与IPSG技术的联动
- 网络中经常会存在针对源IP地址进行欺骗的攻击行为,例如,攻击者仿冒合法用户的IP地址来向服务器发送IP报文。针对这类攻击,相应的防范技术称为IPSG(IP Source Guard)技术。
交换机使能IPSG功能后,会对进入交换机端口的报文进行合法性检查,并对报文进行过滤(如果合法,则转发;如果非法,则丢弃)。 - DHCP Snooping技术可与IPSG技术进行联动,即:对于进入交换机端口的报文进行DHCP Snooping绑定表匹配检查,如果报文的信息和与绑定表一致,则允许其通过,否则丢弃报文。
- 报文的检查项可以是源IP地址、源MAC地址、VLAN和物理端口号的若干种组合。例如,在交换机的端口视图下可支持IP+MAC、IP+VLAN、IP+MAC+VLAN等组合检查,在交换机的VLAN视图下可支持:IP+MAC、IP+物理端口号、IP+MAC+物理端口号等组合检查。
关键配置命令:在交换机的端口视图下或VLAN视图下执行配置命令ip source check user-bind enable。
配置
[SW1]int g0/0/8
ip source check user-bind enable
由于Option82记录的是客户端的位置信息,建议在靠近用户侧的设备上配置。如果DHCP中继下面有DHCP Snooping设备,建议在DHCP Snooping设备上配置Option82。