ACL技术背景

网络安全和网络服务质量 QoS(Quality of Service)问题日益突出:园区内重要的服务器被随意访问容易导致机密信息泄露;网络带宽被各类业务随意挤占,服务质量要求最高的语音、视频业务的带宽无法保障,用户的体验较差。需要一些过滤流量的工具帮助我们解决这些问题。

ACL(Access Control List) 是一个匹配工具,可以对报文进行匹配和区分,它是由一系列 permitdeny 语句组成的、有序规则的列表

ACL组成

ACL 由若干条 permit 和 deny 组成,每条语句就是该 ACL 一条规则,permit 或 deny 就是这条规则对应的处理动作

  • ACL 编号:用于标识 ACL,不同分类的 ACL 编号范围不同。
  • 规则:一条语句就是一条规则。
  • 规则编号:每条规则有一个对应的编号,用于标识 ACL 规则,ACL 规则编号范围是 $0\sim2^{32}-2$ ,所有规则按照规则编号从小到大进行排序
  • 动作:每条规则中的 permit 或 deny,对应允许或拒绝。
  • 匹配项:ACL 支持各种匹配项,例如 源目 MAC 、源目 IP 、以太帧协议类型、协议类型、 TCP/UDP 端口号等等。

规则编号

规则编号可以由系统自动分配,也可以手动编号。当选择系统自动分配时,每个相邻规则编号之间有一个差值,称为“步长”,缺省下步长为5,因此规则编号为5/10/15…

  • 如果手工指定了一条规则,但未指定规则编号,系统就会使用大于当前 ACL 内最大规则编号且时不常整数倍的最小整数作为规则编号,例如当前最大规则号为10,步长为5,则新增的规则的编号为15
  • 步长可以调整 (基本 ACL6 和高级 ACL6 除外),步长调整后系统自动从当前步长值开始重新排列规则编号,变为2/4/6…
  • 步长的作用是为了方便在旧规则后插入新的规则,例如在 rule 5 和 rule 10 之间手动插入 rule 6

通配符

通配符是一个32比特长度的数值,用点分十进制表示,跟在 ip 地址后面,看起来很像反掩码(其实反掩码也可以用通配符来理解,就是0和1不能随意穿插的特殊通配符),但实际上并不是,它的匹配规则是:0为严格匹配,1为任意,得到 ip 地址中哪些比特位需要匹配,哪些不需要,也就是说 01 可以任意穿插,而不是像子网掩码那样先1后0。

  • 例如 rule 5 deny source 10.1.1.1 0.0.0.255 ,“0.0.0.255” 就是通配符,匹配完以后得到 10.1.1.0/24 网段
  • 再比如要匹配网段 192.168.1.0 中的奇数 IP 地址,应该怎么写? 对于该网段的奇数 IP 地址,特点都是最后八位比特中的 最低位均为1 ,高7位是任意的,因此使用 0.0.0.254 即可达到目的
  • 还有两个特殊的通配符:
    • 当通配符全为0来匹配IP地址时,表示精确匹配某个IP地址
    • 当通配符全为1来匹配0.0.0.0地址时,表示匹配了所有IP地址

ACL分类

根据 ACL 规则定义方式划分可以分为:基本 ACL 、高级 ACL 、二层 ACL 、用户自定义 ACL 和用户 ACL;具体根据支持的 IPV4 和 IPV6 还有对应的版本

分类 适用的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

根据 ACL 标识方法可以分为:数字型 ACL 和命名型 ACL。 命名型 ACL 是为了方便用户记忆,在创建 ACL 时为其设置名称,也可以设置名称的同时指定 ACL 编号,如果不指定编号,系统则会自动为其分配一个数字型 ACL 的编号。 用户在创建 ACL 时为其指定 ACL 编号,不同的编号对应不同类型的 ACL

ACL 的匹配机制

配置了 ACL 的设备接受到报文后,会将该报文与 ACL 中的规则逐条进行匹配 (按照匹配顺序) ,一旦匹配上,就对该报文执行这条规则中的动作,并且不会再尝试匹配后面的规则。

匹配顺序

华为设备支持两种匹配顺序:自动排序 (auto) 和配置顺序 (config) ,缺省的 ACL 匹配顺序是 config 模式。

  • 配置顺序:系统按照 ACL 规则编号从小到大的顺序进行报文匹配,编号越小越容易被匹配
  • 自动排序:系统根据 深度优先 的规则,将规则按照精确度从高到低进行排序,并按照从高到低的顺序进行报文匹配。
