🤔什么是 ACL?

访问控制列表 ACL(Access Control List)是由一条或多条规则组成的集合。所谓规则,是指描述报文匹配条件的判断语句,这些条件可以是报文的源地址、目的地址、端口号等。

ACL 本质上是一种报文过滤器,规则是过滤器的滤芯。设备基于这些规则进行报文匹配,可以过滤出特定的报文,并根据应用 ACL 的业务模块的处理策略来允许或阻止该报文通过。

控制的对象(数据包的五元组):源 IP,目的 IP,协议,源端口,目的端口

对数据包的过滤

ACL 组成

ACL 是由一系列 deny,permit 语句组成的:

  • permit --- 允许通过

  • deny --- 禁止通过

ACL的结构.png

通配符:

由 32 位二进制数构成,通常采用点分十进制来标识,用来匹配 IP 地址,0 和 1 可以连续,可以交叉

// 匹配最后一位为偶数
192.168.1.0 0.0.0.254

// 匹配最后一位为基数
192.168.1.1 0.0.0.254

正反掩码:

  • 网络掩码,子网掩码 --- 1 标识精确匹配,0 标识随意匹配

  • 反掩码 --- 0 标识精确匹配,1 标识随意匹配

🧑‍🏭工作原理

ACL 列表规则是按照从上往下的顺序执行,若一个规则中的匹配项被成功匹配后,会执行相应的动作,不会再往下进行匹配,每个 ACL 列表末尾都有一条隐式的规则语句(系统自带),思科为隐式拒绝所有 (deny all),华为 /H3C 如果 ACL 用于访问控制的时候,末尾规则语句 permit any,如果 ACL 用于路由过滤的时候,末尾规则语句是 deny any。

设备处理数据流量的基础过程

入站方向:

  • 如果没有写 ACL 的情况,就直接接收该数据流量

  • 如果写了 ACL 的情况,需要匹配 ACL 的规则,根据规则中的动作进行处理

出站方向(匹配路由表):

  • 如果路由表中没有相关目标网段的路由条目,直接丢弃数据包

  • 如果路由表中有相关目标路由的路由条目,则根据路由条目把数据包转发到相对应的出接口

🎏ACL 的分类和标识

分类

标准 ACL(思科)/ 基本 ACL(华为 /H3C):检查数据包的源 IP 地址

扩展 ACL(思科)/ 高级 ACL(华为 /H3C):检查数据包的五元组

标识

编号 ACL:

用唯一的编号来标识 ACL,不太易于管理,但是方便书写,默认插入的新 ACL 语句在最后,当 ACL 某条规则写错的时候,如果要删除某一个规则的时候,整个 ACL 列表都会被删除

  • 思科:

    • 标准:1-99,1300-1999

    • 拓展:100-199,2000-2699

  • 华为 /H3C:

    • 基本:2000-2999

    • 高级:3000-3999

命名 ACL:

用名称来标识 ACL,需要定义名称,但是方便管理,可以单独删除 ACL 的某个规则语句,可以灵活调整插入的位置,通过序列号插入

说明:

命名型 ACL 一旦创建成功,便不允许用户再修改其名称。如果删除 ACL 名称,则表示删除整个 ACL。

仅基本 ACL 与基本 ACL6,以及高级 ACL 与高级 ACL6,可以使用相同的 ACL 名称;其他类型 ACL 之间,不能使用相同的 ACL 名称。

基于对 IPv4 和 IPv6 支持情况的划分

划分如下:

  • ACL4:通常直接叫做「ACL」,特指仅支持过滤 IPv4 报文的 ACL。

  • ACL6:又叫做「IPv6 ACL」,特指仅支持过滤 IPv6 报文的 ACL。

以上两种 ACL,以及既支持过滤 IPv4 报文又支持过滤 IPv6 报文的 ACL,统一称做「ACL」。各类型 ACL 对 IPv4 和 IPv6 的支持情况。

⚙️配置

ACL 是一个匹配工具,创建完 ACL 之后需要调用,每个接口,协议,方向都只能允许有一个 ACL 列表

ACL 规则语句是从上到下一次匹配,最精确的最具体的条目一般放在顶部

配置 ACL 的时候必须要跟上通配符,如果没有写通配符的情况下,则默认是 0.0.0.0

在规划 ACL 的配置位置的时候,建议标准 ACL 更靠近目标,扩展 ACL 更靠近源

思科:

// 标准ACL
Route(config)# access-list 1 deny 192.168.40.1
Route(config)# access-list 1 permit any
Route(config)# int e0/1
Route(config-if)# ip access-group 1 ?                                              //调用ACL,?可选为in/out
Route# show access-lists                                                           //查看ACL列表

// 扩展ACL
Route(config)# access-list 100 deny tcp host 192.168.40.1 host 23.23.23.3 eq 23    //23端口通行
Route(config)# access-list 100 permit ip any any                                   //允许所有IP通行
Route(config)# int range e0/0-2
Route(config-if-range)# ip access-group 100 in
Route(config) #access-list 2 permit host 192.168.40.1                              //需要针对telnet技术进行使用
Route(config)# line vty 0 4
Route(config-line)# access-class 2 in
Route(config-line)# exit

// 命名ACL
Route(config)# ip access-list standard pc4nopc5            //命名ACL--标准
Route(config-std-nacl)# deny host 192.168.40.1
Route(config-std-nacl)# permit any
Route(config-std-nacl)# int e0/4
Route(config-if)# ip access-group pc4nopc5
Route(config)# ip access-list extended pc6nopc7  //命名ACL--拓展
Route(config-ext-nacl)# deny icmp host 192.168.60.1 host 192.168.70.1
Route(config-ext-nacl)# permit ip any any
Route(config)# int e0/2
Route(config-if)# ip access-group pc6nopc7 out

华为:

// 基本ACL
[Huawei] acl  2000
[Huawei-acl-adv-2000] rule  deny source 192.168.10.1 0
[Huawei-acl-adv-2000] rule  permit source any
[Huawei] interface GigabitEthernet0/0/0.20
[Huawei-GigabitEthernet0/0/0.20] dot1q termination vid 20
[Huawei-GigabitEthernet0/0/0.20] ip address 192.168.20.254 255.255.255.0
[Huawei-GigabitEthernet0/0/0.20] traffic-filter outbound acl 2000 //调用ACL
[Huawei-GigabitEthernet0/0/0.20] arp broadcast enable

// 高级ACL
[Huawei] acl 3000,
[Huawei-acl-adv-3000] rule deny icmp source 192.168.10.1 0 destination  192.168.20.1 0
[Huawei-acl-adv-3000] rule permit ip source any destination any
[Huawei] int g0/0/0.20
[Huawei-GigabitEthernet0/0/0.20] traffic-filter outbound acl  3000
[Huawei] user-interface vty 0 4                                                          // telnet依旧需要调用,
[Huawei-ui-vty0-4] acl  2000 inbound

H3C:

🧸参考文献

什么是 ACL - 华为 (huawei.com)