当前位置:首页 » 《随便一记》 » 正文

ACL原理及配置

11 人参与  2023年04月07日 10:09  分类 : 《随便一记》  评论

点击全文阅读


文章目录

ACL原理及配置ACL概述ACL组成规则编号(Rule ID)通配符(Wildcard)ACL的分类与标识基本ACL&高级ACL ACL的匹配机制ACL的匹配顺序及匹配结果 ACL的匹配位置ACL的基础配置

ACL原理及配置

技术背景:需要一个工具,实现流量过滤

某公司为保证财务数据安全,进制研发部门访问财务服务器,但总裁办公室不受限制

ACL概述

访问控制值列表(ACL)

通过ACL可以实现对网络中报文流的精确识别和控制,达到控制网络访问行为、防止网络攻击和提高网络带宽利用率的目的,从而切实保障网络环境的安全性和网络服务质量的可靠性。

应用于路由器接口的指令列表,用于指定哪些数据包可以接收转发,哪些数据包需要拒绝。

ACL是一系列permitdeny语句组成的、有序规则的列表。ACL是一个匹配工具,能够对报文进行匹配和区分。

permit(允许):数据包过滤,允许那些流量通过
deny (拒绝):数据包过滤,拒绝那些流量通过

image-20220124180105671

ACL应用

匹配IP流量在Traffic-filter中被调用在NAT(Network Address Translation)中被调用在路由策略中被调用在防火墙的策略部署中被调用在QoS中被调用其他……

ACL本身作为一个流量过滤工具现在已经使用得很少了,更多地还是被用来匹配、分类

ACL组成

ACL由若干条permit或deny语句组成。每条语句就是该ACL的一条规则,每条语句中的permit或deny就是与这条规则相对应的处理动作。原本华为和思科的ACL都是默认拒绝一切,但是,华为模拟器默认是允许一切。

ACL的组成:

ACL编号:在网络设备上配置ACL时,每个ACL都需要分配一个编号,称为ACL编号,用来标识ACL。规则:一个ACL通常由若干条“permit/deny”语句组成,每条语句就是该ACL的一条规则。规则编号:每条规则都有一个相应的编号,称为规则编号,用来标识ACL规则。可以自定义,也可以系统自动分配。ACL规则的编号范围是0~4294967294,所有规则均按照规则编号从小到大进行排序。动作:每条规则中的permit或deny,就是与这条规则相对应的处理动作。permit指“允许”,deny指“拒绝”,但是ACL一般是结合其他技术使用,不同的场景,处理动作的含义也有所不同。 比如:ACL如果与流量过滤技术结合使用(即流量过滤中调用ACL),permit就是“允许通行”的意思,deny就是“拒绝通行”的意思。 匹配项:ACL定义了极其丰富的匹配项。例子中体现的源地址,ACL还支持很多其他规则匹配项。

规则编号(Rule ID)

规则编号(Rule ID):

一个ACL中的每一条规则都有一个相应的编号,称为规则编号,用来标识ACL规则。可以自定义,也可以系统自动分配。

步长(Step):

步长是系统自动为ACL规则分配编号时,每个相邻规则编号之间的差值,这个差值称为“步长”。缺省值/缺省步长为5。所以规则编号就是5/10/15…以此类推。

步长的作用是为了方便后续在旧规则之间,插入新的规则。

如果手工指定了一条规则,但未指定规则编号,系统就会使用大于当前ACL内最大规则编号且是步长整数倍的最小整数作为规则编号。步长可以调整,如果将步长改为2,系统则会自动从当前步长值开始重新排列规则编号,规则编号就变成2、4、6…。

Rule ID分配规则:

系统为ACL中首条未手工指定编号的规则分配编号时,使用步长值(例如步长=5,首条规则编号为5)作为该规则的起始编号;为后续规则分配编号时,则使用大于当前ACL内最大规则编号且是步长整数倍的最小整数作为规则编号。

那步长的作用是什么?直接rule 1/2/3/4…为什么不可以?

