ACL模块介绍
关键词:ACL, QoS,端口过滤,流镜像,流重定向
1. ACL简介
1.1. ACL的用途
ACL(Access Control List,访问控制列表),顾名思义主要用于访问控制,属安全类应用。最初主要以防火墙类的安全应用为主,用其指定的2、3层特征参数规则集,来过滤端口收发的数据包,以及截获这些包作一些特殊处理(如:认证等)。
因其天生具有选择性处理包的功能特性,伴随着包交换逐渐由端口处理转向流处理的重心偏移,将其作为流选器的需求不断涌现,从而使ACL渐渐有了新的扩展应用,如:流镜像、流重定向等等。
ACL作为流选器使用时,其“Permit”动作不再表示“允许包通过”,而是表示此包被流选中,可以对其作特定的流操作;同理“Deny”也不再表示“丢包”,而是表示此包不被流选中,不对其做任何操作。
当ACL作为流选器,与一些比如限速(流限速)之类的QoS操作绑定一起应用时,就属于QoS的应用范畴了。
可见,ACL只是一个单纯的流选工具,与什么操作绑定,就起什么作用(与端口过滤绑定,就是过滤器;与包镜像器绑定,就是流镜像器;与包重定向器绑定,就是流重定向器;与限速器绑定,就是流限速器)。
1.2. ACL的使用方法
一条ACL就是一个规则集合的列表,用ACL号来标识;每条规则也称为“Rule”,用RuleID来标识。
常见的规则类型有:ICMP规则、IP规则、TCP规则、UDP规则、MAC规则等等。这些规则提供了捕获转发包的一些常用的2、3层特征参数。至于具体的命令行配置,请参考第3节。
ACL的具体用法,可以参考文档《ACL自测报告》,里面有较详细的用法实例讲解。
1.3. ACL的实现原理
ACL目前有以下三种实现手段,各有优缺点:
基于软转发平台实现的纯软ACL
最早一代的ACL技术,基本上都是纯软件实现的过滤参数列表。实际上,就是一套较复杂的对转发包参数做检查的规则集合。显然,这就要求硬件平台所有的转发包,都先中转到设备CPU上经过ACL的检查后,再转发到目标端口。因此,转发设备一启动ACL功能,就会大大降低转发效率(大约只有平时的70%)。
缺点:大大降低包转发效率;
优点:软件实现的ACL,灵活性最高,可以随意增加新的规则类型。
基于硬件转发平台流处理能力的纯硬ACL
为了满足不断发展的QoS需要,新一代的交换芯片大都具有较强的流处理能力。这些硬件的流处理芯片,是专为ACL和QoS这两种流应用设计的。只要在这些硬件流处理能力之上,开发出满足我们应用需求的驱动即可实现ACL、QoS功能。我们公司的ACL、QoS模块就是这样实现的。
缺点:
a) 硬件实现的ACL,灵活性很低,ACL能力固定,扩展性很差;
b) 因为硬件能力的千差万别,导致软件为了适应不同硬件的流处理能力,需要做的差异化处理较多。
优点:效率高,不影响包的线性转发效率。
基于硬件转发平台实现的软、硬结合ACL
可见,纯软、纯硬的ACL都各有优缺点。自然而然,软、硬方案结合的ACL实现手段也就出现了。在硬件高效地流处理能力之上,再配合以灵活的软件处理,就可实现高效、灵活的双优ACL。实现手段与软转发类似,都是软硬结合。设备CPU不关心的转发,都走硬件平台;CPU关心的转发(如:组播),都中转走软件平台。ACL也类似,硬件能处理的流能力,都由硬件处理;硬件只能部分处理的,处理完硬件部分的包再中转到CPU的软转发那里,继续剩下的ACL软处理。这种实现方案,技术难度较高。
缺点:
a) 因为硬件能力的千差万别,导致软件为了适应不同硬件的流处理能力,需要做的差异化处理较多。
b) 对硬件的线性转发效率,有时(用到软转发时)会有影响。
优点:
a) 扩展性较好,增加新的规则类型较容易;
b) 效率较高,对包的线性转发效率影响不大。
2. ACL模块介绍
我们的ACL模块按功能,可分为五个子模块:
ACL全局控制模块
ACL端口过滤模块
ACL TimeRange模块(目前,计划关闭此模块)
ACL流镜像模块
ACL流重定向模块
下面逐项说明。
- ACL全局控制模块
ACL的全局控制有两项:ACL功能的全局开关、ACL过滤的全局默认动作。
ACL全局开关,可以打开、关闭所有ACL相关的应用:端口过滤、流镜像、流重定向都被其控制。只有ACL开关打开时,ACL才能绑定到接口生效,才能配置默认动作;ACL开关关闭时,所有接口上的ACL绑定,都会被清除。ACL开关可以随时开合。系统缺省关闭。
ACL过滤的全局默认动作,是为所有绑定ACL过滤功能的端口,提供默认的过滤处理。即,如果端口收到的包,匹配不到所有绑定的ACL规则,就作此默认处理(通过或丢包)。此默认动作,对ACL的流镜像、流重定向应用无效,只对ACL端口过滤有效,且可以随时修改,即时生效。系统缺省通过。 - ACL端口过滤模块
一个端口通过绑定特定的ACL,来过滤收到的数据包。 - ACL流镜像模块
一个端口通过绑定特定的ACL,来镜像收到的数据包到设定的目标端口。 - ACL流重定向模块
一个端口通过绑定特定的ACL,来转发收到的数据包到设定的目标端口。
3. ACL命令行
全局视图下的命令
- ACL全局开关
config access-list service [enable | disable] - ACL全局默认过滤动作
config access-list default-action [permit | deny] - 进入ACL视图
access-list <1-5000> - 创建any规则的ACL
access-list <1-5000> [permit | deny] any - 创建IP规则的ACL
access-list <1-5000> [permit | deny] ip dip [any | <A.B.C.D/M>] sip[any | <A.B.C.D/M>] - 创建TCP规则的ACL
access-list <1-5000> [permit | deny] tcp dip [any | <A.B.C.D/M>] dst-port [any | <0-65535>] sip [any | <A.B.C.D/M>] src-port [any | <0-65535>] - 创建UDP规则的ACL
access-list <1-5000> [permit | deny] udp dip [any | <A.B.C.D/M>] dst-port [any | <0-65535>] sip [any | <A.B.C.D/M>] src-port [any | <0-65535>] - 创建ICMP规则的ACL
access-list <1-5000> [permit | deny] icmp dip [any | <A.B.C.D/M>] sip[any | <A.B.C.D/M>] - 创建MAC规则的ACL
access-list <1-5000> [permit | deny] mac destination <ABCD.ABCD.ABCD> source <ABCD.ABCD.ABCD> - 创建MAC IP规则的ACL
access-list <1-5000> [permit | deny] mac destination <ABCD.ABCD.ABCD> [any | <A.B.C.D/M>] source <ABCD.ABCD.ABCD> [any | <A.B.C.D/M>] - 查看所有ACL
show access-list - 查看某条ACL
show access-list <1-5000> - 删除所有ACL
undo access-list - 删除某条ACL
undo access-list <1-5000>
ACL视图下的命令
- ACL优先级设定
access-list priority <1-5000> - 创建any规则
rule <1-5000> [permit | deny] any - 创建IP规则
rule <1-5000> [permit | deny] ip dip [any | <A.B.C.D/M>] sip[any | <A.B.C.D/M>] - 创建TCP规则
rule <1-5000> [permit | deny] tcp dip [any | <A.B.C.D/M>] dst-port [any | <0-65535>] sip [any | <A.B.C.D/M>] src-port [any | <0-65535>] - 创建UDP规则
rule <1-5000> [permit | deny] udp dip [any | <A.B.C.D/M>] dst-port [any | <0-65535>] sip [any | <A.B.C.D/M>] src-port [any | <0-65535>] - 创建ICMP规则
rule <1-5000> [permit | deny] icmp dip [any | <A.B.C.D/M>] sip[any | <A.B.C.D/M>] - 创建MAC规则
rule <1-5000> [permit | deny] mac destination <ABCD.ABCD.ABCD> source <ABCD.ABCD.ABCD> - 创建MAC IP规则
rule <1-5000> [permit | deny] mac destination <ABCD.ABCD.ABCD> [any | <A.B.C.D/M>] source <ABCD.ABCD.ABCD> [any | <A.B.C.D/M>] - 查看所有RULE
show rule - 查看某条RULE
show rule <1-5000> - 删除所有RULE
undo rule - 删除某条RULE
undo rule <1-5000>
接口视图下的命令
- 接口绑定ACL过滤
access-list <1-5000> - 接口绑定ACL镜像
access-list <1-5000> mirror port <slot/port> - 接口绑定ACL重定向
access-list <1-5000> redirect port <slot/port> - 查看接口绑定的所有ACL
show access-list - 查看接口绑定的某条ACL
show access-list <1-5000> - 取消接口绑定的所有ACL
undo access-list - 取消接口绑定的某条ACL
undo access-list <1-5000>
4. ACL技术规格
- 我们的ACL模块,使用纯硬件的流处理能力,不会影响交换芯片的线性转发效率。目前,适用于BCM56300、56500、56510、56514这四款交换芯片。
- 由于这四款芯片的流处理器,都不支持输出端口字段。因此,我们的ACL和QoS规则,都只能作用于端口的输入处理阶段。
- 由于交换芯片的上位CPU端口的包接收处理,属于CPU的包输出处理阶段。因此,我们的ACL和QoS规则,都不能作用于CPU端口的收包处理。
- 我们的OLT系统虽然最多允许配置1到5000号的ACL,实际上受硬件限制,这些ACL不能同时作用到端口上生效。56300最多允许1024(128×8)条流规则;56500最多允许2048(128×16)条流规则;56510和56514最多允许4096(256×16)条流规则。
- BCM56300的流处理能力相对较弱,不支持MAC+IP的ACL、QoS规则。56300的QoS能力也较弱,不支持set queueid的流操作。这些我们对56300都做了特殊处理(隐藏或简化)。
- 这四款芯片的流处理器,都不能支持端口一级的DSCP映射,只有全局的一张映射表,因此,相关的全局设置命令移到了隐藏节点下。
- 因为ACL、QoS规则,都共用硬件流处理器,所以两个独立的模块会相互影响,体现在:规则数目占用,优先顺序这两个方面。