网络基础知识笔记07 ACL访问控制列表
企业网络中的设备进行通信时,需要保障数据传输的安全可靠和网络的性能稳定。
访问控制列表ACL(Access Control List)可以定义一系列不同的规则,设备根据这些规则对数据包进行分类,并针对不同类型的报文进行不同的处理,从而可以实现对网络访问行为的控制、限制网络流量、提高网络性能、防止网络攻击等等。
ACL应用场景
ACL可以通过定义规则来允许或拒绝流量的通过。
ACL的应用场景非常广泛。经常与网络地址转换技术(NAT),路由策略(route-policy),策略路由(policy-based-route),VPN(Virtual Private Network)和服务质量(QoS)等网络核心技术配合使用,是网络专业必须掌握的知识。
ACL是由一系列规则组成的集合。设备可以通过这些规则对数据包进行分类,并对不同类型的报文进行不同的处理。
如上图示例中,现在某企业有对网络中不同的网段有不同的访问限制。网关RTA允许192.168.1.0/24中的主机可以访问外网,也就是Internet;而192.168.2.0/24中的主机则被禁止访问Internet。对于服务器A而言,情况则相反。网关允许192.168.2.0/24中的主机访问服务器A,但却禁止192.168.1.0/24中的主机访问服务器A。通过ACL技术,可以将这个需求完美实现。
ACL工作原理
ACL可以根据需求来定义过滤的条件以及匹配条件后所执行的动作。
设备可以依据ACL中定义的条件(例如源IP地址等)来匹配入(出)方向的数据,并对匹配了条件的数据执行相应的动作。
在本示例所述场景中。RTA依据所定义的ACL而匹配到的感兴趣流量来自192.168.2.0/24网络, RTA会对这些感兴趣流量进行加密(在之后的虚拟局域网VPN笔记中会进行介绍)之后再转发。
ACL分类
根据不同的划分规则,ACL可以有不同的分类。最常见的三种分类是基本ACL、高级ACL和二层ACL。
分类 |
编号范围 |
参数(匹配规则) |
基本ACL |
2000-2999 |
源IP地址等 |
高级ACL |
3000-3999 |
源IP地址、目的IP地址、 源端口、目的端口等 |
二层ACL |
4000-4999 |
源MAC地址、目的MAC地址、以太帧协议类型等 |
用户自定义ACL |
5000-5999 |
可根据偏移位置和偏移量从报文中提取出一段内容进行匹配。 |
用户ACL |
6000-6999 |
既可使用IPv4报文的源IP地址或源UCL(User Control List)组,也可使用目的地址或目的UCL组、IP协议类型、ICMP类型、TCP源端口/目的端口、UDP源端口/目的端口号等来定义规则。 |
①基本ACL可以使用报文的源IP地址,分片标记和时间段信息来匹配报文,其编号取值范围是2000-2999。
②高级ACL可以使用报文的源/目的IP地址,源/目的端口号以及协议类型等信息来匹配报文。高级ACL可以定义比基本ACL更准确、更丰富、更灵活的规则,其编号取值范围是3000-3999。
③二层ACL可以使用源/目的MAC地址以及二层协议类型等二层信息来匹配报文,其编号取值范围是4000-4999。
④用户自定义ACL和用户ACL在这里不做讨论。
ACL匹配规则
每个ACL可以包含多个规则(rule),路由器RTA根据规则来对数据流量进行过滤。如下图所示:
一个ACL可以由多条“deny | permit”语句组成,每一条语句描述了一条规则。设备收到数据流量后,会从上到下逐条匹配ACL规则(rule),看其是否匹配,如果不匹配,则继续匹配下一条规则(rule):
①如果找到一条匹配的规则,则执行规则中定义的动作,并不再继续与后续规则进行匹配。
②如果找不到匹配的规则,则设备不对报文进行任何处理。
Tips:需要注意的是,ACL中定义的这些规则可能存在重复或矛盾的地方。规则的匹配顺序(从上到下)决定了规则的优先级,ACL通过设置规则的优先级来处理规则之间重复或矛盾的情形。
路由器支持两种匹配顺序:配置顺序(config)和自动排序(auto)。
(1)配置顺序
配置顺序按ACL规则编号(rule-id)从小到大的顺序进行匹配。设备会在创建ACL的过程中自动为每一条规则分配一个编号,规则编号决定了规则被匹配的顺序。
如上图示例中,RTA收到了来自两个网络的报文。默认情况下,RTA会依据ACL的配置顺序来匹配这些报文。网络172.16.0.0/24发送的数据流量将被RTA上配置的ACL 2000的规则15匹配,因此会被拒绝。而来自网络172.17.0.0/24的报文不能匹配访问控制列表中的任何规则,因此RTA对报文不做任何处理,而是正常转发。
(2)自动排序
自动排序使用“深度优先”的原则进行匹配,即根据规则的精确度排序(从高到低)。规则中定义的匹配项限制越严格,规则的精确度就越高,即优先级越高,系统越先匹配。各类ACL的“深度优先”顺序匹配原则如下表所示(用户自定义ACL和用户ACL不做讨论):
ACL类型 |
自动排序匹配原则 |
基本ACL&ACL6 |
①先看规则中是否带VPN实例,带VPN实例的规则优先。 ②再比较源IP地址范围,源IP地址范围小(IP地址通配符掩码中“0”位的数量多)的规则优先。 ③如果源IP地址范围相同,则规则编号小的优先。 |
高级ACL&ACL6 |
①先看规则中是否带VPN实例,带VPN实例的规则优先。 ②再比较协议范围,指定了IP协议承载的协议类型的规则优先。 ③如果协议范围相同,则比较源IP地址范围,源IP地址范围小(IP地址通配符掩码中“0”位的数量多)的规则优先。 ④如果协议范围、源IP地址范围相同,则比较目的IP地址范围,目的IP地址范围小(IP地址通配符掩码中“0”位的数量多)的规则优先。 ⑤如果协议范围、源IP地址范围、目的IP地址范围相同,则比较四层端口号(TCP/UDP端口号)范围,四层端口号范围小的规则优先。 ⑥如果上述范围都相同,则规则编号小的优先。 |
二层ACL |
①先比较二层协议类型通配符掩码,通配符掩码大(协议类型通配符掩码中“1”位的数量多)的规则优先。 ②如果二层协议类型通配符掩码相同,则比较源MAC地址范围,源MAC地址范围小(MAC地址通配符掩码中“1”位的数量多)的规则优先。 ③如果源MAC地址范围相同,则比较目的MAC地址范围,目的MAC地址范围小(MAC地址通配符掩码中“1”位的数量多)的规则优先。 ④如果源MAC地址范围、目的MAC地址范围相同,则规则编号小的优先。 |
“深度优先”规则,就是把指定数据包范围最小的语句排在最前面。这一点主要可以通过比较IP地址的通配符来实现。通配符越小,则指定主机的范围就越小。
Tips:匹配顺序可以采用命令match-order { auto | config }来修改。
(3)ACL的步长
如果将步长设定为5,则规则编号将按照5、10、15…这样的规律自动分配。同理如果步长设定为2,则规则编号将按照2、4、6、8…这样的规律自动分配。
通过设置步长,使规则之间留有一定的空间,用户可以在已存在的两个规则之间插入新的规则。路由器匹配规则时默认采用配置顺序。
Tips:华为系列路由器默认规则编号的步长是5。
基本ACL(2000-2999)的配置方法
如下图所示,拓扑中有三台主机和两台路由器。主机A和主机B分别代表172.16.1.0/24和172.16.2.0/24两个网段,还有一台外网的主机代表10.1.1.0/24网段。
现有需求:172.16.1.0/24网段可以访问外网主机,但172.16.2.0/24网段不能。可以通过配置基本ACL来达到需求。
Step 1:基础配置。配置路由器的端口IP和静态路由,主机的配置省略。
路由器R1的基础配置:
路由器R2的基础配置:
Step 2:在R1路由器上配置基本ACL
命令:acl [ number ]
创建一个ACL,并进入ACL视图。基本ACL的编号为2000-2999。
命令:rule [ rule-id ] { deny | permit } source { source-address source-wildcard | any }
增加或修改ACL的规则。
①deny用来指定拒绝符合条件的数据包,permit用来指定允许符合条件的数据包。
②source用来指定ACL规则匹配报文的源地址信息,any表示任意源地址。
③wildcard指反掩码。关于反掩码笔记下面会有介绍。
命令:traffic-filter { inbound | outbound }acl{ acl-number }
在接口上配置基于ACL对报文进行过滤。
inbound应用在端口的入方向匹配的流量上
outbound应用在端口的出方向匹配的流量上
若该ACL应用在路由器R1的端口GE0/0/0上,也就是R1连接R2的端口。现在的需求是禁止172.16.2.0网段访问10.1.1.0网段,数据流方向是从R1到R2。所以要匹配的数据流是出方向的。
Step 3:配置验证
本示例中,主机B发送的流量到达RTA后,会匹配ACL 2000中创建的规则rule deny source 172.16.2.0 0.0.0.255,因而将被拒绝继续转发到Internet。
主机A发送的流量不匹配任何规则,所以会被RTA正常转发到Internet。
命令:display acl <acl-number>
可以验证配置的基本ACL。
配置的ACL只有一条规则,即拒绝源IP地址在172.16.2.0/24范围的所有IP报文。由于在172.16.2.0网段的主机B上使用ping命令验证了两次,每次ping会发送5个数据包,所以上图中显示该条ACL一共成功匹配了10次数据包(10 matches)。
命令:display traffic-filter applied-record
可以查看设备上所有基于ACL进行报文过滤的应用信息。这些信息可以帮助用户了解报文过滤的配置情况并核对其是否正确,同时也有助于进行相关的故障诊断与排查。
Tips:补充知识
反掩码(通配符掩码)告诉路由器为了判断出匹配,它需要检查IP地址中的多少位。
反掩码中,0表示要检查的位,1表示不需要检查的位。而在IP子网掩码中,数字1、0用来决定网络、子网,还是相应的主机的IP地址。
反掩码中,可以用255.255.255.255表示所有IP地址,因为全为1说明32位中所有位都不需检查,此时可用any替代。而0.0.0.0的通配符则表示所有32位都必须要进行匹配,它只表示一个IP地址,可以用host表示。
简单计算反掩码的方法:使用代表全1的网络IP按每位减去子网掩码代表的二进制数字,即可得到反掩码。如下图所示:例如172.16.2.0/24的子网掩码为24位,计算得出反掩码为0.0.0.255。
高级ACL(3000-3999)的配置方法
基本ACL可以依据源IP地址进行报文过滤,而高级ACL能够依据源/目的IP地址、源/目的端口号、网络层及传输层协议以及IP流量分类和TCP标记值等各种参数(SYN|ACK|FIN等)进行报文过滤。
拓扑如下图所示。在基本ACL拓扑图的基础上,在代表外网的10.1.1.0/24网段作出了一些更改,该网段现在有两台服务器,一台服务器提供FTP服务(10.1.1.1),一台服务器提供私有服务(10.1.1.2),其他设备配置不变。
关于各设备的基础配置(端口配置,互联调通,服务器配置)此处已省略。现在有一个需求,PCA不能通过FTP协议访问FTP服务器,PCB不能访问私有服务器。因为涉及端口号,网络协议等,所以高级ACL可以满足需求。
Step 1:首先对基础配置进行验证
PCA可以正常访问FTP服务器(10.1.1.1)
正常登陆,可以读取到服务器的文件列表。
PCB可以正常访问私有服务器(10.1.1.2)
正常访问,成功发送4个ping包。
Step 2:在路由器R1上配置高级ACL
第一条规则匹配并拒绝源地址为172.16.1.1访问10.1.1.1的tcp 21端口。即FTP协议的端口
第二条规则匹配并拒绝源地址为172.16.2.1访问10.1.1.2
第三条规则用于匹配所有IP报文,并对报文执行允许动作。
在R1的出方向端口GE0/0/0上应用高级ACL
Step 3:配置验证
PCA不能访问FTP服务器。
PCB不能访问私有服务器。
小结
高级ACL可以基于哪些条件来定义规则?
高级ACL可以基于源/目的IP地址,源/目的端口号,协议类型以及IP流量分类和TCP标记值(SYN|ACK|FIN等)等参数来定义规则。
参考链接:
https://support.huawei.com/enterprise/zh/knowledge/EKB1000070062