问:如果希望增加一条规则,该如何处理?

答:可以在rule 10和rule 15之间,手工加入一条rule 11。

因此,设置一定长度的步长的作用,是方便后续在旧规则之间插入新的规则。

通配符(Wildcard)

通配符是一个32比特长度的数值,用于指示IP地址中,哪些比特位需要严格匹配,哪些比特位无需匹配。

通配符通常采用类似网络掩码的点分十进制形式表示,但是含义却与网络掩码完全不同。

当进行IP地址匹配的时候,后面会跟着32位掩码位,这32位称为通配符。

通配符,也是点分十进制格式,换算成二进制后,0表示“匹配”,1表示“不关心”。

具体看下这2条规则:

rule 5: 拒绝源IP地址为10.1.1.1报文通过——因为通配符为全0,所以每一位都要严格匹配,因此匹配的是主机IP地址10.1.1.1

rule 15:允许源IP地址为10.1.1.0/24网段地址的报文通过——因为通配符:0.0.0.11111111,后8位为1,表示不关心,因此10.1.1.xxxxxxxx 的后8位可以为任意值,所以匹配的是10.1.1.0/24网段。

例子:如果要精确匹配192.168.1.1/24这个IP地址对应的网段地址,通配符是多少?

可以得出:网络位需要严格匹配,主机位无所谓,因此通配符为0.0.0.255

如果想匹配192.168.1.0/24网段中的奇数IP地址,通配符该怎么写呢?

我们先来看一看,奇数IP地址都有哪些:192.168.1.1、192.168.1.5、192.168.1.11……后八位写成二进制:192.168.1.00000001、192.168.1.00000101、192.168.1.00001011……可以看出共同点:最后8位的高7位是任意值,最低位固定为1,因此答案是:192.168.1.1 0.0.0.254(0.0.0.11111110)

这就得出了通配符的一个特点:通配符中的1或者0是可以不连续的。

还有两个特殊的通配符:

当通配符全为0来匹配IP地址时,表示精确匹配某个IP地址;当通配符全为1来匹配0.0.0.0地址时,表示匹配了所有IP地址。

ACL的分类与标识

不同厂商编号不同

基于ACL规则定义方式的分类

image-20220124182524398

基于ACL标识方法的分类

image-20220124182532209

基本ACL&高级ACL

ACL的匹配机制

不同厂商机制不同

ACL的匹配机制概括来说就是:

配置ACL的设备接收报文后,会将该报文与ACL中的规则逐条进行匹配,如果不能匹配上,就会继续尝试去匹配下一条规则。

一旦匹配上,则设备会对该报文执行这条规则中定义的处理动作,并且不再继续尝试与后续规则匹配。

匹配流程

如果ACL不存在,则返回ACL匹配结果为:不匹配。如果ACL存在,则查找设备是否配置了ACL规则。如果规则不存在,则返回ACL匹配结果为:不匹配。如果规则存在,则系统会从ACL中编号最小的规则开始查找。如果匹配上了permit规则,则停止查找规则,并返回ACL匹配结果为:匹配(允许)。如果匹配上了deny规则,则停止查找规则,并返回ACL匹配结果为:匹配(拒绝)。如果未匹配上规则,则继续查找下一条规则,以此循环。如果一直查到最后一条规则,报文仍未匹配上,则返回ACL匹配结果为:不匹配。从整个ACL匹配流程可以看出,报文与ACL规则匹配后,会产生两种匹配结果:“匹配”和“不匹配”。匹配(命中规则):指存在ACL,且在ACL中查找到了符合匹配条件的规则。不论匹配的动作是“permit”还是“deny”,都称为“匹配”,而不是只是匹配上permit规则才算“匹配”。不匹配(未命中规则):指不存在ACL,或ACL中无规则,再或者在ACL中遍历了所有规则都没有找到符合匹配条件的规则。以上三种情况,都叫做“不匹配”。

