目录
ACL简介
定义
访问控制列表ACL(Access Control List)是由一条或多条规则组成的集合。所谓规则,是指描述报文匹配条件的判断语句,这些条件可以是报文的源地址、目的地址、端口号等。
ACL本质上是一种报文过滤器,规则是过滤器的滤芯。设备基于这些规则进行报文匹配,可以过滤出特定的报文,并根据应用ACL的业务模块的处理策略来允许或阻止该报文通过。
ACL配置完成后,必须应用在业务模块中才能生效,其中最基本的ACL应用,就是在简化流策略/流策略中应用ACL,使设备能够基于全局、VLAN或接口下发ACL,实现对转发报文的过滤。此外,ACL还可以应用在Telnet、FTP、路由等模块。
目的
ACL可以实现对网络中报文流的精确识别和控制,达到控制网络访问行为、防止网络攻击和提高网络带宽利用率的目的,从而切实保障网络环境的安全性和网络服务质量的可靠性。
ACL的基本原理
ACL由一系列规则组成,通过将报文与ACL规则进行匹配,设备可以过滤出特定的报文。设备支持软件ACL和硬件ACL两种实现方式。
ACL的组成
一条ACL的结构组成,如图1所示。
-
ACL名称:通过名称来标识ACL,就像用域名代替IP地址一样,更加方便记忆。这种ACL,称为命名型ACL。
命名型ACL一旦创建成功,便不允许用户再修改其名称。
仅基本ACL与基本ACL6,以及高级ACL与高级ACL6,可以使用相同的ACL名称;其他类型ACL之间,不能使用相同的ACL名称。
-
ACL编号:用于标识ACL,也可以单独使用ACL编号,表明该ACL是数字型。
不同的ACL类型使用不同的ACL编号取值标识。
-
规则:即描述报文匹配条件的判断语句。
-
规则编号:用于标识ACL规则。可以自行配置规则编号,也可以由系统自动分配。
ACL规则的编号范围是0~4294967294,所有规则均按照规则编号从小到大进行排序。系统按照规则编号从小到大的顺序,将规则依次与报文匹配,一旦匹配上一条规则即停止匹配。
-
动作:报文处理动作,包括permit/deny两种,表示允许/拒绝。
-
匹配项:ACL定义了极其丰富的匹配项。除了图1中的源地址和生效时间段,ACL还支持很多其他规则匹配项。例如,二层以太网帧头信息(如源MAC、目的MAC、以太帧协议类型),三层报文信息(如目的IP地址、协议类型),以及四层报文信息(如TCP/UDP端口号)等
-
交换机支持的ACL
交换机支持的ACL
如表1所示,交换机支持的ACL规则包括过滤IPv4报文的ACL、过滤IPv6报文的ACL6以及既支持过滤IPv4报文又支持过滤IPv6报文的二层ACL和用户自定义ACL。
分类 | 适用的IP版本 | 规则定义描述 | 编号范围 |
---|---|---|---|
基本ACL | IPv4 | 仅使用报文的源IP地址、分片信息和生效时间段信息来定义规则。 | 2000~2999 |
高级ACL | IPv4 | 既可使用IPv4报文的源IP地址,也可使用目的IP地址、IP协议类型、ICMP类型、TCP源/目的端口、UDP源/目的端口号、生效时间段等来定义规则。 | 3000~3999 |
二层ACL | IPv4和IPv6 | 使用报文的以太网帧头信息来定义规则,如根据源MAC(Media Access Control)地址、目的MAC地址、二层协议类型等。 | 4000~4999 |
用户自定义ACL | IPv4和IPv6 | 使用报文头、偏移位置、字符串掩码和用户自定义字符串来定义规则,即以报文头为基准,指定从报文的第几个字节开始与字符串掩码进行“与”操作,并将提取出的字符串与用户自定义的字符串进行比较,从而过滤出相匹配的报文。 | 5000~5999 |
用户ACL | IPv4 | 既可使用IPv4报文的源IP地址或源UCL(User Control List)组,也可使用目的IP地址或目的UCL组、IP协议类型、ICMP类型、TCP源端口/目的端口、UDP源端口/目的端口号等来定义规则。 | 6000~9999 |
基本ACL6 | IPv6 | 可使用IPv6报文的源IPv6地址、分片信息和生效时间段来定义规则。 | 2000~2999 |
高级ACL6 | IPv6 | 可以使用IPv6报文的源IPv6地址、目的IPv6地址、IPv6协议类型、ICMPv6类型、TCP源/目的端口、UDP源/目的端口号、生效时间段等来定义规则。 | 3000~3999 |
用户ACL6 | IPv6 | 既可使用IPv6报文的源IPv6地址或源UCL组,也可使用目的IPv6地址、IPv6协议类型、ICMPv6类型、TCP源端口/目的端口、UDP源端口/目的端口号等来定义规则。 | 6000~9999 |
VLAN编号及其掩码
外层VLAN及其掩码格式:vlan-id vlan-id [ vlan-id-mask ]
内层VLAN及其掩码格式:cvlan-id cvlan-id [ cvlan-id-mask ]
二层ACL支持基于外层VLAN或内层VLAN编号过滤报文。
将VLAN编号定义为规则匹配项时,可以在VLAN编号字段后面同时指定VLAN掩码,用来与VLAN编号字段共同确定一个VLAN范围。
VLAN掩码的格式是十六进制形式,取值范围是0x0~0xFFF。如果不指定VLAN掩码,则默认掩码为0xFFF,表示检查VLAN编号的每一位。
ACL的匹配机制
设备将报文与ACL规则进行匹配时,遵循“一旦命中即停止匹配”的机制.
从上面的ACL匹配流程可以看出,报文与ACL规则匹配后,会产生两种结果:“命中规则”和“未命中规则”。
-
命中规则:指存在ACL,且在ACL中查找到了符合匹配条件的规则。
-
未命中规则:指不存在ACL,或ACL中无规则,再或者在ACL中遍历了所有规则都没有找到符合匹配条件的规则。
报文最终是被允许通过还是拒绝通过,实际是ACL规则中的指定动作和应用ACL的各个业务模块来共同决定。不同的业务模块,对命中和未命中规则报文的处理方式也各不相同。例如,在Telnet模块中应用ACL,只要报文命中了规则且ACL规则动作为permit,就允许通过;而在流策略中应用ACL,如果报文命中了规则且ACL规则动作为permit,但流行为动作配置的是deny,该报文仍会被拒绝通过。
匹配顺序
设备支持两种ACL匹配顺序:配置顺序(config模式)和自动排序(auto模式)。缺省的ACL匹配顺序是config模式。
配置顺序
配置顺序,即系统按照ACL规则编号从小到大的顺序进行报文匹配,规则编号越小越容易被匹配。
-
如果配置规则时指定了规则编号,则规则编号越小,规则插入位置越靠前,该规则越先被匹配。
-
如果配置规则时未指定规则编号,则由系统自动为其分配一个编号。该编号是一个大于当前ACL内最大规则编号且是步长整数倍的最小整数,因此该规则会被最后匹配。
自动排序
自动排序,是指系统使用“深度优先”的原则,将规则按照精确度从高到低进行排序,并按照精确度从高到低的顺序进行报文匹配。规则中定义的匹配项限制越严格,规则的精确度就越高,即优先级越高,系统越先匹配。各类ACL的“深度优先”顺序匹配原则如表1所示。
ACL类型 | 匹配顺序(从高到低) |
---|---|
基本ACL |
|
高级ACL |
|
二层ACL |
|
用户自定义ACL | 用户自定义ACL规则的匹配顺序只支持配置顺序,即规则编号从小到大的顺序进行匹配。 |
ACL的步长设定
步长的含义
步长,是指系统自动为ACL规则分配编号时,每个相邻规则编号之间的差值。
系统为ACL中首条未手工指定编号的规则分配编号时,使用步长值作为该规则的起始编号;为后续规则分配编号时,则使用大于当前ACL内最大规则编号且是步长整数倍的最小整数作为规则编号。例如ACL中包含规则rule 5和rule 12,ACL的缺省步长为5,大于12且是5的倍数的最小整数是15,所以系统分配给新配置的规则的编号为15。
基本ACL6和高级ACL6不支持步长设定,缺省步长为5。
设置步长的作用,在于方便后续在旧规则之间插入新的规则。
ACL应用模块的ACL默认动作和处理机制
ACL的应用模块
配置完ACL后,必须在具体的业务模块中应用ACL,才能使ACL正常下发和生效。
ACL应用的业务模块,主要分为以下几类。
业务分类 | 应用场景 | 涉及业务模块 |
---|---|---|
对转发的报文进行过滤 | 基于全局、接口和VLAN,对转发的报文进行过滤,从而使设备能够进一步对过滤出的报文进行丢弃、修改优先级、重定向等处理。 例如,使用ACL限制不同网段用户互访、禁止特定用户主机在特定时间内上网、利用ACL降低P2P下载、网络视频等消耗大量带宽的数据流的服务等级,在网络拥塞时优先丢弃这类流量,减少它们对其他重要流量的影响。 | 简化流策略/流策略 |
对上送CPU处理的报文进行过滤 | 对上送CPU的报文进行必要的限制,可以避免CPU处理过多的协议报文造成占用率过高、性能下降。 例如,当发现某用户向设备发送大量的ARP攻击报文,造成设备CPU繁忙,引发系统中断时,可以在本机防攻击策略的黑名单中应用ACL,将该用户加入黑名单,使CPU丢弃该用户发送的报文。 | 黑名单 |
登录控制 | 对设备的登录权限进行控制,允许合法用户登录,拒绝非法用户登录,从而有效防止未经授权用户的非法接入,保证网络安全性。 例如,一般情况下设备只允许管理员登录,非管理员用户不允许随意登录。这时就可以在Telnet中应用ACL,并在ACL中定义哪些主机可以登录,哪些主机不能。 | STelnet、SFTP、FTP、Telnet、HTTP、SNMP |
路由过滤 | ACL可以应用在各种动态路由协议中,对路由协议发布、接收的路由信息以及组播组进行过滤。 例如,可以将ACL和路由策略配合使用过滤路由信息,禁止设备将某网段路由发给邻居路由器。 | BGP、IS-IS、OSPF、OSPFv3、RIP、RIPng、组播协议 |
应用模块的ACL默认动作和处理机制
在各类业务模块中应用ACL时,ACL的默认动作各有不同,所以各业务模块对命中/未命中ACL规则报文的处理机制也各不相同。
例如,流策略中的ACL默认动作是permit,在流策略中应用ACL时,如果ACL中存在规则但报文未匹配上,该报文仍可以正常通过。而Telnet中的ACL默认动作是deny,在Telnet中应用ACL时,如果遇到此种情况,该报文会被拒绝通过。
此外,黑名单模块中的ACL处理机制与其他模块有所不同。在黑名单中应用ACL时,无论ACL规则配置成permit还是deny,只要报文命中了规则,该报文都会被系统丢弃。
各类业务模块中的ACL默认动作及ACL处理机制,如表2、表3、表4所示。
ACL默认动作及处理规则 | Telnet | HTTP | FTP | TFTP |
---|---|---|---|---|
ACL默认动作 | deny | deny | deny | deny |
命中permit规则 | permit(允许登录) | permit(允许登录) | permit(允许登录) | permit(允许登录) |
命中deny规则 | deny(拒绝登录) | deny(拒绝登录) | deny(拒绝登录) | deny(拒绝登录) |
ACL中配置了规则,但未命中任何规则 | deny(拒绝登录) | deny(拒绝登录) | deny(拒绝登录) | deny(拒绝登录) |
ACL中未配置规则 | permit(允许登录) | permit(允许登录) | permit(允许登录) | permit(允许登录) |
ACL未创建 | permit(允许登录) | permit(允许登录) | permit(允许登录) | permit(允许登录) |
ACL默认动作及处理规则 | STelnet | SFTP | SNMP | 流策略 | 简化流策略 | 本机防攻击策略(黑名单) |
---|---|---|---|---|---|---|
ACL默认动作 | deny | deny | deny | permit | permit | permit |
命中permit规则 | permit(允许登录) | permit(允许登录) | permit(允许登录) |
| permit(执行简化流策略动作) | deny(丢弃报文) |
命中deny规则 | deny(拒绝登录) | deny(拒绝登录) | deny(拒绝登录) | deny(丢弃报文) 说明:报文命中deny规则时,只有在流行为是流量统计、MAC地址不学习或流镜像的情况下,设备才会执行流行为动作,否则流行为动作不生效。 |
| deny(丢弃报文) |
ACL中配置了规则,但未命中任何规则 | deny(拒绝登录) | deny(拒绝登录) | deny(拒绝登录) | permit(功能不生效,按照原转发方式进行转发) | permit(功能不生效,按照原转发方式进行转发) | permit(功能不生效,正常上送报文) |
ACL中未配置规则 | permit(允许登录) | permit(允许登录) | permit(允许登录) | permit(功能不生效,按照原转发方式进行转发) | permit(功能不生效,按照原转发方式进行转发) | permit(功能不生效,正常上送报文) |
ACL未创建 | permit(允许登录) | permit(允许登录) | permit(允许登录) | permit(功能不生效,按照原转发方式进行转发) | permit(功能不生效,按照原转发方式进行转发) | permit(功能不生效,正常上送报文) |
ACL默认动作及处理规则 | Route Policy | Filter Policy | igmp-snooping ssm-policy | igmp-snooping group-policy |
---|---|---|---|---|
ACL默认动作 | deny | deny | deny | deny |
命中permit规则 |
| permit(允许发布或接收该路由) | permit(允许加入SSM组播组范围) | permit(允许加入组播组) |
命中deny规则 | deny(功能不生效,不允许执行路由策略) | deny(不允许发布或接收该路由) | deny(禁止加入SSM组地址范围) | deny(禁止加入组播组) |
ACL中配置了规则,但未命中任何规则 | deny(功能不生效,不允许执行路由策略) | deny(不允许发布或接收该路由) | deny(禁止加入SSM组地址范围) | deny(禁止加入组播组) |
ACL中未配置规则 | permit(对经过的所有路由生效) | deny(不允许发布或接收路由) | deny(禁止加入SSM组地址范围,所有组都不在SSM组地址范围内) | deny(禁止加入组播组) |
ACL未创建 | deny(功能不生效,不允许执行路由策略) | permit(允许发布或接收路由) | deny(禁止加入SSM组地址范围,只有临时组地址范围232.0.0.0~232.255.255.255在SSM组地址范围内) | deny(禁止加入组播组) |
在OSPF中使用基本ACL过滤路由信息示例
组网需求
如图1,运行OSPF协议的网络中,RouterA从Internet网络接收路由,并为OSPF网络提供了Internet路由。要求OSPF网络中只能访问172.1.17.0/24、172.1.18.0/24和172.1.19.0/24三个网段的网络,其中RouterC连接的网络只能访问172.1.18.0/24网段的网络。
配置思路
采用如下的思路配置对路由进行过滤:
-
在RouterA上配置ACL,在路由发布时应用ACL,使RouterA仅提供路由172.1.17.0/24、172.1.18.0/24、172.1.19.0/24给RouterB,实现OSPF网络中只能访问172.1.17.0/24、172.1.18.0/24、172.1.19.0/24三个网段的网络。
-
在RouterC上配置ACL,在路由引入时应用ACL,使RouterC仅接收路由172.1.18.0/24,实现RouterC连接的网络只能访问172.1.18.0/24网段的网络。
RouterA的配置文件
#
sysname RouterA
#
acl number 2002
rule 5 permit source 172.16.17.0 0.0.0.255
rule 10 permit source 172.16.18.0 0.0.0.255
rule 15 permit source 172.16.19.0 0.0.0.255
#
interface GigabitEthernet1/0/0
ip address 192.168.1.1 255.255.255.0
#
ospf 1
filter-policy 2002 export static
import-route static
area 0.0.0.0
network 192.168.1.0 0.0.0.255
#
ip route-static 172.16.16.0 255.255.255.0 NULL0
ip route-static 172.16.17.0 255.255.255.0 NULL0
ip route-static 172.16.18.0 255.255.255.0 NULL0
ip route-static 172.16.19.0 255.255.255.0 NULL0
ip route-static 172.16.20.0 255.255.255.0 NULL0
#
return
RouterB的配置文件
sysname RouterB
#
interface GigabitEthernet1/0/0
ip address 192.168.1.2 255.255.255.0
#
interface GigabitEthernet2/0/0
ip address 192.168.3.1 255.255.255.0
#
interface GigabitEthernet3/0/0
ip address 192.168.2.1 255.255.255.0
#
ospf 1
area 0.0.0.0
network 192.168.1.0 0.0.0.255
network 192.168.2.0 0.0.0.255
network 192.168.3.0 0.0.0.255
#
return
RouterC的配置文件
#
sysname RouterC
#
acl number 2003
rule 5 permit source 172.16.18.0 0.0.0.255
#
interface GigabitEthernet1/0/0
ip address 192.168.2.2 255.255.255.0
#
ospf 1
filter-policy 2003 import
area 0.0.0.0
network 192.168.2.0 0.0.0.255
#
return
RouterD的配置文件
#
sysname RouterD
#
interface GigabitEthernet1/0/0
ip address 192.168.3.2 255.255.255.0
#
ospf 1
area 0.0.0.0
network 192.168.3.0 0.0.0.255
#
return