DHCP是动态主机配置协议(DHCP:Dynamic Host Configuration Protocol),主要用于中大型网络的IP地址、网关、掩码和DNS地址的动态分配,可以减少管理员的工作量,避免用户手工配置网络参数时造成的地址冲突。而随着网络规模的增大,DHCP也面临了许多的危险(例如:DHCP饿死攻击、仿冒DHCP server和中间人攻击),下面我们先从原理上来理解DHCP是如何工作的,及DHCP的各种配置实现,后面会介绍DHCP面临的威胁以及该如何避免。
- 人工配置面临的问题:人员素质要求高、容易出错、灵活性差、IP地址资源利用率低 工作量大
- 自动配置的优点:效率高、灵活性强、易于集中化管理
DHCP工作原理
- 建立过程
地址分配过程是通过DHCP Client与DHCP Server之间交互各种DHCP消息来实现的。DHCP消息是封装在UDP报文中的,DHCP Server使用端口号67来接收DHCP消息,DHCP Client使用端口号68来接收DHCP消息。
发现阶段:发送DHCP Discover消息,寻找DHCP Server,并表示自己需要获得一个IP地址。二层广播域如果存在多个DHCP Server ,那么都会收到Discover的报文,因此所有server都会回应Client。
提供阶段:Server 向Client 提供IP地址的阶段,每个Server都会从自己维护的地址池中选择一个合适的IP地址,并通过单播的方式 DHCP Offer消息将这个IP地址发送给DHCP Client。
请求阶段:在请求阶段中,PC上的DHCP Client会在若干个收到的Offer(即若干个收到的DHCP Offer消息)中根据某种原则来确定出自己将要接受哪一个Offer。通常情况下,DHCP Client会接受它所收到的第一个Offer(即最先收到的那个DHCP Offer消息)。如果PC最先收到的DHCP Offer消息是来自路由器R。于是,PC上的DHCP Client会以广播方式发送一个DHCP Request消息,其意图就是向路由器R上的DHCP Server提出请求,希望获取到该DHCP Server发送给自己的DHCP Offer消息中所提供的那个IP地址。注意,这个DHCP Request消息中携带有R上的DHCP Server的标识(称为Server Identifier),表示PC上的DHCP Client只愿意接受R上的DHCP Server所给出的Offer。以广播的方式请求是可以告诉其它的server “ 我已经接受了R的offer,你们不是R的就不用给我分配地址啦,管其他PC分配就行”。
确认阶段:Server 根据Request报文中的Server Identifier标识 确认是否指示自己,如果是则给Request报文的发送者回复Ack报文来确认IP地址。当然会因为各种原因导致无法确认,则回复Nak报文。此时Client需要从回到Discover阶段。
- 续租过程
DHCP租约期的缺省值不得小于1个小时,租约期的缺省值通常都是24小时。
T1时期:IP租约期限到达50%时,DHCP客户端会以单播的方式请求更新IP地址租约,如果在T2之前收到Ack消息说明续租成功,否则进入第二次请求。
T2时期:DHCP客户端在租约期限到达87.5%时,还没收到服务器响应,会申请重绑定IP。Client会以为原Server不可用了,就以广播方式发送一个DHCP Request消息,继续请求续租IP地址。
释放过程:如果直到租约期到期时,PC上的DHCP Client仍未收到回应的DHCP Ack消息,那么PC就必须停止使用原来的IP地址,也就是说,PC只能重新从发现阶段开始来重新申请一个IP地址。如果PC不需要DHCP功能了,也可以主动向DHCP服务器发送DHCP Release报文,释放该IP地址。
DHCP Relay
DHCP有三种配置模式:接口模式、全局模式、中继模式。
- 接口模式:靠用户则,配置简单易实现;
- 全局模式:最典型的配置,但灵活性不够中继模式好;
- 中继模式:适用于大中型网络,灵活性好,一个服务器可以实现多个广播域的网络地址分配,集中化管理同时节省了网络设备成本。
工作原理
- 普通的DHCP是工作在二层为一个广播域里面的主机分配IP地址,也就是说DHCP的报文是无法跨越二层层进行传输的,那么像服务器这样的设备是不可能只在一个二层网络的,所以引入了DCHP Relay。
- DHCP Relay的基本作用就是专门在DHCP Client和DHCP Server之间进行DHCP消息的中转。DHCP Relay与DHCP Server之间是以单播方式交换DHCP消息的(这就意味着,DHCP Relay必须事先知道DHCP Server的IP地址)。
- 配置实现
接口DHCP
[Huawei]dhcp enable // 全局模式下开启使能DHCP功能 [Huawei]interface GigabitEthernet0/0/0 [Huawei-GigabitEthernet0/0/0]dhcp select interface // 选择为接口模式 [Huawei-GigabitEthernet0/0/0]dhcp server dns-list 10.1.1.2 // 配置dns地址 [Huawei-GigabitEthernet0/0/0]dhcp server excluded-ip-address 10.1.1.2 // 排除的地址 [Huawei-GigabitEthernet0/0/0]dhcp server lease day 3 // 租期时间
全局DHCP
[Huawei]dhcp enable [Huawei]ip pool pool1 // 创建地址池 [Huawei-ip-pool-pool1]gateway-list 192.168.1.1 // 配置网关 [Huawei-ip-pool-pool1]network 192.168.1.0 mask 255.255.255.0 // 可用地址范围 [Huawei-GigabitEthernet0/0/0]ip address 192.168.1.1 255.255.255.0 [Huawei-GigabitEthernet0/0/0]dhcp select global // 接口开启全局模式
中继DHCP
配置DHCP-Server: (以基于全局地址池分配地址为例) [Huawei]dhcp enable [Huawei]ip pool DHCP-relay [Huawei-ip-pool-DHCP-relay]gateway-list 192.168.1.1 // 配置网关 [Huawei-ip-pool-DHCP-relay]network 192.168.1.0 mask 24 // 可用地址 [Huawei-ip-pool-DHCP-relay]dns-list 10.1.1.1 [Huawei-GigabitEthernet0/0/0]ip address 10.1.1.1 24 [Huawei-GigabitEthernet0/0/0]dhcp select global // 接口开启全局模式 [Huawei]ip route-static 192.168.1.0 24 10.1.1.2 // 静态路由提供连通 配置DHCP中继(GW): [Huawei]dhcp enable [Huawei-GigabitEthernet0/0/1]ip address 192.168.1.1 24 // 配置IP地址,此为网关 [Huawei-GigabitEthernet0/0/1]dhcp select relay // 选择为中继模式 [Huawei-GigabitEthernet0/0/1]dhcp relay server-ip 10.1.1.1 // 指定服务器地址 [Huawei-GigabitEthernet0/0/0]ip address 10.1.1.2 24 // 连接服务器的地址
DHCP安全问题
DHCP如果在设计时没有考虑到安全因素,那么会带来许多的安全漏洞和隐患,下面举了三种DHCP的安全问题。
- DHCP 饿死攻击
原理:DHCP饿死攻击是指利用DHCP server 无法正确区分合法的申请者和攻击者的申请,而攻击者持续大量地向DHCP Server申请IP地址,直到耗尽DHCP Server地址池中的IP地址,导致DHCP Server不能给正常的用户进行分配。
避免:DHCP消息中有一个名叫CHADDR(Client Hardware Address)的字段,该字段是由DHCP客户端填写的,表示的是客户端的硬件地址(也就是客户端的MAC地址)。DHCP Snooping技术支持在端口下对DHCP Request报文的源MAC地址与CHADDR进行一致性检查:如果二者相同,则转发报文;如果二者不相同,则丢弃。一致性检测一定程度上避免了饿死攻击,但不是绝对的,因为CHADDR和MAC地址可以是人为操作的。
配置实现:端口上使能 dhcp-chaddr 功能即可,命令如下
[Huawei-GigabitEthernet0/0/0]dhcp snooping check dhcp-chaddr enable
- 仿冒DHCP server攻击
原理:攻击者仿冒DHCP Server,向客户端分配错误的IP地址及提供错误的网关地址等参数,客户端不会判别DHCP Sever发过来的消息是否合法,从而导致客户端无法正常访问网络。
避免:DHCP Snooping将交换机上的端口分为两种类型,即信任端口(Trusted端口)和非信任端口(Untrusted端口);与合法的DHCP Server相连接的端口应配置为Trusted端口,其他端口应配置为Untrusted端口。
配置实现:在中小型的企业网,DHCP Server不会存在多个,那么只需将设备与服务器连接的的端口配置为 安全端口(Trusted)即可,命令如下
[Huawei-GigabitEthernet0/0/0]dhcp snooping trusted
- 中间人攻击
原理:攻击者在客户端和服务器之间接入网络,这里称为中间人,原理是利用了虚假的IP地址与MAC地址之间的映射关系来同时欺骗DHCP的客户端和服务器。
避免:运行了DHCP Snooping的交换机会“侦听(Snooping)”往来于用户与DHCP Server之间的DHCP消息,并从中收集用户的MAC地址(这里的MAC地址是指DHCP消息中CHADDR字段的值)、用户的IP地址(这里的IP地址是指DHCP Server分配给相应CHADDR的IP地址)等信息,这些信息会集中存放在一个数据库中,该数据库也被称为DHCP Snooping绑定表。交换机接收到ARP请求报文后,会检查该ARP请求报文中的源IP地址和源MAC地址,发现该IP/MAC(IP-A/MAC-B)映射关系不能匹配DHCP Snooping绑定表中的条目,于是会丢弃该ARP请求报文
配置实现:
[Huawei]arp dhcp-snooping-detect enable // 交换机的系统视图下执行配置命令