Cisco DHCP Snooping

一、采用 DHCP 服务的常见问题

架设 DHCP 服务器可以为客户端自动分配 IP 地址、掩码、默认网关、DNS 服务器等网络参数,简化了 网络配置,提高了管理效率。但在 DHCP 服务的管理上存在一些问题,常见的有:

●DHCP Server 的冒充
●DHCP Server 的
DOS 攻击,如 DHCP 耗竭攻击
●某些用户随便指定
IP 地址,造成 IP 地址冲突
1DHCP Server 的冒充
由于
DHCP 服务器和客户端之间没有认证机制,所以如果在网络上随意添加一台 DHCP 服务器,它就可以为 客户端分配 IP 地址以及其他网络参数。只要让该 DHCP 服务器分配错误的 IP 地址和其他网络参数,那就会 对网络造成非常大的危害。

2DHCP Server 的拒绝服务攻击
通常
DHCP 服务器通过检查客户端发送的 DHCP 请求报文中的 CHADDR(也就是 Client MAC address)字段来 判断客户端的 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 请求报文是广播报文,如果大量发送的话也会耗尽网络带宽,形成另一种拒绝服务攻击。

3、客户端随意指定 IP 地址

客户端并非一定要使用 DHCP 服务,它可以通过静态指定的方式来设置 IP 地址。如果随便指定的话,将会 大大提高网络 IP 地址冲突的可能性。

二、DHCP Snooping 技术介绍

DHCP 监听(DHCP Snooping)是一种 DHCP 安全特性。Cisco 交换机支持在每个 VLAN 基础上启用 DHCP 监听 特性。通过这种特性,交换机能够拦截第二层 VLAN 域内的所有 DHCP 报文。

DHCP 监听将交换机端口划分为两类:

●非信任端口:通常为连接终端设备的端口,如 PC,网络打印机等
●信任端口:连接合法
DHCP 服务器的端口或者连接汇聚交换机的上行端口
通过开启
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 监听绑定表为进一步部署 IP 源防护(IPSG)和动态 ARP 检测(DAI)提供了依据。说明:

I. 非信任端口只允许客户端的 DHCP 请求报文通过,这里只是相对于 DHCP 报文来说的。其他非 DHCP 报文 还是可以正常转发的。这就表示客户端可以以静态指定 IP 地址的方式通过非信任端口接入网络。由于静态 客户端不会发送 DHCP 报文,所以 DHCP 监听绑定表里也不会有该静态客户端的记录。信任端口的客户端信 息不会被记录到 DHCP 监听绑定表里。如果有一客户端连接到了一个信任端口,即使它是通过正常的 DHCP 方式获得 IP 地址,DHCP 监听绑定表里也不有该客户端的记录。如果要求客户端只能以动态获得 IP 的方式 接入网络,则必须借助于 IPSG DAI 技术。

II.交换机为了获得高速转发,通常只检查报文的二层帧头,获得目标 MAC 地址后直接转发,不会去检查报 文的内容。而 DHCP 监听本质上就是开启交换机对 DHCP 报文的内容部分的检查,DHCP 报文不再只是被检查 帧头了。

III. DHCP 监听绑定表不仅用于防御 DHCP 攻击,还为后续的 IPSG DAI 技术提供动态数据库支持。

IV. DHCP 监听绑定表里的 Lease 列就是每个客户端对应的 DHCP 租约时间。当客户端离开网络后,该条目 并不会立即消失。当客户端再次接入网络,重新发起 DHCP 请求以后,相应的条目内容就会被更新。如上面 的 00F.1FC5.1008 这个客户端原本插在 Fa0/1 端口,现在插在 Fa0/3 端口,相应的记录在它再次发送 DHCP 请求并获得地址后会更新为:

Switch#show ip dhcp snooping binding

MacAddress IpAddress Lease(sec) Type VLAN Interface
------------------ --------------- ---------- ------------- ---- ----------------
00:0F:1F:C5:10:08 192.168.10.131 682463 dhcp-snooping 10 FastEthernet0/1

Switch#show ip dhcp snooping binding

or

Switch#show ip source binding

MacAddress           IpAddress    Lease(sec)  Type     VLAN       Interface
------------------ --------------- ---------------- 00:0F:1F:C5:10:08 192.168.10.131 691023 dhcp-snooping 10 FastEthernet0/3
-------------     ---- 

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

●DHCPRELEASE 报文:此报文是客户端主动释放 IP 地址(如 Windows 客户端使用 ipconfig/release), 当 DHCP 服务器收到此报文后就可以收回 IP 地址,分配给其他的客户端了

●DHCPDECLINE 报文:当客户端发现 DHCP 服务器分配给它的 IP 地址无法使用(如 IP 地址发生冲突)时, 将发出此报文让 DHCP 服务器禁止使用这次分配的 IP 地址。

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

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

VIII. 当前主流的 Cisco 交换机基本都支持 DHCP Snooping 功能。

三、DHCP Option 82

DHCP 服务器和客户端不在同一个子网内时,客户端要想从 DHCP 服务器上分配到 IP 地址,就必须由 DHCP 中继代理(DHCP Relay Agent)来转发 DHCP 请求包。DHCP 中继代理将客户端的 DHCP 报文转发到 DHCP 服 务器之前,可以插入一些选项信息,以便 DHCP 服务器能更精确的得知客户端的信息,从而能更灵活的按相 应的策略分配 IP 地址和其他参数。这个选项被称为:DHCP relay agent information option(中继代理 信息选项),选项号为 82,故又称为 option 82,相关标准文档为 RFC3046Option 82 是对 DHCP 选项的 扩展应用。选项 82 只是一种应用扩展,是否携带选项 82 并不会影响 DHCP 原有的应用。另外还要看 DHCP 服务器是否支持选项 82。不支持选项 82 DHCP 服务器接收到插入了选项 82 的报文,或者支持选项 82 DHCP 服务器接收到了没有插入选项 82 的报文,这两种情况都不会对原有的基本的 DHCP 服务造成影响。要 想支持选项 82 带来的扩展应用,则 DHCP 服务器本身必须支持选项 82 以及收到的 DHCP 报文必须被插入选 项 82 信息。从非信任端口收到 DHCP 请求报文,不管 DHCP 服务器和客户端是否处于同一子网,开启了 DHCP 监听功能的 Cisco 交换机都可以选择是否对其插入选项 82 信息。默认情况下,交换机将对从非信任端口接 收到的 DHCP 请求报文插入选项 82 信息。

