1      如何保证CPU正常运转?

控制上送CPU的报文数量是保证CPU正常运转的重要方法,交换机提供下面几种方式来控制上送CPU的报文数量。

1.1      设置合理限速值

Ø  对上送CPU的报文设置合理的CPCAR

CPCAR全称Control Plane Committed Access Rate,作用是对需要上送CPU的报文进行限速。

1 交换机CPCAR限速机制

20161212162853946001.png

交换机CPCAR的限速机制如图1所示,分为三个维度:基于协议、基于队列和基于所有报文。具体实现机制见表1

1 CPCAR限速实现机制

维度

实现机制

基于协议限速

对每种上送CPU的协议报文单独设置限速值。

交换机有默认限速值,也可以手动配置。

基于队列的调度和限速

将协议进行分类,一类协议分配到一个队列中,例如TelnetSSH这些管理类协议分为一个队列,路由协议分为一个队列等等,然后根据队列再进行调度和限速。

交换机可以通过display cpu-defend configuration slot命令查看设备队列及队列中的协议类型。

交换机有默认限速值,不允许手动修改配置。

所有报文统一限速

CPU处理的报文总数统一进行限速。

交换机有默认限速值,不允许手动修改配置。

 

缺省情况下,交换机已经对常见的上送CPU的报文设置了CPCAR值,可以通过display cpu-defend configuration all命令进行查看。在现网环境中,可以根据实际需求进行调整。注意:调整CPCAR不当将会影响网络业务,如需调整CPCAR,建议联系技术支持人员。

基于协议进行CPCAR限速时,需要设置两个属性:

l  阈值:每个对象所对应的上送CPU报文的最大速率(CIRCBS)。

CIR指的是报文在一段时间内上送到CPU的平均速率,可以理解为均值速率。CBS指的是一次上送到CPU的报文的最大数目,可以理解为CPU能允许的突发值。

l  惩罚措施:上送CPU的报文速率超过了阈值时设备所采取的动作(丢弃)。

举个例子来看:为了防止ARP***,设置上送CPUARP Request报文的CIR64kbit/sCBS33000byte,丢弃超过阈值的报文。

[Switch-cpu-defend-policy-test] car packet-type arp-request cir 64 cbs 33000

这里阈值就是64kbit/sCIR33000byteCBS,惩罚措施采用默认的丢弃,即设备直接丢弃超过这个阈值的ARP Request报文。

Ø  通过设置ACL规则对用户自定义流设置CPCAR

交换机还支持通过设置ACL规则对用户自定义流进行限速。注意:

l  如果ACLrule配置为permit,则根据限速规则进行限速,丢弃超过阈值的报文。

l  如果ACLrule配置为deny,则直接丢弃命中这个ACL的报文。

配置方法如下:

1.     配置用户自定义流

[Switch] acl number 2001

[Switch-acl-basic-2001] rule permit source 192.168.32.1 0   //允许源IP192.168.32.1的报文通过

[Switch-acl-basic-2001] quit

[Switch] cpu-defend policy test

[Switch-cpu-defend-policy-test] user-defined-flow 2 acl 2001   //使用ACL 2001配置2号用户的自定义流

2.     设置阈值

[Switch-cpu-defend-policy-test] car user-defined-flow 2 cir 64 cbs 33000   //设置2号用户的CIRCBS值,丢弃源IP192.168.32.1的超过阈值的报文

[Switch-cpu-defend-policy-test] quit

3.     应用

[Switch] cpu-defend-policy test global   //在所有接口板上应用,否则防***策略不会生效

说明:不管是基于协议设置CPCAR,或是通过ACL规则对用户自定义流设置CPCAR,以及后面介绍的在防***视图下配置的功能,都需要应用防***策略后才能生效,后续配置方法中不再说明。

Ø  基于用户(即通过MAC地址)限制上送CPU的报文数

如果某个用户所处的环境有安全风险,经常发送过多的协议报文,此时可以基于用户的MAC地址限制其上送CPU的报文数。

配置方法如下:

[Switch] cpu-defend host-car enable   //全局使能用户级限速的功能,缺省情况下用户级限速功能已使能

[Switch] cpu-defend host-car mac-address 000a-000b-000c pps 20   //设置MAC地址为000a-000b-000c的用户上送CPU的报文阈值为20pps,每一种协议报文都是20pps

