ACL

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版本规则定义描述编号范围
基本ACLIPv4仅使用报文的源IP地址、分片信息和生效时间段信息来定义规则。2000~2999
高级ACLIPv4既可使用IPv4报文的源IP地址,也可使用目的IP地址、IP协议类型、ICMP类型、TCP源/目的端口、UDP源/目的端口号、生效时间段等来定义规则。3000~3999
二层ACLIPv4和IPv6使用报文的以太网帧头信息来定义规则,如根据源MAC(Media Access Control)地址、目的MAC地址、二层协议类型等。4000~4999
用户自定义ACLIPv4和IPv6使用报文头、偏移位置、字符串掩码和用户自定义字符串来定义规则,即以报文头为基准,指定从报文的第几个字节开始与字符串掩码进行“与”操作,并将提取出的字符串与用户自定义的字符串进行比较,从而过滤出相匹配的报文。5000~5999
用户ACLIPv4既可使用IPv4报文的源IP地址或源UCL(User Control List)组,也可使用目的IP地址或目的UCL组、IP协议类型、ICMP类型、TCP源端口/目的端口、UDP源端口/目的端口号等来定义规则。6000~9999
基本ACL6IPv6可使用IPv6报文的源IPv6地址、分片信息和生效时间段来定义规则。2000~2999
高级ACL6IPv6可以使用IPv6报文的源IPv6地址目的IPv6地址、IPv6协议类型、ICMPv6类型、TCP源/目的端口、UDP源/目的端口号、生效时间段等来定义规则。3000~3999
用户ACL6IPv6既可使用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&ACL6VPN实例协议范围,指定了IP协议承载的协议类型的规则优先。源IP地址范围,源IP地址范围小(IP地址通配符掩码中“0”位的数量多)的规则优先。目的IP地址范围,目的IP地址范围小(IP地址通配符掩码中“0”位的数量多)的规则优先。四层端口号(TCP/UDP端口号)范围,四层端口号范围小的规则优先。规则编号,规则编号小的优先。
基本ACL&ACL6VPN实例。源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默认动作及处理规则TelnetSTelnetHTTPFTPTFTP
ACL默认动作denydenydenydenydeny
命中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 策略。

Router-Policy匹配规则

规则

acl number 2001 rule 5 deny source 172.16.16.0 0 //拒绝172.16.16.0

acl number 2002 rule 5 permit source 172.16.16.0 0 //允许172.16.16.0

route-policy RP permit node 10 //在这个节点,172.16.16.0这条路由被拒绝,继续往下 if-match acl 2001

route-policy RP permit node 20 //在这个节点,172.16.16.0这条路由被允许 if-match acl 2002

这种情况下,有一个关键点就是在node 10,172.16.16.0这条路由被拒绝,同时会继续往下匹配,到node 20这个节点的时候172.16.16.0又被允许了,所以Route-Policy的最终匹配结果是允许172.16.16.0这条路由。

PBR转发规则

  • 首先根据配置的策略路由转发。

  • 若找不到匹配的节点或虽然找到了匹配的节点,但指导报文转发失败时,再根据路由表中除缺省路由之外的路由来转发报文。

  • 若转发失败,则根据策略路由中配置的缺省下一跳和缺省出接口指导报文转发。

  • 若转发失败,则再根据缺省路由来转发报文。

参考文章

https://support.huawei.com/enterprise/zh/doc/EDOC1000178149/3a8ceda6