DHCP Snooping
功能简介
DHCP Snooping 是 DHCP 的安全特性,以此来防御网络中不受信任的 DHCP 服务器。
为什么需要防御不受信任的 DHCP 服务器呢?
我们在上一实验中讲解到 DHCP 的作用,就是为我们管理 IP 地址,从而实现 IP 地址的自动划分,但是若是网络中有假冒的 DHCP Server,这样会使得主机获取的到 IP 地址并不是网络中可以用的 IP 地址,这要主机根本无法上网。并且若是假冒的 DHCP Server 中的地址池与真实的相同,给主机发放的 IP 地址是当前网络中已被发放的 IP 地址,这样会导致拥有相同 IP 地址的主机都无法上网。
在小型网络中也就几台设备可以手动修改,但是若是大型网络中呢,上百台设备,几十台都无法上网的情况根本无法手动修改,所以对网络中假冒的 DHCP 服务器还是需要防范的。
而 DHCP Snooping 就能够过滤掉网络中不受信任的 DHCP 服务器。
工作流程
在了解 DHCP Snooping 工作原理之前,首先得知道 DHCP 发放地址的过程。
一共分为这样的四个步骤:
1.需要 IP 地址的主机向网络中广播 DHCP Discover 的数据包来请求 IP 地址 2.若是网络中有 DHCP 服务器就在自己的地址池里面找是否有合法的 IP 地址,若是有便发送一个 DHCP offer 的数据包出去 3.主机在收到数据包之后,便发送一个 DHCP request 的数据包,告诉 DHCP 服务器这个合法的 IP 地址我要了。 4.DHCP 服务器收到请求的数据包之后,就会回复一个确认的 DHCP ACK 数据包,表示没问题,那个 IP 地址就给你用了
若是对 DHCP 想要更深入的理解,明白报文的格式,每个数据包都是如何发送的,可以参看这样的一篇博客,该博客中使用 wireshark 查看每个过程的数据包。
这便是 DHCP 的工作流程,而其中 DHCP Discover 数据包是广播发送出去的,那么如果此时网络中有冒牌的 DHCP Server 的话,若是比真正的 Server 先收到 Discover 的数据包,并首先响应了,那么主机就会收到不是该网络中使用的 IP 地址或者是已经被其他设备使用的 IP 地址,这样该主机是无法与外网通信的,因为 IP 地址并不合法,路由条目中无此路由。
而 DHCP Snooping 的作用便是在主机数据包所经过的交换机上设置信任端口,只要在信任的端口上收到了 DHCP Offer 的数据包,便可以顺利通过,使得主机收到。但是若是在不被信任的端口上收到了 DHCP Offer 的数据包,便认为这边有假冒的 DHCP Server,此时便会把该 Offer 数据包直接丢弃不进行转发,这样主机就不会收到假冒的 DHCP Server 所发放的非法 IP 地址。
基本配置
我们会通过这样一个实验来体验 DHCP Snooping 所带来的好处,同时学习如何在一台交换机中配置 DHCP Server 的功能。
实验目的:配置实现 DHCP、DHCP Snooping
实验材料:三台交换机
实验方法:
拖动三交换机至画布中
配置交换机的名字与连接线路
配置 DHCP Server
验证 DHCP 功能
配置 DHCP Snooping
验证 DHCP Snooping 功能
1.按照管理,我们使用终端启动 GNS3,同时做好上述的准备工作,建立好拓扑结构:
image.png
2.配置局域网中的 DHCP 服务器,因为 Switch2 用作中继,所以不用做任何的配置:
##DHCP config code
# DHCP Server
DHCP-Server#conf t
#开启 DHCP 服务
DHCP-Server(config)#service dhcp
#创建一个 DHCP 地址池,并为其命名
DHCP-Server(config)#ip dhcp pool test1
#配置改地址池所发放的地址网络与子网掩码
DHCP-Server(dhcp-config)#network 192.168.1.0 255.255.255.0
#配置在发放 IP 地址池是指定默认网关
DHCP-Server(dhcp-config)#default-router 192.168.1.1
DHCP-Server(dhcp-config)#exit
#排除地址池中的地址不分配,此地址作为网关
DHCP-Server(config)#ip dhcp excluded-add 192.168.1.1
#配置与外界连接的端口
DHCP-Server(config)#int e0/1
#切换至路由模式
DHCP-Server(config-if)#no switch
#为其配置 IP 地址
DHCP-Server(config-if)#ip add 192.168.1.254 255.255.255.0
#按照严谨的思维上述配置还应该配除掉 1.254,你能做到吗?
# PC
#进入全局配置模式
PC#config t
#关闭路由模式
PC(config)#no ip routing
#配置与外界连接的端口
PC(config)#int e0/1
#切换至路由模式
PC(config-if)#no switch
#使用 DHCP 方式获取 IP 地址
PC(config-if)#ip add dhcp
由此我们便配置好了 DHCP,并且是 PC 通过 DHCP 的方式获得 IP 地址。
2.验证 DHCP 功能
我们可以在 DHCP-Server 中使用这样一些命令来查看 DHCP 的功能:
#查看 DHCP 地址池的情况
DHCP-Server#show ip dhcp pool
#查看 IP 地址的对应情况
DHCP-Server#show ip dhcp binding
image.png
其中下一个分配地址是 1.3 是因为 1.1 已经被我配置不能分配出去,1.2 已经被分配出去了,所以下一个被分配的 IP 地址应该是 1.3
由此我们看到已经有一个 IP 地址成功的分配出去了。
我们通过这个命令来查看 PC 的连接端口是否真的得到了 IP 地址:
#查看 PC 的端口信息概要,并过滤只显示还有 192 的部分
PC#show ip int b | s 192
image.png
3.我们做这样一个实验,添加一台 DHCP 服务器作为冒牌的假 DHCP Server,与 Switch 2 相连接,并配置其地址池中为 172.16.1.0 网段。
查看 PC 是否有可能获得这个地址段的 IP 地址:
首先配置冒牌 DHCP 的地址池:
DHCP-Server-illegal#conf t
DHCP-Server-illegal(config)#service dhcp
DHCP-Server-illegal(config)#ip dhcp pool test1
DHCP-Server-illegal(dhcp-config)#network 172.16.1.0 255.255.255.0
DHCP-Server-illegal(dhcp-config)#default-router 172.16.1.254
DHCP-Server-illegal(dhcp-config)#exit
#按照严谨的思维这还应该配除掉 1.254
DHCP-Server-illegal(config)#ip dhcp excluded-add 172.16.1.1
DHCP-Server-illegal(config)#int e0/0
DHCP-Server-illegal(config-if)#no switch
DHCP-Server-illegal(config-if)#ip add 172.16.1.1 255.255.255.0
配置好了冒牌的 DHCP 服务器之后,我们来取消掉当前 PC 的 IP 地址,并不断的尝试使用 DHCP 的方式获取 IP 地址,看能否获得 172.16.1.0 网段的 IP 地址:
#进入全局配置模式
PC#conf t
#进入端口的配置
PC(config)#int e0/1
#去除当前的 IP 地址
PC(config-if)#no ip add
#重新使用 DHCP 方式获取 IP 地址
PC(config-if)#ip add dhcp
然后我们退出使用 show ip int b | s 0/1 查看当前的 IP 地址是多少:
image.png
只通过一次尝试我们便获得了非法的 IP 地址,若是这发生在局域网中还是有很大的问题。
4.配置 DHCP Snooping
为了解决这样的隐患,我们可以使用 DHCP Snooping 技术。
DHCP Snooping 使得只有在被信任的端口上转发 DHCP offer 的数据包,以此来防止冒牌的 DHCP Server。
我们的在中继功能的 Switch2 中配置这样的代码:
##在 Switch2 中添加 DHCP Snooping 的功能
Switch2#conf t
#全局开启 dhcp snooping 功能
Switch2(config)#ip dhcp snooping
#dhcp snooping 至少得与一个 Vlan 关联,而我们没有划分 Vlan,所以关联 default vlan
Switch2(config)#ip dhcp snooping vlan 1
#同时配置 e0/0、e0/1 两个端口,一个链接的是正牌 DHCP Server,一个链接的是正常的用户
Switch2(config)#int range e0/0-1
#信任这两个端口,使他们可以转发 offer 数据包
Switch2(config-if-range)#ip dhcp snooping trust
此时我们再不断的使用这样的代码去获取 IP 地址,无论如何也不会得到非法的 IP 地址了:
#进入全局配置模式
PC#conf t
#进入端口的配置
PC(config)#int e0/1
#去除当前的 IP 地址
PC(config-if)#no ip add
#重新使用 DHCP 方式获取 IP 地址
PC(config-if)#ip add dhcp
注意:DHCP Server 与 DHCP Client 都配置成信任的端口,这样在实际环境中是不对的,因为用户自己也有可以搭建一个 DHCP Server 来扰乱网络,DHCP Snooping 就是为了防止这样的情况发生。所以在生产环境中是不用在获取 IP 地址的这个端口上配置 trust,GNS3 的 IOU 是实现不了该功能的,这里只是强行配置,带领大家认识该功能与相关的命令。
记住正确的配置只用配置只有这样一个步骤:
ip dhcp snooping #全局开启 DHCP Snooping 的功能
ip dhcp snooping vlan id #对某个 vlan 实施该功能
int 端口 #对与 DHCP 直连的端口配置
ip dhcp snooping trust #信任该端口
这样便可完成该功能的配置,大家可以看看这篇文章了解下有哪些实验是 GNS3 IOU 所不能实现,以此来避免本来自己的配置代码没有问题,但是功能却有错误的情况。
与 DHCP Snooping 相互配合的还有 DAI,所谓的 DAI 是 Dynamic ARP Inspection,用于防止网络内部的 ARP 攻击,它可以根据 DHCP Snooping binding 表中的内容得到正确的 ARP 对应关系,从而在端口上配置 trust 端口,同时与 ACL_ARP 配合以此来隔绝 ARP 的攻击。
与 DHCP Snooping 相互配合的还有 IPSG,所谓的 IPSG 是 IP Source Guard,同样是一种 IP 与 MAC 对应的过滤技术,他可以防止网络中的 IP 地址欺骗的工具,与 ARP 类似,但是他主要是通过端口、IP、MAC 地址的对应关系来匹配过滤。这项技术同样依赖于 DHCP Snooping。
通常来说 DHCP Snooping 与 DAI 与 IPSG 是二层网络安全的黄金搭档,因为 GNS3 的 IOU 不支持 DHCP Snooping 所以这两项防御技术也无法用此环境演示出来,所以这里不再所更多的讲解。
网友评论