[Switch] cpu-defend host-car all    //设置对所有报文类型生效,目前包括ARP RequestARP ReplyNDDHCP RequestDHCPv6 Request802.1x等报文,具体请以设备支持情况为准

1.2      配置防***策略

除了限制上送CPU报文的数目外,为了保证CPU的正常运转,还可以预先配置防***策略。当上送CPU的报文数目超过协议阈值时,记录日志或执行惩罚动作。目前交换机支持基于端口维度进行防***。

端口防***是当某个端口在一段时间内上送CPU的协议报文过多,导致其他端口的协议报文无法正常上送CPU处理时,针对该端口进行防御的方法。

端口防***的处理流程如下图所示。

2 端口防***流程图

20161212162853309002.png

1)        报文解析

对上送CPU的协议报文基于端口进行解析。目前交换机支持统计的协议报文包括:ARP RequestARP ReplyDHCPICMPIGMPIP分片报文等,可以自行配置。

2)        流量分析

使用采样比的方式对上送CPU的报文流量进行统计。例如采样比为5,就是说每5个报文中会解析1个报文,如果这1个报文是从某个端口上送的某种协议报文,则认为这5个都是这个端口上送的这种协议报文。

注意:使用采样比进行统计存在一定的误差。采样比越小,统计越精确,对CPU的占用就越多,请根据实际情况酌情配置。交换机默认采样比是5

3)        ***识别

单位时间内若某个端口上送到CPU的某种协议报文超过指定的阈值,则认为该端口上这种协议报文存在***。

4)        限速处理

对识别出来的***报文进行处理:对于未超出检查阈值数量的报文一如低优先级队列后再上送CPU处理;对于超出检查阈值数量的报文,则直接丢弃。

检查到***后,还可以通过使能告警功能提醒管理员进行保护处理。

5)        减少对正常业务的影响

n  老化探测

设备检测到存在***的端口,就会在老化探测周期内(假设为T秒)对该端口的***报文持续限速处理。达到T秒之后,设备会重新基于端口进行报文解析。如果该值超过了检查阈值(即存在***),则继续对其进行限速处理;反之,则停止限速。

n  端口防***白名单

如果某种报文比较重要,不能进行端口防***检测和限速的处理,可以通过ACL规则把这种报文设置为端口防***白名单。报文被设置为端口防***白名单后,端口防***就不会再对该报文进行检测和限速。

可以按照下边方法配置端口防***功能:

[Switch] cpu-defend policy test

[Switch-cpu-defend-policy-test] auto-port-defend enable   //交换机缺省是使能的

[Switch-cpu-defend-policy-test] auto-port-defend protocol arp-reply   //覆盖式命令,最后一次配置的报文有效

[Switch-cpu-defend-policy-test] auto-port-defend sample 4   //配置协议报文的采样比为4

[Switch-cpu-defend-policy-test] auto-port-defend alarm enable

[Switch-cpu-defend-policy-test] auto-port-defend protocol arp-reply threshold 60   //配置ARP Reply报文的检查阈值为60pps

[Switch-cpu-defend-policy-test] auto-port-defend aging-time 350   //配置老化探测周期是350

[Switch] acl 2000

[Switch-acl-basic-2000] rule permit source 10.1.1.1 0

[Switch-acl-basic-2000] quit

[Switch] cpu-defend policy test

[Switch-cpu-defend-policy-test] auto-port-defend whitelist 1 acl 2000   //IP10.1.1.1的报文不进行端口防***处理

[Switch-cpu-defend-policy-test] auto-port-defend whitelist 1 interface gigabitethernet 0/0/1  //GE0/0/1端口上送的报文不进行端口防***处理

 

2      CPU高了怎么办?

导致CPU高最常见的原因可以分为:网络震荡、网络环路和网络***。

Ø  网络震荡指的是:网络频繁变动,CPU忙于处理网络切换事件,导致CPU占用率高。例如:STP震荡导致CPU不停的刷新MACARP表项,路由协议震荡导致CPU不停的进行路由协议的计算等。

Ø  网络环路指的是:网络组网成环时,设备上MAC表频繁漂移,同时广播风暴会造成大量协议报文上送CPU处理,导致CPU占用率高。

Ø  网络***指的是:网络中的主机或者设备通过发起大量的***报文,使CPU忙于处理这些***报文,导致设备CPU占用率高。

