1、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 Interfac
2、e 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交换机相连 Cisco
3、2621 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
4、地址从特定的地址池,它可以是一个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 Bi
5、nding 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的untrus
6、ted 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的M
7、AC,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 Packe
8、ts: 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
9、 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命令,进行
10、实现跨网段的转发DHCP消息从clients到server。 |————————| | DHCP SERVER | |————————| | | |——————————| | Catalyst Switch |
11、Access Layer,DHCP Relay Agent) |——————————| / \ / \ / \ |---------------------------| | / vlan10 \ |
12、 | 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消
13、息主要包括: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,
14、或全部字段去分配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包到原
15、来请求这个reply的client所在的switch port。 8> Circuit ID Suboption Frame Format: +----------------------------------------------------------------+ | 1 | 6 | 0 | 4 | VLAN | Module | Port | +----------------------------------------------------------------+ 1byte 1byte
16、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) modul
17、e slot0/1,port28是SFP module slot0/2。 Remote ID Suboption Frame Format: +----------------------------------------------------------------+ | 2 | 8 | 0 | 6 | MAC address | +----------------------------------------------------------------+ 1byte 1byte
18、 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来存储关于
19、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为一个文件形式到一配置好的指定位置。switc
20、h在当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:
21、
VERSION 1
BEGIN
22、N 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的checks
23、um,查看它们是否匹配,如果匹配,则读取它们到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 Snoo
24、ping-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)自动学习
25、获得。 静态配置是一种简单而固定的方式,但灵活性很差,因此建议用户最好结合DHCP Snooping技术使用IP Source Guard,由DHCP监听绑定表生成IP源绑定表。 交换机根据DHCP监听绑定表的内容自动生成IP源绑定表,然后IOS根据IP源绑定表里面的内容自动在接口加载基于端口的VLAN ACL(PVACL),由该ACL(可以称之为源IP地址过滤器)来过滤所有IP流量。客户端发送的IP数据包中,只有其源IP地址满足源IP绑定表才会被发送,对于具有源IP绑定表之外的其他源IP地址的流量,都将被过滤。 PC没有发送DHCP请求时,其连接的交换机端口默认拒绝除了D
26、HCP请求之外的所有数据包,因此PC使用静态IP是无法连接网络的(除非已经存在绑定好的源IP绑定条目,如静态源IP绑定条目或者是之前已经生成的动态IP绑定条目还没过期,而且PC还必须插在正确的端口并设置正确的静态IP地址)。 IP源防护只支持第2层端口,其中包括接入(access)端口和干道(trunk)接口。IP源防护的信任端口/非信任端口也就是DHCP监听的信任端口/非信任端口。对于非信任端口存在以下两种级别的IP流量安全过滤: 源IP地址过滤:根据源IP地址对IP流量进行过滤,只有当源IP地址与IP源绑定条目匹配,IP流量才允许通过。当端口创建、 修改、 删除新的IP
27、源绑定条目的时候,IP源地址过滤器将发生变化。为了能够反映IP源绑定的变更,端口PACL将被重新修改并重新应用到端口上。 默认情况下,如果端口在没有存在IP源绑定条目的情况下启用了IP源防护功能,默认的PACL将拒绝端口的所有流量(实际上是除 DHCP报文以外的所有IP流量)。 源IP和源MAC地址过滤:根据源IP地址和源MAC地址对IP流量进行过滤,只有当源IP地址和源MAC地址都与IP源绑定条目匹配,IP流量才允许通过。当以IP和MAC地址作为过滤的时候,为了确保DHCP协议能够正常的工作,还必须启用DHCP监听选项82。 对于没有选项82的数据,交换机不能确定用于转发DHCP服
28、务器响应的客户端主机端口。相反地,DHCP服务器响应将被丢弃,客户机也不能获得IP地址。 注:交换机使用端口安全(Port Security)来过滤源MAC地址。 当交换机只使用“IP源地址过滤”时,IP源防护功能与端口安全功能是相互独立的关系。 端口安全是否开启对于IP源防护功能来说不是必须的。 如果同时开启,则两者也只是一种宽松的合作关系,IP源防护防止IP地址欺骗,端口安全防止MAC地址欺骗。而当交换机使用“源IP和源MAC地址过滤”时,IP源防护功能与端口安全功能是就变成了一种“集成”关系,更确切的说是端口安全功能被集成到 IP源防护功能里,作为IP源防护的一个必须的组成部
29、分。 在这种模式下,端口安全的违规处理(violation)功能将被关闭。对于非法的二层报文,都将只是被简单的丢弃,而不会再执行端口安全的违规处理了。IP源防护功能不能防止客户端PC的ARP攻击。ARP攻击问题必须由DAI功能来解决。 IPSG只对非信任端口起作用,对信任端口不起作用。 如果PC客户端更换了交换机端口,由于客户端会再次发起DHCP请求,这将会引起交换机更新DHCP监听条目。DHCP监听条目的更新会导致IP源绑定条目的更新,所以IP源地址过滤器也将随着更新,以适应PC客户端的实际情况。 如果PC客户端不更换端口,但要改成静态IP地址,它只能改成与动态获得的IP地址
30、一样的IP地址,这一举动是可行的。但客户端不再会发出DHCP请求来更新租约,因此随着DHCP监听条目超时后,还是会被阻止通信。 客户端不更换端口,但更改为与动态获得的IP地址不一样的静态IP地址,或者更改为同样的静态IP但接在了不一样的端口上,都将会立即被阻止通信。 3.5. Dynamic ARP Inspection Dynamic ARP Inspection (DAI)在交换机上提供IP地址和MAC地址的绑定, 并动态建立这种绑定关系。DAI 以 DHCP Snooping绑定表为基础,对于没有使用DHCP的服务器个别机器可以采用静态添加绑定实现。DAI根据绑定表来检查m
31、ac地址和ip地址的合法性。DAI对于dhcp-snooping的绑定表中关于端口部分,是不做检测的;同时对于已存在于绑定表中的mac和ip对应关系的主机,不管是dhcp获得,还是静态指定,只要符合这个表就可以了。如果表中没有就阻塞相应流量。ARP inspection只用来检测arp请求的,防止非法的ARP请求,对其他请求不进行检查,如果要检查其他请求,需要使用IP Source Guard。利用这个方法,将会使得静态指定IP的机器无法访问网络,防止用户任意修改IP地址,造成地址冲突的问题;另外DAI还可以解决ARP欺骗和中间人攻击。 4. 配置示例 4.1. 案例1 描述:在cisc
32、o3560上配置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被关闭:
33、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 f
34、eature不能被支持。 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都有一个存储能力的限
35、制,所以推荐使用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 Sno
36、oping功能 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 #使由于
37、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 #设置汇聚
38、交换机将接收从非信任端口收到的接入交换机发来的带有选项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中,保存后的文件名为d
39、hcp_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秒后停止尝试。默认为
40、300秒;可选范围为0-86400秒 说明:实际上当DHCP监听绑定表发生改变时会先等待write-delay的时间,然后执行写入操作,如果写入操作失败(比如tftp服务器不可达),接着就等待timeout的时间,在此时间段内不断重试。在timeout时间过后,停止写入尝试。但由于监听绑定表已经发生了改变,因此重新开始等待write-delay时间执行写入操作,不断循环,直到写入操作成功。 Switch(config)# interface gi0/15 #选择连接DHCP服务器的交换机端口,进入该端口的配置模式 Switch(config-if)# ip dhcp snooping
41、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
42、 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 #显示关于此switc
43、h配置的关于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目前不支持
44、该功能。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 l
45、og-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攻击,从而将端口自动errdisa
46、ble,造成通信中断。为了解决这个问题,我们需要加入命令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
47、/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信息是否与
48、 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: S
49、tatic 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
50、被启用,那么接口上的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