ACL类型 匹配顺序(从高到低)
二层ACL 二层协议类型通配符掩码,通配符掩码大(协议类型通配符掩码中“1”位的数量多)的规则优先。源MAC地址范围,源MAC地址范围小(MAC地址通配符掩码中“1”位的数量多)的规则优先。目的MAC地址范围,目的MAC地址范围小(MAC地址通配符掩码中“1”位的数量多)的规则优先。规则编号,规则编号小的优先。
高级ACL&ACL6 VPN实例协议范围,指定了IP协议承载的协议类型的规则优先。源IP地址范围,源IP地址范围小(IP地址通配符掩码中“0”位的数量多)的规则优先。目的IP地址范围,目的IP地址范围小(IP地址通配符掩码中“0”位的数量多)的规则优先。四层端口号(TCP/UDP端口号)范围,四层端口号范围小的规则优先。规则编号,规则编号小的优先。
基本ACL&ACL6 VPN实例。源IP地址范围,源IP地址范围小(IP地址通配符掩码中“0”位的数量多)的规则优先。规则编号,规则编号小的优先。
用户ACL&ACL6 协议范围,指定了IP协议承载的协议类型的规则优先。源IP地址范围。如果规则的源IP地址均为IP网段,则源IP地址范围小(IP地址通配符掩码中“0”位的数量多)的规则优先,否则,源IP地址为IP网段的规则优先于源IP地址为UCL组的规则。目的IP地址范围。如果规则的目的IP地址均为IP网段,则目的IP地址范围小(IP地址通配符掩码中“0”位的数量多)的规则优先,否则,目的IP地址为IP网段的规则优先于目的IP地址为UCL组的规则。四层端口号(TCP/UDP端口号)范围,四层端口号范围小的规则优先。规则编号,规则编号小的优先。
用户自定义ACL 用户自定义ACL规则的匹配顺序只支持配置顺序,即规则编号从小到大的顺序进行匹配。

匹配结果

ACL 技术总是与其他业务模块结合在一起使用,例如 HTTP 、FTP等等,不同的业务模块的匹配结果也不一样,下表列举了一些常用的业务模块以及其 ACL 默认动作和处理机制

业务分类 应用场景 涉及业务模块
对转发的报文进行过滤 基于全局、接口和VLAN,对转发的报文进行过滤,从而使设备能够进一步对过滤出的报文进行丢弃、修改优先级、重定向等处理。例如,使用ACL限制不同网段用户互访、禁止特定用户主机在特定时间内上网、利用ACL降低P2P下载、网络视频等消耗大量带宽的数据流的服务等级,在网络拥塞时优先丢弃这类流量,减少它们对其他重要流量的影响。 简化流策略/流策略
对上送CPU处理的报文进行过滤 对上送CPU的报文进行必要的限制,可以避免CPU处理过多的协议报文造成占用率过高、性能下降。例如,当发现某用户向设备发送大量的ARP攻击报文,造成设备CPU繁忙,引发系统中断时,可以在本机防攻击策略的黑名单中应用ACL,将该用户加入黑名单,使CPU丢弃该用户发送的报文。 黑名单
登录控制 对设备的登录权限进行控制,允许合法用户登录,拒绝非法用户登录,从而有效防止未经授权用户的非法接入,保证网络安全性。例如,一般情况下设备只允许管理员登录,非管理员用户不允许随意登录。这时就可以在Telnet中应用ACL,并在ACL中定义哪些主机可以登录,哪些主机不能。 Telnet、STelnet、FTP、SFTP、HTTP、SNMP
路由过滤 ACL可以应用在各种动态路由协议中,对路由协议发布、接收的路由信息以及组播组进行过滤。例如,可以将ACL和路由策略配合使用过滤路由信息,禁止设备将某网段路由发给邻居路由器。 BGP、IS-IS、OSPF、OSPFv3、RIP、RIPng、组播协议
ACL默认动作及处理规则 Telnet STelnet HTTP FTP TFTP
ACL默认动作 deny deny deny deny deny
命中permit规则 permit(允许登录) permit(允许登录) permit(允许登录) permit(允许登录) permit(允许登录)
命中deny规则 deny(拒绝登录) deny(拒绝登录) deny(拒绝登录) deny(拒绝登录) deny(拒绝登录)
ACL中配置了规则,但未命中任何规则 deny(拒绝登录) deny(拒绝登录) deny(拒绝登录) deny(拒绝登录) deny(拒绝登录)
ACL中未配置规则 permit(允许登录) permit(允许登录) permit(允许登录) permit(允许登录) permit(允许登录)
ACL未创建 permit(允许登录) permit(允许登录) permit(允许登录) permit(允许登录) permit(允许登录)

匹配位置

匹配位置分为 inboundoutbound,对应入站和出站方向

例如在下图中,要过滤掉 192.168.1.0/24 网段的数据包,则在 GE0/0/1 的接口上配置 inbound 的 基本ACL source deny 策略。