总结一下CPU高的根本原因就是两种:一是CPU要处理的事件过多;二是CPU要处理的报文过多。CPU要处理的事件过多,需要根据不同的事件分别进行处理。本篇主要介绍一下CPU要处理的报文过多导致CPU高时交换机的处理方法。

2.1      怎么判断是上送报文过多引起的CPU

1.         先清空上送CPU的报文统计信息

<Switch> reset cpu-defend statistics

2.         等待几秒,查看上送CPU的报文统计信息

<Switch> display cpu-defend statistics all

Statistics on slot 2:

-----------------------------------------------------------------------------

Packet Type         Pass(Bytes)  Drop(Bytes)   Pass(Packets)   Drop(Packets)

-----------------------------------------------------------------------------

dhcp-client         40800         35768          600               52600

根据这个回显内容可以看到,短短的几秒钟之内又有大量的DHCP Client报文被上送和丢弃。

2.2      正常业务导致上送CPU报文过多的处理方法

如果通过组网分析,发现上送CPU的报文过多是由于默认CPCAR值不合理导致的,可以通过调整CPCAR值减少上送CPU的报文数。

例如:设备默认上送CPUDHCP Client报文的CIR512kbit/s,而现网一段时间内期望的CIR256kbit/s,可以通过下面的命令进行调整。

[Switch] cpu-defend policy test

[Switch-cpu-defend-policy-test] car packet-type dhcp-client cir 256

在正常业务上送报文过多导致CPU高时,通过调整CPCAR可以降低CPU使用率。但是如果网络中确实有很多业务,通过调整CPCAR无法使CPU降低到合理范围内,则只能通过减少业务才能解决,与此同时还需要保护重要业务不受影响。

比如FTP协议,在没有文件传输的情况下,需要的带宽和CPU资源比较少,但当用户使用FTP传输文件时,就需要比较大的带宽。此时,我们就需要考虑FTP文件传输的应用,而不能单纯的通过降低FTP协议报文的CPCAR值来减少FTP协议对CPU的影响。交换机可以通过下面两种方式保证重要业务的正常运行。

2 重要业务的处理方式

处理方式

实现说明

配置动态链路保护功能

通过配置动态链路保护功能,可以保证重要业务在CPU高时仍然可以正常运行。例如:FTPSSHHTTPSTFTPTelnetBGPOSPF

配置动态链路保护的限速值后,基于协议的限速不再起作用。

配置白名单

通过创建白名单,把符合特定特征的报文纳入到白名单中,设备将优先处理匹配白名单特征的报文。

目前仅框式交换机支持配置白名单。

Ø   配置动态链路保护功能

[Switch] cpu-defend policy test

[Switch-cpu-defend-policy-test] linkup-car packet-type ftp cir 2048   //配置FTP协议建立时协议报文的CPCAR

[Switch-cpu-defend-policy-test] quit

[Switch] cpu-defend application-apperceive enable

[Switch] cpu-defend application-apperceive ftp enable   //使能FTP协议的动态链路保护功能

Ø   配置白名单

[Switch] acl 2000

[Switch-acl-basic-2000] rule permit source 10.1.1.1 0   //配置ACL规则,匹配报文的源IP10.1.1.1

[Switch-acl-basic-2000] quit

[Switch] cpu-defend policy test

[Switch-cpu-defend-policy-test] whitelist 1 acl 2002   //把匹配ACL2002的报文加入白名单

2.3      网络***导致上送CPU报文过多的处理方法

如果通过组网分析,发现上送CPU报文过多的原因是网络***引起的。此时,可以通过***溯源功能查找***源并进行处理,还支持通过配置黑名单丢弃***报文。

Ø   ***溯源

***溯源就是通过对上送CPU的报文进行分析统计,将超过阈值的报文判定为***报文,再根据***报文信息找出***源用户或者***源接口,最后通过日志或告警等方式通知管理员,或者直接丢弃***报文。

***溯源的原理与端口防***的原理是类似的,都是针对DOS的***进行防御。不同点是端口防***惩罚动作相比***溯源对业务影响较小,而且***溯源不仅可以基于端口进行防***,还可以查找到具体的***源(源IP/MAC),并针对特定的***源进行处理。

***溯源也可以分为5个过程。

3 ***溯源流程图

20161212162854312003.png

1)        报文解析

目前交换机默认会对802.1xARPDHCPDHCPv6ICMPICMPv6IGMPMLDNDTCPTelnet报文进行解析,可以手动调整。

