【现象描述】
场景一:禁止PC访问S系列交换机

如上图所示,PC 1和PC 2加入VLAN 10,PC 3和PC 4加入VLAN20,交换机Switch A下挂二层交换机做二层透传,交换机Switch A上配置接口VLANIF 10和VLANIF 20,所有的终端之间都互通。
现在希望PC 1可以访问VLAN 10内的所有终端(例如PC 2),但不能访问其他VLAN内的终端(例如PC 3和PC 4),也不能访问交换机(例如Switch A)。按照如下示例配置Switch A后,发现VLAN 10内的终端不能访问VLAN 20内的终端,但VLAN 10内的终端可以ping通Switch A。
#
acl number 3001
rule 5 permit ip source 192.168.10.0 0.0.0.255 destination 192.168.20.0 0.0.0.255
rule 10 permit ip source 192.168.10.0 0.0.0.255 destination 192.168.10.3 0
#
traffic classifier c1 operator or precedence 5
if-match acl 3001
#
traffic behavior b1
deny
#
traffic policy p1 match-order config
classifier c1 behavior b1
#
interface GE0/0/1
traffic-policy p1 inbound
#
场景二:只允许交换机的1个VLANIF接口地址做管理地址

如上图所示,SwitchA上有多个VLANIF接口(例如VLANIF 10和VLANIF 20)。现在只希望VLANIF 10的地址(192.168.10.3)作为管理地址,该地址用于Telnet登录,其他VLANIF接口的地址(192.168.20.3)不能用于Telnet登录。按照如下示例,配置SwitchA后,发现VLAN10内的终端仍然可以ping通其他VLANIF接口的地址(192.168.20.3)。
#
acl number 3001
rule 5 permit tcp destination 192.168.20.3 0 destination-port eq telnet
#
traffic classifier c1 operator or precedence 5
if-match acl 3001
#
traffic behavior b1
deny
#
traffic policy p1 match-order config
classifier c1 behavior b1
#
interface GE0/0/1
traffic-policy p1 inbound
#
【原因分析】
用户访问交换机时,会发送目的IP地址为交换机地址的报文。交换机收到这类报文后,会将报文上送CPU处理。缺省情况下,交换机对上送CPU的报文按照系统自带的default防攻击策略进行限速;即便在交换机上应用新的防攻击策略,且管理员没有配置限速规则,新的防攻击策略仍然会使用default策略的缺省配置。因此,交换机始终会对用户发送的这类报文进行限速,也就是始终应用CPCAR(Control Plane Committed Access Rate)功能。
此时,如果我们使用流策略限制用户访问,那么交换机所收到的这类上送CPU处理的报文,一定会匹配流策略中的流分类规则,CPCAR功能和流策略动作就会产生冲突。
前面的例子中,匹配ACL 3001的报文都会上送交换机CPU进行处理,CPCAR功能会对其进行限速,而流策略p1中的deny动作与限速动作产生冲突。
CPCAR和流策略产生冲突时,只有优先级高的生效。对于V200R020C10及之前版本的设备,二者间的优先级关系如下表所示。
表1 CPCAR和流策略的优先级关系 | |
---|---|
形态 |
优先级顺序 |
|
流策略优先级高于CPCAR。 说明: 对于DHCP以及NAC认证时需要上送的ARP协议报文优先级高于流策略。 |
|
CPCAR优先级高于流策略。 说明: 对于S5720-EI,V200R007版本流策略优先级高于CPCAR,其他版本CPCAR优先级高于流策略。 |
【解决办法】
综上,通常情况下,推荐您配置CPU防攻击功能进行用户访问限制,而不是配置流策略。一方面,大部分交换机形态的CPCAR优先级高于流策略,无法通过流策略丢弃上送交换机CPU的报文;另一方面,即便判断出某款交换机的流策略优先级高于CPCAR,相较于CPU防攻击功能,流策略的配置也更为复杂。
因此,如果想解决前文中PC仍然可以ping通交换机的问题,就可以按照下面的步骤重新配置。
场景一:禁止PC访问S系列交换机

PC1和PC2加入VLAN10,PC3和PC4加入VLAN20,交换机SwitchA下挂二层交换机做二层透传,交换机SwitchA上配置接口VLANIF10和VLANIF20,所有的终端之间都互通。
现在希望PC1可以访问VLAN10内的所有终端(例如PC2),但不能访问其他VLAN内的终端(例如PC3和PC4),也不能访问交换机(例如SwitchA)。可以按照如下示例配置Switch A:
#
acl number 3001
rule 5 permit ip source 192.168.10.0 0.0.0.255 destination 192.168.20.0 0.0.0.255
rule 10 permit ip source 192.168.10.0 0.0.0.255 destination 192.168.10.3 0
#
cpu-defend policy test
blacklist 1 acl 3001
#
cpu-defend-policy test global
#
场景二:只允许交换机的1个VLANIF接口地址做管理地址

如上图所示,Switch A上有多个VLANIF接口(例如VLANIF10和VLANIF20)。现在只希望VLANIF10的地址(192.168.10.3)作为管理地址,该地址用于Telnet登录,其他VLANIF接口的地址(192.168.20.3)不能用于Telnet登录。
可以按照如下示例配置Switch A:
#
acl number 3001
rule 5 permit tcp destination 192.168.20.3 0 destination-port eq telnet
#
cpu-defend policy test
blacklist 1 acl 3001
#
cpu-defend-policy test global
#
【补充资料】
为什么通过流策略无法丢弃Ping主机地址的ICMP报文?
因为设备的ICMP报文是通过ACL上送CPU的,流策略是通过ACL丢弃,两个ACL,一个要上送,一个丢弃,优先级高的ACL生效,上送CPU的ACL优先级高,因此通过配置流策略是无法丢弃ICMP报文的,只有通过黑名单才能丢弃。
如果报文是通过路由上送CPU的,则可以通过配置流策略进行丢弃。