ACL访问控制列表

  • 随着网络的飞速发展,网络安全和网络服务质量QoS (Quality of Service)问题日益突出,对正常的网络通信造成了很大的影响。因此,提高网络安全性和服务质量迫在眉睫,我们需要对网络进行控制。比如,需要借助一个工具帮助实现一些流量的过滤。

    • 园区重要服务器资源被随意访问,园区机密信息容易泄露,造成安全隐患。
    • Internet病毒肆意侵略园区内网,内网环境的安全性堪忧。
    • 网络带宽被各类业务随意挤占,服务质量要求最高的语音、视频业务的带宽得不到保障,造成用户体验差。
  • ACL可以通过对网络中报文流的精确识别,与其他技术结合,达到控制网络访问行为、防止网络攻击和提高网络带宽利用率的目的,从而切实保障网络环境的安全性和网络服务质量的可靠性。

基本概念

ACL是由permit或deny语句组成的一系列有顺序的规则的集合;

每条语句就是该ACL的一条规则,每条语句中的permit或deny就是与这条规则相对应的处理动作。

​​
ACL是一个匹配工具,能够对报文进行匹配和区分;ACL还能够用于匹配路由条目。

五元组:源IP地址,目的IP地址,协议类型,源端口(随机分配),目的端口(应用/服务所侦听的端口)