交换机是如何解析报文的呢?交换机支持基于IP地址、MAC地址以及接口 VLAN三个维度进行报文解析。这三个维度被称为***溯源的模式,不同的模式有不同的应用场景。

l  针对三层报文的***,配置基于源IP地址进行溯源。

l  针对固定源MAC地址报文的***,配置基于源MAC地址进行溯源。

l  针对变换源MAC地址报文的***,配置基于接口和VLAN进行溯源。

2)        流量分析

和端口防***一样,使用采样比的方式对流量进行分析。

比如采样比为5,也就是说5个报文中会解析1个报文根据溯源模式进行分析,如果这1个报文符合溯源模式,则认为这5个报文都符合溯源模式,计入流量统计。反之,如果这1个报文不符合溯源模式,则认为这5个报文都不符合溯源模式。

3)        ***源识别

通过流量分析,认为超过设定阈值的报文属于***报文。通过报文解析,可以获取***源的具体信息。

例如:设置***溯源检测阈值为60pps,溯源模式为基于源IP地址。对于同一个源IP地址,如果上送CPUARP报文超过了60pps,则就认为该源IP地址的ARP报文是***报文。

4)        ***处理

交换机在识别出***源后,默认采取的动作是记录日志。交换机还支持配置告警和惩罚动作(包括丢弃报文和error down端口)。

5)        减少对正常业务的影响

和端口防***相似,如果希望无论是否存在***,都不对某些用户或接口进行***溯源,可以通过ACL规则把这些用户或接口设置为***溯源白名单。

可以按照如下方法配置***溯源:

[Switch-cpu-defend-policy-test] auto-defend protocol arp   //仅需要对上送CPUARP报文进行解析

[Switch-cpu-defend-policy-test] auto-defend trace-type source-ip   //配置溯源模式为基于源IP地址

[Switch-cpu-defend-policy-test] auto-defend attack-packet sample 2    //配置采样比为2

[Switch-cpu-defend-policy-test] auto-defend threshold 200   //配置检查阈值

[Switch-cpu-defend-policy-test] auto-defend alarm enable    //配置告警

[Switch-cpu-defend-policy-test] auto-defend action deny   //配置惩罚动作为丢弃报文

[Switch] acl 2000

[Switch-acl-basic-2000] rule permit source 10.1.1.1 0

[Switch-acl-basic-2000] quit

[Switch] cpu-defend policy test

[Switch-cpu-defend-policy-test] auto-defend enable

[Switch-cpu-defend-policy-test] auto-defend whitelist 1 acl 2000   //不对源IP地址是10.1.1.1的用户进行***溯源

[Switch-cpu-defend-policy-test] auto-defend whitelist 1 interface gigabitethernet 0/0/1  //不对GE0/0/1接口进行***溯源

Ø   黑名单

通过定义ACL来设置黑名单,匹配黑名单特征的报文将全部被丢弃,因此可以将已确定为***者的非法用户设置到黑名单中。黑名单的配置方法是:

[Switch] acl 2000

[Switch-acl-basic-2000] rule permit source 10.1.1.1 0

[Switch-acl-basic-2000] quit

[Switch] cpu-defend policy test

[Switch-cpu-defend-policy-test] blacklist 1 acl 2001   //IP地址是10.1.1.1报文将全部被丢弃

3      CPU安全控制综合举例

如图4所示,交换机下挂三个网段,接入了大量用户,因此SwitchCPU需要处理大量协议报文。如果网络中存在恶意***用户,发送大量的***报文,很容易就会导致CPU高,影响正常业务运行。Switch管理员提出以下需求:

Ÿ   实时了解CPU的安全状态,当CPU收到***时,能够及时感知到。

Ÿ   Switch上经常收到大量的ARP Request报文和ICMP报文,希望能够降低CPU的占用率。

Ÿ   Net1网段的安全性较差,网段内用户经常会发生***行为,希望能够阻止Net1网段用户接入网络。Net2网段用户为固定合法用户。

Ÿ   管理员经常需要以FTP方式上传文件到Switch,希望管理员主机与Swtich之间FTP数据能够可靠、稳定地传输。

4 CPU安全控制综合举例组网图

20161212162855524004.png

配置思路:

1.         配置***溯源检查、告警、惩罚功能,使设备在检查到***源时通过告警方式及时通知管理员,并能够对***源自动实施惩罚。

2.         Net2网段中的用户列入***溯源白名单,不对其进行***溯源分析和***溯源惩罚。

