
ACL 访问控制列表
🤔什么是 ACL?
访问控制列表 ACL(Access Control List)是由一条或多条规则组成的集合。所谓规则,是指描述报文匹配条件的判断语句,这些条件可以是报文的源地址、目的地址、端口号等。
ACL 本质上是一种报文过滤器,规则是过滤器的滤芯。设备基于这些规则进行报文匹配,可以过滤出特定的报文,并根据应用 ACL 的业务模块的处理策略来允许或阻止该报文通过。
控制的对象(数据包的五元组):源 IP,目的 IP,协议,源端口,目的端口
对数据包的过滤
ACL 组成
ACL 是由一系列 deny,permit 语句组成的:
-
permit --- 允许通过
-
deny --- 禁止通过
通配符:
由 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: