ACL
ACL技术背景
网络安全和网络服务质量 QoS(Quality of Service)问题日益突出:园区内重要的服务器被随意访问容易导致机密信息泄露;网络带宽被各类业务随意挤占,服务质量要求最高的语音、视频业务的带宽无法保障,用户的体验较差。需要一些过滤流量的工具帮助我们解决这些问题。
ACL(Access Control List) 是一个匹配工具,可以对报文进行匹配和区分,它是由一系列 permit 或 deny 语句组成的、有序规则的列表
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 地址中哪些比特位需要匹配,哪些不需要,也就是说 0
和 1
可以任意穿插,而不是像子网掩码那样先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(允许登录) |
匹配位置
匹配位置分为 inbound 和 outbound,对应入站和出站方向
例如在下图中,要过滤掉 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