匹配原则:一旦命中即停止匹配。

ACL的匹配顺序及匹配结果

系统按照ACL规则编号从小到大的顺序进行报文匹配。规则编号越小越容易被匹配。

“允许”是指允许流量通过吗?如果是被其他功能调用,那么不叫“通过”,是匹配成功放在接口上的话,代表过滤

一条ACL可以由多条denypermit语句组成,每一条语句描述一条规则,这些规则可能存在包含关系,也可能有重复或矛盾的地方,因此ACL的匹配顺序是十分重要的。

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

自动排序,是指系统使用“深度优先”的原则,将规则按照精确度从高到低进行排序,并按照精确度从高到低的顺序进行报文匹配。配置顺序,系统按照ACL规则编号从小到大的顺序进行报文匹配,规则编号越小越容易被匹配。——这个就是我们前面提到的匹配顺序。

如果后面又添加了一条规则,则这条规则会被加入到相应的位置,报文仍然会按照从小到大的顺序进行匹配。

ACL的匹配位置

image-20220124203002031

ACL的基础配置

基本ACL的基础配置命令

创建基本ACL

[Huawei] acl [ number ] acl-number [ match-order config ]

acl-number:指定访问控制列表的编号。

match-order config:指定ACL规则的匹配顺序,config表示配置顺序。

使用编号(2000~2999)创建一个数字型的基本ACL,并进入基本ACL视图。

[Huawei] acl name acl-name { basic | acl-number } [ match-order config ]

使用名称创建一个命名型的基本ACL,并进入基本ACL视图。

acl-name:指定创建的ACL的名称。

basic:指定ACL的类型为基本ACL。

配置基本ACL的规则

[Huawei-acl-basic-2000] rule [ rule-id ] { deny | permit } [ source {source-address source-wildcard | any } | time-range time-name ]

在基本ACL视图下,通过此命令来配置基本ACL的规则。

rule-id:指定ACL的规则ID。

deny:指定拒绝符合条件的报文。

permit:指定允许符合条件的报文。

source { *source-address source-wildcard* | any }:指定ACL规则匹配报文的源地址信息。如果不配置,表示报文的任何源地址都匹配。其中:

source-address:指定报文的源地址。source-wildcard:指定源地址通配符。any:表示报文的任意源地址。相当于source-address为0.0.0.0或者source-wildcard为255.255.255.255。time-range time-name:指定ACL规则生效的时间段。其中,time-name表示ACL规则生效时间段名称。如果不指定时间段,表示任何时间都生效。

高级ACL的基础配置命令

创建高级ACL

[Huawei] acl [ number ] acl-number [ match-order config ]

使用编号(3000~3999)创建一个数字型的高级ACL,并进入高级ACL视图。

[Huawei] acl name acl-name { advance | acl-number } [ match-orderconfig ]

使用名称创建一个命名型的高级ACL,进入高级ACL视图。

配置基本ACL的规则

根据IP承载的协议类型不同,在设备上配置不同的高级ACL规则。对于不同的协议类型,有不同的参数组合。

当参数protocol为IP时,高级ACL的命令格式为

rule [ rule-id ] { deny | permit } ip [ destination {destination-address destination-wildcard | any } | source { source-addresssource-wildcard | any } | time-range time-name | [ dscp dscp | [ tos tos |precedence precedence ] ] ]

在高级ACL视图下,通过此命令来配置高级ACL的规则。

当参数protocol为TCP时,高级ACL的命令格式为

rule [ rule-id ] { deny | permit } { protocol-number | tcp } [destination { destination-address destination-wildcard | any } |destination-port { eq port | gt port | lt port | range port-start port-end } |source { source-address source-wildcard | any } |source-port { eq port | gt port | lt port | range port-start port-end } | tcp-flag { ack | fin | syn } * |time-range time-name ] *

在高级ACL视图下,通过此命令来配置高级ACL的规则。


点击全文阅读


本文链接:http://zhangshiyu.com/post/58702.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1