3.         Net1网段中的***者列入黑名单,禁止Net1网段用户接入网络。

4.         配置ARP Request报文的CPCAR值,将上送CPU处理的ARP Request报文的速率限制在更小的范围内,减少CPU因处理过多ARP Request报文对正常业务的影响。

5.         使能ICMP泛洪***防范功能,避免ICMP泛洪***。

6.         配置FTP协议建立连接时FTP报文上送CPU的速率限制(FTP协议的动态链路保护功能缺省情况下已使能,这里无需再次使能),实现管理员主机与Switch之间文件数据传输的可靠性和稳定性。

操作步骤:

1.       配置上送CPU报文的过滤规则

<Switch> system-view

[Switch] acl number 2001

[Switch-acl-basic-2001] rule permit source 10.1.1.0 0.0.0.255

[Switch-acl-basic-2001] quit

[Switch] acl number 2002

[Switch-acl-basic-2002] rule permit source 10.2.2.0 0.0.0.255

[Switch-acl-basic-2002] quit

2.       配置防***策略

[Switch] cpu-defend policy policy1  //创建防***策略

[Switch-cpu-defend-policy-policy1] auto-defend enable  //***溯源检查功能

[Switch-cpu-defend-policy-policy1] auto-defend alarm enable  //使能***溯源告警功能

[Switch-cpu-defend-policy-policy1] auto-defend whitelist 1 acl 2002  //配置***溯源白名单

[Switch-cpu-defend-policy-policy1] auto-defend action deny  //配置***溯源惩罚措施为丢弃***报文

[Switch-cpu-defend-policy-policy1] car packet-type arp-request cir 120  //配置ARP Request报文的CPCAR值为120kbit/s

[Switch-cpu-defend-policy-policy1] blacklist 1 acl 2001  //配置CPU防***黑名单

[Switch-cpu-defend-policy-policy1] linkup-car packet-type ftp cir 5000  //FTP协议建立连接时FTP报文上送CPU的速率限制为5000kbit/s

[Switch-cpu-defend-policy-policy1] quit

3.       全局应用防***策略

[Switch] cpu-defend-policy policy1 global

4.       使能ICMP防洪***防范,并限制ICMP泛洪报文接收的速率为15000kbit/s

[Switch] anti-attack icmp-flood enable

[Switch] anti-attack icmp-flood car cir 15000

[Switch] quit

5.       验证配置结果

# 查看***溯源的配置信息。

<Switch> display auto-defend configuration

-------------------------------------------------------------------------

 Name  : policy1

 Related slot : <0>

 auto-defend                      : enable

 auto-defend attack-packet sample : 5

 auto-defend threshold            : 60 (pps)

 auto-defend alarm                : enable

 auto-defend trace-type           : source-mac source-ip

 auto-defend protocol             : arp icmp dhcp igmp tcp telnet 8021x

 auto-defend action               : deny (Expired time : 300 s)

 auto-defend whitelist 1          : acl number 2002

 -------------------------------------------------------------------------

# 查看配置的防***策略的信息。

<Switch> display cpu-defend policy policy1

 Related slot : <0>

Configuration :

   Blacklist 1 ACL number : 2001

   Car packet-type arp-request : CIR(120)  CBS(22560)

   Linkup-car packet-type  ftp : CIR(5000)  CBS(940000)

# 查看配置的CPCAR的信息。

<Switch> display cpu-defend configuration packet-type arp-request slot 0

Car configurations on slot 0.

----------------------------------------------------------------------

Packet Name           Status   Cir(Kbps)   Cbs(Byte)  Queue  Port-Type

----------------------------------------------------------------------

arp-request          Enabled    120          22560       3       NA         

----------------------------------------------------------------------

# 查看ICMP报文***防范的统计数目。

<Switch> display anti-attack statistics

Packets Statistic Information:                                                 

-------------------------------------------------------------------------

AntiAtkType  TotalPacketNum        DropPacketNum         PassPacketNum         

             (H)        (L)        (H)        (L)        (H)        (L)        

-------------------------------------------------------------------------

URPF          0          0          0          0          0          0

Abnormal      0          0          0          0          0          0

Fragment      0          0          0          0          0          0

Tcp-syn       0          0          0          0          0          0

Udp-flood     0          0          0          0          0          0

Icmp-flood    0          0          0          0          0          0

-------------------------------------------------------------------------