组成

  • ACL编号:在网络设备上配置ACL时,每个ACL都需要分配一个编号,称为ACL编号,用来标识ACL。不同分类的ACL编号范围不同,这个后面具体讲。

  • 规则编号(Rule ID):每条规则都有一个相应的编号,称为规则编号,用来标识ACL规则。可以自定义,也可以系统自动分配。ACL规则的编号范围是0~4294967294,所有规则均按照规则编号从小到大进行排序。

    • 步长(Step)
      步长是系统自动为ACL规则分配编号时,每个相邻规则编号之间的差值,缺省值为5。步长的作用是为了方便后续在旧规则之间,插入新的规则。
    • Rule ID分配规则
      系统为ACL中首条未手工指定编号的规则分配编号时,使用步长值(例如步长=5,首条规则编号为5)作为该规则的起始编号;
      为后续规则分配编号时,则使用大于当前ACL内最大规则编号且是步长整数倍的最小整数作为规则编号。(如:最开始设置6,下一个系统自动生成的是10)
  • 动作:每条规则中的permit或deny,就是与这条规则相对应的处理动作。permit指“允许”,deny指“拒绝”,但是ACL一般是结合其他技术使用,不同的场景,处理动作的含义也有所不同。

    • 比如:ACL如果与流量过滤技术结合使用(即流量过滤中调用ACL),permit就是“允许通行”的意思,deny就是“拒绝通行”的意思。
  • 匹配项:ACL定义了极其丰富的匹配项。例如,二层以太网帧头信息(如源MAC、目的MAC、以太帧协议类型)、三层报文信息(如目的地址、协议类型)以及四层报文信息(如TCP/UDP端口号)等。

    • 通配符 (Wildcard)
      通配符是一个32比特长度的数值,用于指示IP地址中,哪些比特位需要严格匹配,哪些比特位无需匹配。
      通配符通常采用类似网络掩码的点分十进制形式表示,但是含义却与网络掩码完全不同。
      匹配规则:“0”表示“严格匹配”;“1”表示“任意”

    • 特点:通配符中的1或者0是可以不连续的。

      • 具体看下这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)
    • 两个特殊的通配符:
      当通配符全为0来匹配IP地址时,表示精确匹配某个IP地址;
      当通配符全为1来匹配0.0.0.0地址时,表示匹配了所有IP地址。

      ACL的分类与标识

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

      分类编号范围规则定义描述
      基本ACL2000~2999仅使用报文的源IP地址、分片信息和生效时间段信息来定义规则。
      高级ACL3000~3999可使用IPv4报文的源IP地址、目的IP地址、IP协议类型、ICMP类型、TCP源/目的端口号、UDP源/目的端口号、生效时间段等来定义规则。
      二层ACL4000~4999使用报文的以太网帧头信息来定义规则,如根据源MAC地址、目的MAC地址、二层协议类型等。
      用户自定义ACL5000~5999使用报文头、偏移位置、字符串掩码和用户自定义字符串来定义规则。
      用户ACL6000~6999既可使用IPv4报文的源IP地址或源UCL(User Control List)组,也可使用目的IP地址或目的UCL组、IP协议类型、ICMP类型、TCP源端口/目的端口、UDP源端口/目的端口号等来定义规则。

      ​​

      基于ACL标识方法的分类

      分类规则定义描述
      数字型ACL传统的ACL标识方法。创建ACL时,指定一个唯一的数字标识该ACL。
      命名型ACL通过名称代替编号来标识ACL。

      注意:用户在创建ACL时可以为其指定编号,不同的编号对应不同类型的ACL。同时,为了便于记忆和识别,用户还可以创建命名型ACL,即在创建ACL时为其设置名称。命名型ACL,也可以是“名称 数字”的形式,即在定义命名型ACL时,同时指定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的匹配顺序及匹配结果

      配置顺序(config模式):系统按照ACL规则编号从小到大的顺序进行报文匹配,规则编号越小越容易被匹配。一条ACL可以由多条“deny或permit”语句组成,每一条语句描述一条规则,这些规则可能存在包含关系,也可能有重复或矛盾的地方,因此ACL的匹配顺序是十分重要的。

      华为设备支持两种匹配顺序:

    • 自动排序(auto模式 缺省的ACL匹配顺序),是指系统使用“深度优先”的原则,将规则按照精确度从高到低进行排序,并按照精确度从高到低的顺序进行报文匹配。——这个比较复杂,这里就不具体展开了,感兴趣的同学可以课后查看资料。
    • 配置顺序(config模式),系统按照ACL规则编号从小到大的顺序进行报文匹配,规则编号越小越容易被匹配。——这个就是我们前面提到的匹配顺序。
      如果后面又添加了一条规则,则这条规则会被加入到相应的位置,报文仍然会按照从小到大的顺序进行匹配。
    • 华为ACL接口下调用时,默认permit any
      思科ACL接口下调用时,默认deny any​
    • 匹配结果:(如图所示,以192.168.1.3/24为例)首先理解ACL 2000的含义:

      • rule 1:允许源IP地址为192.168.1.1的报文
        rule 2:允许源IP地址为192.168.1.2的报文
        rule 3:拒绝源IP地址为192.168.1.2的报文
        rule 4:允许其他所有IP地址的报文
    • 当源IP地址为192.168.1.3的报文经过配置了ACL的设备时:

      • 首先查看rule 1,发现不匹配;
        继续查看rule 2,发现仍不匹配;
        继续查看rule 3,发现匹配,且是“拒绝”动作。
    • 注意:ACL技术总是与其他技术结合在一起使用的,因此,所结合的技术不同,“允许 (permit)”及“拒绝 (deny)”的内涵和作用也会不同。例如,当ACL技术与流量过滤技术结合使用时,permit就是“允许通行”的意思,deny就是“拒绝通行”的意思。

    • 配置思路:

    • 定义ACL匹配参数

    • 定义匹配参数的动作

    • 将ACL挂接到某个接口下

      1. 同设备同接口方向下,只能调用一个ACL(要再挂接一个先undo之前的)
    • //创建基本ACL
      [Huawei] acl [ number ] acl-number [ match-order config ]
      使用编号(2000~2999)创建一个数字型的基本ACL,并进入基本ACL视图。
      	acl-number:指定访问控制列表的编号。
      	match-order config:指定ACL规则的匹配顺序,config表示配置顺序。
      [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 ] 
      	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规则生效时间段名称。如果不指定时间段,表示任何时间都生效。
      //挂接
      [Huawei-acl-basic-2000] int g0/0/0
      [Huawei-GigabitEthernet0/0/0] traffic-filter { inbound | outbound } acl [ number ]
      //取消挂接
      [Huawei-GigabitEthernet0/0/0] undo traffic-filter { inbound | outbound }
      

      高级ACL的基础配置命令

      配置高级ACL的规则  根据IP承载的协议类型不同,在设备上配置不同的高级ACL规则。对于不同的协议类型,有不同的参数组合。
      rule [ rule-id ] { deny | permit } 协议名称/协议号 [ destination { destination-address destination-wildcard | any } | source { source-address source-wildcard | any } | time-range time-name | [ dscp dscp | [ tos tos | precedence precedence ] ] ] 
      //当参数protocol为IP时:
      rule [ rule-id ] { deny | permit } ip [ destination { destination-address destination-wildcard | any } | source { source-address source-wildcard | any } | time-range time-name | [ dscp dscp | [ tos tos | precedence precedence ] ] ] 
      	ip :指定ACL规则匹配报文的协议类型为IP。
      	destination { destination-address destination-wildcard | any }:指定ACL规则匹配报文的目的地址信息。如果不配置,表示报文的任何目的地址都匹配。
      	dscp dscp:指定ACL规则匹配报文时,区分服务代码点(Differentiated Services Code Point),取值为:0~63。
      	tos tos:指定ACL规则匹配报文时,依据服务类型字段进行过滤,取值为:0~15。
      	precedence precedence:指定ACL规则匹配报文时,依据优先级字段进行过滤。precedence表示优先级字段值,取值为:0~7。
      //当参数protocol为TCP时:
      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 ] *
      
      

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值