资源描述
IP DHCP Snooping 和 Ip Source Guard、 DAI
1. 目的
为了配合使用公司的dhcp enforcement准入控制组件,强制终端电脑用dhcp来获取IP,并使用内部网络。为了防止终端用户通过手动设置IP来绕过DHCP,必须在交换机上配合使用IP DHCP Snooping、IP Source Guard、或DAI(dynamic arp inspection)技术,使得手动设置IP的终端电脑无法使用网络。
2. 环境
如下图
其中:
Cisco3560
Interface Vlan 68 ->192.168.1.254
Interface Vlan 69 ->192.168.2.254
Interface Vlan 70 ->192.168.3.254
Interface Vlan 80 ->192.168.80.254
为测试环境的核心交换机,所有网段的网关在此交换机上,此交换机采用802.1q与其他交换机相连
Cisco3550
Interface Vlan 80 ->192.168.80.250
此交换机采用802.1q与cisco3560交换机相连
H3c3952
Interface Vlan 68 ->192.168.1.252
此交换机采用802.1q与cisco3560交换机相连
Cisco2621
Interface fa0/0 ->192.168.80.253
Interface fa0/1 ->192.168.82.254
此路由器一个端口连接cisco3550,一个端口连接2950
Cisco2950
Interface Vlan 82 ->192.168.82.253
此交换机采用802.1q与cisco3550交换机相连
PC1
192.168.3.2
PC2
192.168.2.25
PC3
192.168.80.1
PC4
192.168.82.1
3. 原理介绍
3.1. DHCP Server
用于管理分配IP地址从特定的地址池,它可以是一个PC/ROUTER/SWITCH。
3.2. DHCP Relay Agent
一个用于在DHCP SERVER与DHCP Client之间转发DHCP Packets的中间三层设备。它主要应用于DHCP SERVER与Client端在不同的子网时,临时作为一个代理,在它们之间传递数据包。DHCP Relay Agent的中继转发不同与一般的二层转发,它在收到一个DHCP消息时,会生成一个新的DHCP消息同时发送到外出接口。
3.3. DHCP Snooping
一种DHCP安全特性,通过监听DHCP流量,来建立和维护一个DHCP Snooping Binding Database/Table,并且过滤untrusted DHCP消息。连接在交换机上的所有PC都配置为动态获取IP地址,PC作为DHCP客户端通过广播发送DHCP请求,DHCP服务器将含有IP地址信息的DHCP回复通过单播的方式发送给DHCP客户端,交换机从DHCP报文中提取关键信息(包括IP地址,MAC地址,vlan号,端口号,租期等),并把这些信息保存到 DHCP 监听绑定表中。
DHCP Snooping就像是运行在untrusted hosts与DHCP SERVER之间的一个firewall一样。使用DHCP Snooping可以将连接到end user的untrusted interfaces与连接到DHCP SERVER或其它switch的trusted interfaces区别开来。DHCP Snooping的一个主要作用是确保DHCP Server的合法性,对不合法的DHCP Server进行隔离。
为了使DHCP Snooping特性正常的工作,首先所有连接合法DHCP SERVERS的interface都必须设置成trusted,而其他终端连接的端口设置成untrusted(一般默认都是untrusted)。DHCP Snooping Binding Database中包含关于本地switch的所有untrusted interfaces的MAC,IP,lease time,binding type,vlan number及interface消息等。它不存储关于trusted interfaces的任何消息。
当一个switch从一个untrusted interface接收到一个packet,并且此接口所属的VLAN配置了DHCP Snooping时,switch会将这个packet的source MAC address与DHCP Client端的hardware address相比较,默认情况下如果相同,switch就会转发这个packet,如果不相同,此包被丢弃。当下面几种情况发生时,switch会丢弃DHCP Packets:
1> 收到一个外部网络或firewall的DHCP SERVER发来的packet。
2> 从一个untrusted interface上接收到一个packet,并且source MAC address与DHCP client的hardware address不匹配。
3> switch接收到一个MAC address在DHCP Snooping Binding Database里的DHCPRELEASE或DHCPDECLINE广播包,但是Binding Database里的interface消息与接收到广播的接口的interface消息不匹配。
4> 一个DHCP Relay Agent在转发一个DHCP packet的时候没有设置relay-agent ip address字段为0.0.0.0;或是Relay Agent转发了一个包含option-82消息的packets到一个untrusted port。
Option-82 Data Insertion:当DHCP option-82 feature在switch上启用时,一个用户设备(subscriber device)通过连接到switch的port和它自己的MAC地址被唯一的标识。DHCP Relay Agent(一般由switch或router来实现)被配置一个helper address命令,进行实现跨网段的转发DHCP消息从clients到server。
|————————|
| DHCP SERVER |
|————————|
|
|
|——————————|
| Catalyst Switch | (Access Layer,DHCP Relay Agent)
|——————————|
/ \
/ \
/ \
|---------------------------|
| / vlan10 \ |
| pc1 pc2 |
|(DHCP Client) (DHCP Client)|
|---------------------------|
当在switch上启用DHCP Snooping option-82后,下列事件会顺序发生:
1> DHCP client产生一个DHCP request包,并广播到网络上。
2> 当switch收到DHCP request后,它添加一个option-82信息到这个request包内。option-82消息主要包括:the remote ID suboption(switch MAC address),the circuit ID suboption(接收到DHCP request的port identifier,vlan-mod-port)。同时,如果Relay Agent配置了IP地址,它也会在request包中插入它自己的IP地址。
3> switch转发这个包括了option-82字段的DHCP request包给DHCP server。
4> DHCP server收到这个包后,如果server支持option-82特性的话,它会参考这些remote ID或circuit ID,或全部字段去分配IP地址及实现策略,例如可以限制分给有特定remote ID或circuit ID的设备的IP地址。然后,DHCP server复制收到的request的option-82字段到它的DHCP reply包内,并发送。
5> 如果request包是由Relay Agent中转发送过来的,那DHCP server会单播回复这个请求。
6> switch通过检测reply包内的remote ID和circuit ID字段来验证它原来插入的option-82数据,进而决定将reply转发出哪个接口。
7> switch移除option-82字段消息,然后转发这个replay包到原来请求这个reply的client所在的switch port。
8> Circuit ID Suboption Frame Format:
+----------------------------------------------------------------+
| 1 | 6 | 0 | 4 | VLAN | Module | Port |
+----------------------------------------------------------------+
1byte 1byte 1byte 1byte 2bytes 1byte 1byte
Suboption Length Circuit
type ID type
Circuit ID suboption内的port字段,port number是从3开始的。例如:Catalyst 3560-24PS switch,port3是FastEthernet0/1,port4是FastEthernet0/2,port5是FastEthernet0/3等……
port27是Small Form-factor pluggable(SFP) module slot0/1,port28是SFP module slot0/2。
Remote ID Suboption Frame Format:
+----------------------------------------------------------------+
| 2 | 8 | 0 | 6 | MAC address |
+----------------------------------------------------------------+
1byte 1byte 1byte 1byte 6byte
Suboption Length Remote Length
type ID type
注:只有在当DHCP Snooping被全局的启用,且当ip dhcp snooping information option全局配置命令被启用时,switch才会使用这些packet formats。
DHCP Binding Database:当DHCP Snooping开启时,switch开始使用DHCP Snooping Binding Database来存储关于untrusted interfaces的信息,它可以存储最多512个bindings。每一个database entry(binding)有一个IP地址,一个相关的MAC地址,lease time(16进制形式),这个binding应用到哪个接口,以及接口属于哪个VLAN。每一个entry大小都是72 bytes,后而跟一空格,其次是checksum value。为了使Switch在重启后还能保留这个binding database,必须使用DHCP Snooping database agent。database agent存储bindings为一个文件形式到一配置好的指定位置。switch在当binding database改变时都会更新database agent文件,从而使它保存最新的信息。binding database和database agent file的更新频率是基于配置的delay,且更新是成批的。如果binding database和database agent file在一个时间段(set by the write-delay and abort-timeout values)没有得到更新,则更新停止。
Binding database agent file format:
<initial-checksum>
TYPE DHCP-SNOOPING
VERSION 1
BEGIN
<entry-1> <checksum-1>
<entry-2> <checksum-1-2>
...
...
<entry-n> <checksum-1-2-..-n>
END
注:文件中的每一个entry都附属一个checksum值,switch在读这个文件的时候会检验这个checksum。
第一行的initial-checksum条目用来区别上一次更新的entries和最后一新更新的entries。
binding agent file实例:
3ebe1518
TYPE DHCP-SNOOPING
VERSION 1
BEGIN
1.1.1.1 512 0001.0001.0005 3EBE2881 Gi0/1 e5e1e733
1.1.1.1 512 0001.0001.0002 3EBE2881 Gi0/1 4b3486ec
1.1.1.1 1536 0001.0001.0004 3EBE2881 Gi0/1 f0e02872
1.1.1.1 1024 0001.0001.0003 3EBE2881 Gi/1 ac41adf9
1.1.1.1 1 0001.0001.0001 3EBE2881 Gi0/1 34b3273e
END
当switch开机启动时,它会计算每个entries的checksum,查看它们是否匹配,如果匹配,则读取它们到DHCP Snooping Binding Database,当下列情况发生时,switch会忽略这个entry:
1> switch计算的checksum值与entry后的checksum值不匹配,则这条entry及它以后的条目都被忽略。
2> 该entry的lease time已经过期了,此时Switch可能不会从binding file里移除这个entry。
3> 该entry中指定的interface已经不存在于系统内了。
4> 该entry中指定的interface是一个routed interface,或是一个DHCP Snooping-trusted interface。
3.4. IP Source Guard
IP源防护(IP Source Guard,简称IPSG)。在交换机内部有一个IP源绑定表(IP Source Binding Table)作为每个端口接受到的数据包的检测标准,只有在两种情况下,交换机会转发数据,其余数据包将被交换机做丢弃处理:
Ø 所接收到的IP包满足IP源绑定表中Port/IP/MAC的对应关系
Ø 所接收到的是DHCP数据包
IP源绑定表可以由用户在交换机上静态添加,或者由交换机从DHCP监听绑定表(DHCP Snooping Binding Table)自动学习获得。 静态配置是一种简单而固定的方式,但灵活性很差,因此建议用户最好结合DHCP Snooping技术使用IP Source Guard,由DHCP监听绑定表生成IP源绑定表。
交换机根据DHCP监听绑定表的内容自动生成IP源绑定表,然后IOS根据IP源绑定表里面的内容自动在接口加载基于端口的VLAN ACL(PVACL),由该ACL(可以称之为源IP地址过滤器)来过滤所有IP流量。客户端发送的IP数据包中,只有其源IP地址满足源IP绑定表才会被发送,对于具有源IP绑定表之外的其他源IP地址的流量,都将被过滤。
PC没有发送DHCP请求时,其连接的交换机端口默认拒绝除了DHCP请求之外的所有数据包,因此PC使用静态IP是无法连接网络的(除非已经存在绑定好的源IP绑定条目,如静态源IP绑定条目或者是之前已经生成的动态IP绑定条目还没过期,而且PC还必须插在正确的端口并设置正确的静态IP地址)。
IP源防护只支持第2层端口,其中包括接入(access)端口和干道(trunk)接口。IP源防护的信任端口/非信任端口也就是DHCP监听的信任端口/非信任端口。对于非信任端口存在以下两种级别的IP流量安全过滤:
源IP地址过滤:根据源IP地址对IP流量进行过滤,只有当源IP地址与IP源绑定条目匹配,IP流量才允许通过。当端口创建、 修改、 删除新的IP源绑定条目的时候,IP源地址过滤器将发生变化。为了能够反映IP源绑定的变更,端口PACL将被重新修改并重新应用到端口上。 默认情况下,如果端口在没有存在IP源绑定条目的情况下启用了IP源防护功能,默认的PACL将拒绝端口的所有流量(实际上是除 DHCP报文以外的所有IP流量)。
源IP和源MAC地址过滤:根据源IP地址和源MAC地址对IP流量进行过滤,只有当源IP地址和源MAC地址都与IP源绑定条目匹配,IP流量才允许通过。当以IP和MAC地址作为过滤的时候,为了确保DHCP协议能够正常的工作,还必须启用DHCP监听选项82。 对于没有选项82的数据,交换机不能确定用于转发DHCP服务器响应的客户端主机端口。相反地,DHCP服务器响应将被丢弃,客户机也不能获得IP地址。
注:交换机使用端口安全(Port Security)来过滤源MAC地址。
当交换机只使用“IP源地址过滤”时,IP源防护功能与端口安全功能是相互独立的关系。 端口安全是否开启对于IP源防护功能来说不是必须的。 如果同时开启,则两者也只是一种宽松的合作关系,IP源防护防止IP地址欺骗,端口安全防止MAC地址欺骗。而当交换机使用“源IP和源MAC地址过滤”时,IP源防护功能与端口安全功能是就变成了一种“集成”关系,更确切的说是端口安全功能被集成到 IP源防护功能里,作为IP源防护的一个必须的组成部分。
在这种模式下,端口安全的违规处理(violation)功能将被关闭。对于非法的二层报文,都将只是被简单的丢弃,而不会再执行端口安全的违规处理了。IP源防护功能不能防止客户端PC的ARP攻击。ARP攻击问题必须由DAI功能来解决。
IPSG只对非信任端口起作用,对信任端口不起作用。
如果PC客户端更换了交换机端口,由于客户端会再次发起DHCP请求,这将会引起交换机更新DHCP监听条目。DHCP监听条目的更新会导致IP源绑定条目的更新,所以IP源地址过滤器也将随着更新,以适应PC客户端的实际情况。
如果PC客户端不更换端口,但要改成静态IP地址,它只能改成与动态获得的IP地址一样的IP地址,这一举动是可行的。但客户端不再会发出DHCP请求来更新租约,因此随着DHCP监听条目超时后,还是会被阻止通信。
客户端不更换端口,但更改为与动态获得的IP地址不一样的静态IP地址,或者更改为同样的静态IP但接在了不一样的端口上,都将会立即被阻止通信。
3.5. Dynamic ARP Inspection
Dynamic ARP Inspection (DAI)在交换机上提供IP地址和MAC地址的绑定, 并动态建立这种绑定关系。DAI 以 DHCP Snooping绑定表为基础,对于没有使用DHCP的服务器个别机器可以采用静态添加绑定实现。DAI根据绑定表来检查mac地址和ip地址的合法性。DAI对于dhcp-snooping的绑定表中关于端口部分,是不做检测的;同时对于已存在于绑定表中的mac和ip对应关系的主机,不管是dhcp获得,还是静态指定,只要符合这个表就可以了。如果表中没有就阻塞相应流量。ARP inspection只用来检测arp请求的,防止非法的ARP请求,对其他请求不进行检查,如果要检查其他请求,需要使用IP Source Guard。利用这个方法,将会使得静态指定IP的机器无法访问网络,防止用户任意修改IP地址,造成地址冲突的问题;另外DAI还可以解决ARP欺骗和中间人攻击。
4. 配置示例
4.1. 案例1
描述:在cisco3560上配置IP DHCP Snooping,DAI,IPSG观察使用效果。
配置步骤:
(1) 在cisco3560交换机上启用IP DHCP Snooping
配置指引
1> 必须在switch上全局启用DHCP Snooping。
2> DHCP Snooping在VLAN上启用后才会active。
3> 在switch上配置全局启用DHCP Snooping之前,确保作为DHCP server和DHCP Relay Agent的设备已经配置好,并启用了。
4> 下列命令在switch上全局配置DHCP Snooping后不能使用,直到DHCP Snooping被关闭:ip dhcp relay information check 全局配置命令
ip dhcp relay information policy 全局配置命令
ip dhcp relay information trust-all 全局配置命令
ip dhcp relay information trusted 接口配置命令
5> 在配置switch为一个DHCP Relay Agent时,必须确保DHCP server已经配置完成。
6> 如果DHCP Relay Agent被启用,但是DHCP Snooping被关闭,DHCP option-82 data insertion feature不能被支持。
7> 如果一个switch port连接到一个DHCP server,则需要通过输入接口配置命令ip dhcp snooping trust来配置那个port为一个trusted interface。
8> 如果一个switch port连接到一个DHCP client,则需要通过输入接口配置命令no ip dhcp snooping trust来配置那个port为一个untrusted interface。
9> 当配置DHCP Snooping Binding Database时要注意:
-- 因为NVRAM和flash memory都有一个存储能力的限制,所以推荐使用TFTP server来存放binding file。
-- 在使用基于网络的URLs(如TFTP,FTP)时,首先必须在那个URL下建立一个空的文件,以使Switch可以完成对那个URL下的文件的初始化写入。
-- 确保database内的lease time的精确性,所以推荐使用配置使用NTP。
-- 如果NTP没有配置,则switch只在switch system clock与NTP同步后,才将bindings的变化写入binding file。
Example:
Switch(config)# ip dhcp snooping
#打开DHCP Snooping功能
Switch(config)# ip dhcp snooping vlan 69-70
#设置DHCP Snooping功能将作用于哪些VLAN,此处启用VLAN69,70两个VLAN的IP DHCP Snooping功能
Switch(config)# ip dhcp snooping verify mac-adress
#检测非信任端口收到的DHCP请求报文的源MAC和CHADDR字段是否相同,以防止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(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服务器地址,保存在文件夹switch中,保存后的文件名为dhcp_snooping.db,当更改保存位置后会立即执行“写”操作。(DHCP Snooping绑定表可以保存到flash中,也可以保存到tftp服务器上,选择一个即可)
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(config)# interface gi0/15
#选择连接DHCP服务器的交换机端口,进入该端口的配置模式
Switch(config-if)# ip dhcp snooping trust
#配置接口为DHCP监听特性的信任接口,所有接口默认为非信任接口
Switch(config)# interface gi0/6
#选择连接PC1的交换机端口(untrusted port),进入该端口的配置模式
Switch(config-if)# ip dhcp snooping limit rate 15
#限制非信任端口的DHCP报文速率为每秒15个包(默认即为每秒15个包)如果不配该语句,则show ip dhcp snooping的结果里将不列出没有该语句的端口,可选速率范围为1-2048
另外,如果需要手动配置绑定表条目,可用如下命令完成:
Switch# ip dhcp snooping binding 000f.1fc5.1008 vlan 70 192.168.3.131 interface fa0/2 expiry 692000
#手工添加一条DHCP监听绑定条目;expiry为时间值,即为监听绑定表中的lease(租期)
注:如果DHCP Snooping被启用了,并且interface状态变为down,则switch不会删除手工静态配置的bindings。
至此,DHCP Snooping的配置就完成了。
查看IP DHCP Snooping信息
show ip dhcp snooping
#显示关于此switch配置的关于DHCP Snooping的信息
show ip dhcp snooping binding
#只显示DHCP Snooping Binding Dabase里动态配置的bindings,即binding table。
show ip dhcp snooping database
#显示DHCP snooping binding database状态及摘要。
show ip source binding
#显示动态和静态配置的bindings。
(2) 在cisco3560交换机上启用DAI
如果要支持IP源防护功能,必须是35系列及以上的交换机。2960目前不支持该功能。DAI配置针对VLAN,对于同一VLAN内的接口可以开启DAI也可以关闭。通过DAI可以控制某个端口的ARP请求报文数量。
Example:
Switch(config)# ip arp inspection vlan
年
#定义arp inspection 作用的vlan,此处定义的是VLAN 69,VLAN70
Switch(config)# ip arp inspection validate src-mac dst-mac ip
#侦测有效客户端须满足src-mac,dst-mac,ip均正确
Switch(config)# ip arp inspection log-buffer entries 1024
#设置inspection 日志大小
Switch(config)# ip arp inspection log-buffer logs 1024 interval 300
#设置inspection 日志刷新时间,如果interval太小会占用大量cpu时间
Switch(config)# errdisable recovery cause arp-inspection
#在开始应用Dynamic ARP Inspection时,交换机会记录大量的数据包,当端口通过的数据包过多时,交换机会认为遭受DoS攻击,从而将端口自动errdisable,造成通信中断。为了解决这个问题,我们需要加入命令errdisable recovery cause arp-inspection
Switch(config)# errdisable recovery interval 30
#设置由于配置了arp inspection导致端口错误的恢复时间
Switch(config)# logging on
#当logging关闭时会占用大量cpu资源,一定勿忘打开
Switch(config)# ip source binding 0004.76f6.e3e9 vlan 315 10.63.150.100 interface Gi1/0/11
#手动增加静态地址的条目
Switch(config)# interface GigabitEthernet0/6
#进入端口配置模式
Switch(config-if)# ip arp inspection limit none
#由于下连设备,为了避免inspection让端口errdisable,所以对arp的侦测不做限制,若直接为接入设备, 可使用ip arp inspection limit rate 100
查看DAI信息
sh logging
#查看Dymatic Arp Inspection (DAI) 是否生效.
sh arp
#看arp信息是否与 dhcp snooping binding表一致
(3) 在cisco3560交换机上启用IPSG
DAI和IPSG只需要启动一个就可以了,不必同时在一台交换机上启用。
配置指引
1> 默认IP Source Guard是被启用的。
2> 只可以在非路由ports上配置static ip bindings。如果在一个routed interface上使用全局配置命令:ip source binding {mac-address} vlan {vlan-id} {ip-address} interface {interface-id}
会导致一个error message:
Static IP source binding can only be configured on switch port.
3> 当IP Source Guard with source IP filtering被启用在一个VLAN上,DHCP Snooping必须被启用在所有属于那个ACCESS VLAN的接口上。
4> 当在一个Trunk interface上启用IP Source Guard,且DHCP Snooping被应用于所有VLANs时,source IP address过滤被应用到所有的VLANs上。
5> 当使用源IP和源MAC地址过滤的IP Source Guard被启用,那么接口上的DHCP Snooping和port Security也必须被启用。
6> 当配置IP Source Guard在一个属于private VLAN的接口上时,port security无效。
7> 可以将此feture与802.1x port-based authentication一同使用。
8> 当ternary content addressable memory(TCAM) entries数目超最大可用值时,CPU的使用量会增加。
Example:
Switch# configure terminal
#进入配置模式
Switch(config)# i
展开阅读全文