网络基础知识笔记07:ACL访问控制列表

网络基础知识笔记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

 

posted @ 2021-04-29 00:46  若水一瓢  阅读(1342)  评论(0编辑  收藏  举报