当一台开启 DHCP 监听的汇聚交换机和一台插入了选项 82 信息的边界交换机(接入交换机)相连时:

●如果边界交换机是连接到汇聚交换机的信任端口,那么汇聚交换机会接收从信任端口收到的插入选项 82 DHCP 报文信息,但是汇聚交换机不会为这些信息建立 DHCP 监听绑定表条目。 ●如果边界交换机是连接到汇聚交换机的非信任端口,那么汇聚交换机会丢弃从该非信任端口收到的插入 了选项 82 DHCP 报文信息。但在 IOS 12.2(25)SE 版本之后,汇聚交换机可以通过在全局模式下配置一 条 ip dhcp snooping information allow-untrusted 命令。这样汇聚交换机就会接收从边界交换机发来的 插入选项 82 DHCP 报文信息,并且也为这些信息建立 DHCP 监听绑定表条目。 在配置汇聚交换机下联口时,将根据从边界交换机发送过来的数据能否被信任而设置为信任或者非信任端 口。

四、DHCP Snooping 的配置

Switch(config)#ip dhcp snooping //打开 DHCP Snooping 功能
Switch(config)#ip dhcp snooping vlan 10 //设置 DHCP Snooping 功能将作用于哪些 VLAN Switch(config)#ip dhcp snooping verify mac-address //检测非信任端口收到的 DHCP 请求报文的 源 MAC CHADDR 字段是否相同,以防止 DHCP 耗竭攻击,该功能默认即为开启 Switch(config-if)#ip dhcp snooping trust //配置接口为 DHCP 监听特性的信任接口,所有接口默 认为非信任接口
Switch(config-if)#ip dhcp snooping limit rate 15 //限制非信任端口的 DHCP 报文速率为每秒

15 个包(默认即为每秒 15 个包)如果不配该语句,则 show ip dhcp snooping 的结果里将不列出没 有该语句的端口,可选速率范围为 1-2048

建议:在配置了端口的 DHCP 报文限速之后,最好配置以下两条命令

Switch(config)#errdisable recovery cause dhcp-rate-limit //使由于 DHCP 报文限速原因而被禁 用的端口能自动从 err-disable 状态恢复
Switch(config)#errdisable recovery interval 30 //设置恢复时间;端口被置为 err-disable 状 态后,经过 30 秒时间才能恢复

Switch(config)#ip dhcp snooping information option //设置交换机是否为非信任端口收到的 DHCP 报文插入 Option 82,默认即为开启状态
Switch(config)#ip dhcp snooping information option allow-untrusted //设置汇聚交换机将接 收从非信任端口收到的接入交换机发来的带有选项 82 DHCP 报文

Switch#ip dhcp snooping binding 000f.1fc5.1008 vlan 10 192.168.10.131 interface fa0/2 expiry 692000 //特权模式命令;手工添加一条 DHCP 监听绑定条目;expiry 为时间值,即为监听绑定表中 的 lease(租期)

Switch(config)#ip dhcp snooping database flash:dhcp_snooping.db //DHCP 监听绑定表保存 在 flash 中,文件名为 dhcp_snooping.db
Switch(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,当更改保存位置 后会立即执行“写”操作。

Switch(config)#ip dhcp snooping database write-delay 30 //DHCP 监听绑定表发生更新后, 等待 30 秒,再写入文件,默认为 300 秒;可选范围为 15-86400
Switch(config)#ip dhcp snooping database timeout 60 //DHCP 监听绑定表尝试写入操作失败 后,重新尝试写入操作,直到 60 秒后停止尝试。默认为 300 秒;可选范围为 0-86400 秒 说明:实际上当 DHCP 监听绑定表发生改变时会先等待 write-delay 的时间,然后执行写入操作,如 果写入操作失败(比如 tftp 服务器不可达),接着就等待 timeout 的时间,在此时间段内不断重试 在 timeout 时间过后,停止写入尝试。但由于监听绑定表已经发生了改变,因此重新开始等待 write-delay 时间执行写入操作??不断循环,直到写入操作成功。

Switch#renew ip dhcp snooping database flash:dhcp_snooping.db //特权级命令;立即从保存好 的数据库文件中读取 DHCP 监听绑定表。

五、显示 DHCP Snooping 的状态

Switch#show ip dhcp snooping //显示当前 DHCP 监听的各选项和各端口的配置情况

Switch#show ip dhcp snooping binding //显示当前的 DHCP 监听绑定表
Switch#show ip dhcp snooping database //显示 DHCP 监听绑定数据库的相关信息
Switch#show ip dhcp snooping statistics //显示 DHCP 监听的工作统计
Switch#clear ip dhcp snooping binding //清除 DHCP 监听绑定表;注意:本命令无法对单一条 目进行清除,只能清除所有条目
Switch#clear ip dhcp snooping database statistics //清空 DHCP 监听绑定数据库的计数器 Switch#clear ip dhcp snooping statistics //清空 DHCP 监听的工作统计计数器


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