ACL的用处非常的广泛他在匹配IP流量、Traffic-filter中被调用、在NAT(Network Address Translation)中被调用、在路由策略中被调用、在防火墙的策略部署中被调用、在QoS中被调用等许多地方都有用到。关于ACL的组成和功能有以下两点:
下面是一条完整的ACL配置:
[Huawei]acl 2000
[Huawei-acl-basic-2000]rule 5 permit source 1.1.1.0 0.0.0.255
acl | 2000 |
---|---|
访问控制列表的编号 |
ACL编号:在网络设备上配置ACL时,每个ACL都需要分配一个编号,称为ACL编号,用来标识ACL。不同分类的ACL编号范围不同,这个后面具体讲。
下面是用户自定义的一条规则:
rule | 5 | permit | source 1.1.1.0 | 0.0.0.255 |
---|---|---|---|---|
规则编号 | 动作 | 匹配项 | 通配符 |
(1)规则:前面提到了,一个ACL通常由若干条“permit/deny”语句组成,每条语句就是该ACL的一条规则。
规则编号:每条规则都有一个相应的编号,称为规则编号,用来标识ACL规则。可以自定义,也可以系统自动分配。ACL规则的编号范围是0~4294967294,所有规则均按照规则编号从小到大进行排序。
(2)动作:每条规则中的permit或deny,就是与这条规则相对应的处理动作。permit指“允许”,deny指“拒绝”,但是ACL一般是结合其他技术使用,不同的场景,处理动作的含义也有所不同。
(3)匹配项:ACL定义了极其丰富的匹配项。例子中体现的源地址,ACL还支持很多其他规则匹配项。例如,二层以太网帧头信息(如源MAC、目的MAC、以太帧协议类型)、三层报文信息(如目的地址、协议类型)以及四层报文信息(如TCP/UDP端口号)等。
(4)通配符:在通配符中,1表示随机,0表示精确匹配;0和1的位置没有限制。后面具体讲。
所以这条语句的具体意思是:允许源地址是1.1.1.0 - 1.1.1.255的所有流量通过。值得注意的是在接口视图下应用ACL系统会在ACL末尾添加一条隐含的规则默认是允许所有流量通过;在VTY用户视图下应用ACL系统也会在ACL末尾添加一条隐含的规则默认是拒绝所有流量通过。
在一条ACL中可以有多个规则每个规则都有一个相应的编号。
acl 000
rule 5 deny source 10.1.1.1 0
rule 10 deny source 10.1.1.2 0
rule 15 permit source 10.1.1.0 0.0.0.255
步长,是指系统自动为ACL规则分配编号时,每个相邻规则编号之间的差值。系统为ACL中首条未手工指定编号的规则分配编号时,使用步长值作为该规则的起始编号;为后续规则分配编号时,则使用大于当前ACL内最大规则编号且是步长整数倍的最小整数作为规则编号。ACL的缺省步长为5,使用下面的命令可以修改步长。
[Huawei]acl 2000
[Huawei-acl-basic-2000]step 2 //修改步长为2
如果重新调整了步长值(例如调整为2),系统则会自动从当前步长值开始重新排列规则编号,规则编号变成2、4、6…。恢复步长值为缺省值后,系统则会立刻按照缺省步长重新调整规则编号,规则编号变成5、10、15…。
设置步长的作用,在于方便后续在旧规则之间插入新的规则。例如:假设,一条ACL中,已包含了三条规则rule 5、rule 10、rule 15。如果希望源IP地址为10.1.1.3的报文也被拒绝通过,该如何处理?
rule 5 deny source 10.1.1.1 0 //表示拒绝源IP地址为10.1.1.1的报文通过
rule 10 deny source 10.1.1.2 0 //表示拒绝源IP地址为10.1.1.2的报文通过
rule 15 permit source 10.1.1.0 0.0.0.255 //表示允许源IP地址为10.1.1.0/24网段地址的报文通过
由于ACL匹配报文时遵循一旦命中即停止匹配的原则,所以源IP地址为10.1.1.1和10.1.1.2的报文,会在匹配上编号较小的rule 5和rule 10后停止匹配,从而被系统拒绝通过;而源IP地址为10.1.1.3的报文,则只会命中rule 15,从而得到系统允许通过。若想让源IP地址为10.1.1.3的报文也被拒绝通过,则必须为该报文配置一条新的deny规则。可以在rule 15之前插入一条新规则rule 11,这样源IP地址为10.1.1.3的报文,就会因先命中rule 11而被系统拒绝通过。插入rule 11后,该ACL的旧规则编号不受影响,且新的规则排序为rule 5、rule 10、rule 11、rule 15。
rule 5 deny source 10.1.1.1 0 //表示禁止源IP地址为10.1.1.1的报文通过
rule 10 deny source 10.1.1.2 0 //表示禁止源IP地址为10.1.1.2的报文通过
rule 11 deny source 10.1.1.3 0 //表示拒绝源IP地址为10.1.1.3的报文通过
rule 15 permit source 10.1.1.0 0.0.0.255 //表示允许源IP地址为10.1.1.0网段地址的报文通过
关于ACL的匹配顺序有两种模式配置顺序和自动排序。
配置顺序,即系统按照ACL规则编号从小到大的顺序进行报文匹配,规则编号越小越容易被匹配。
自动排序,是指系统使用“深度优先”的原则,将规则按照精确度从高到低进行排序,并按照精确度从高到低的顺序进行报文匹配。规则中定义的匹配项限制越严格,规则的精确度就越高,即优先级越高,系统越先匹配。
关于通配符掩码可以类比子网掩码、反掩码。具体见下表:
类别 | 区别 | 用处 |
---|---|---|
子网掩码 | 在掩码中,1表示精确匹配,0表示随机;连续的1和0组成。 | 配置IP地址时要配置子网掩码 |
反掩码 | 在反掩码中,1表示随机,0表示精确匹配;连续的0和1组成。 | OSPF配置时用到反掩码 |
通配符掩码 | 在通配符中,1表示随机,0表示精确匹配;0和1的位置没有限制。 | ACL配置用到通配符掩码 |
下面的几个例子理解通配符掩码的用法:
192.168.1.1 0.0.0.0
192.168.1.1 255.255.255.255 //前面的IP地址可以任意写
10.1.1.1 0.0.0.255
192.168.1.1 0.0.0.254 //匹配奇数
192.168.1.0 0.0.0.254 //匹配偶数
ACL可以分为以下几类,ACL的编号代表不同的ACL种类。
类型 | 区别 |
---|---|
基本ACL | 编号范围2000~2999,仅使用报文的源IP地址、分片信息和生效时间段信息来定义规则。 |
高级ACL | 编号范围3000~3999 ,可使用IPv4报文的源IP地址、目的IP地址、IP协议类型、ICMP类型、TCP源/目的端口号、UDP源/目的端口号、生效时间段等来定义规则。 |
二层ACL | 编号范围4000~4999,使用报文的以太网帧头信息来定义规则,如根据源MAC地址、目的MAC地址、二层协议类型等。 |
用户自定义ACL | 编号范围5000~5999,使用报文头、偏移位置、字符串掩码和用户自定义字符串来定义规则。 |
用户ACL | 编号范围6000~6999,既可使用IPv4报文的源IP地址或源UCL(User Control List)组,也可使用目的IP地址或目的UCL组、IP协议类型、ICMP类型、TCP源端口/目的端口、UDP源端口/目的端口号等来定义规则。 |
关于ACL的标识有两种:数字型ACL和命名型ACL。
ACL的匹配位置是在inbound(入站)方向和outbound(出站)方向:
值得注意的是outbound方向对路由器自己产生的流量没有作用。
system-view
[Huawei] acl 2001
[Huawei-acl-basic-2001] rule permit source 192.168.1.3 0
system-view
[Huawei] acl 2001
[Huawei-acl-basic-2001] rule permit source 192.168.1.3 0
[Huawei-acl-basic-2001] rule deny source 192.168.1.0 0.0.0.255
[Huawei-acl-basic-2001] description Permit only 192.168.1.3 through
system-view
[Huawei] time-range working-time 8:00 to 18:00 working-day
[Huawei] acl name work-acl basic
[Huawei-acl-basic-work-acl] rule deny source 192.168.1.0 0.0.0.255 time-range working-time
下面的配置中,在ACL 2001中引用了时间段“test”,“test”包含了三个生效时间段:
time-range test 8:00 to 18:00 working-day
time-range test 14:00 to 18:00 off-day
time-range test from 00:00 2014/01/01 to 23:59 2014/12/31
acl number 2001
rule 5 permit time-range test
时间段“test”最终描述的时间范围为:2014年的周一到周五每天8:00到18:00以及周六和周日下午14:00到18:00。
在ACL 3001中配置规则,允许源IP地址是192.168.1.3主机地址且目的IP地址是192.168.2.0/24网段地址的ICMP报文通过。
system-view
[Huawei] acl 3001
[Huawei-acl-adv-3001] rule permit icmp source 192.168.1.3 0 destination 192.168.2.0 0.0.0.255
在名称为deny-telnet的高级ACL中配置规则,拒绝IP地址是192.168.1.3的主机与192.168.2.0/24网段的主机建立Telnet连接。
system-view
[Huawei] acl name deny-telnet
[Huawei-acl-adv-deny-telnet] rule deny tcp destination-port eq telnet source 192.168.1.3 0 destination 192.168.2.0 0.0.0.255
在名称为no-web的高级ACL中配置规则,禁止192.168.1.3和192.168.1.4两台主机访问Web网页(HTTP协议用于网页浏览,对应TCP端口号是80),并配置ACL描述信息为Web access restrictions。
system-view
[Huawei] acl name no-web
[Huawei-acl-adv-no-web] description Web access restrictions
[Huawei-acl-adv-no-web] rule deny tcp destination-port eq 80 source 192.168.1.3 0
[Huawei-acl-adv-no-web] rule deny tcp destination-port eq 80 source 192.168.1.4 0
在ACL 3002中配置规则,拒绝192.168.2.0/24网段的主机主动发起的TCP握手报文通过,允许该网段主机被动响应TCP握手的报文通过,实现192.168.2.0/24网段地址的单向访问控制。同时,配置ACL规则描述信息分别为Allow the ACK TCP packets through、Allow the RST TCP packets through和Do not Allow the other TCP packet through。
完成以上配置,必须先配置两条permit规则,允许192.168.2.0/24网段的ACK=1或RST=1的报文通过,再配置一条deny规则,拒绝该网段的其他TCP报文通过。
system-view
[Huawei] acl 3002
[Huawei-acl-adv-3002] rule permit tcp source 192.168.2.0 0.0.0.255 tcp-flag ack
[Huawei-acl-adv-3002] display this //如果配置规则时未指定规则编号,则可以通过此步骤查看到系统为该规则分配的编号,然后根据该编号,为该规则配置描述信息。
#
acl number 3002
rule 5 permit tcp source 192.168.2.0 0.0.0.255 tcp-flag ack //系统分配的规则编号是5
#
return
[Huawei-acl-adv-3002] rule 5 description Allow the ACK TCP packets through
[Huawei-acl-adv-3002] rule permit tcp source 192.168.2.0 0.0.0.255 tcp-flag rst
[Huawei-acl-adv-3002] display this
#
acl number 3002
rule 5 permit tcp source 192.168.2.0 0.0.0.255 tcp-flag ack syn
rule 5 description Allow the ACK TCP packets through
rule 10 deny tcp source 192.168.2.0 0.0.0.255 tcp-flag rst //系统分配的规则编号是10
#
return
[Huawei-acl-adv-3002] rule 10 description Allow the RST TCP packets through
[Huawei-acl-adv-3002] rule deny tcp source 192.168.2.0 0.0.0.255
[Huawei-acl-adv-3002] display this
#
acl number 3002
rule 5 permit tcp source 192.168.2.0 0.0.0.255 tcp-flag ack syn
rule 5 description Allow the ACK TCP packets through
rule 10 deny tcp source 192.168.2.0 0.0.0.255 tcp-flag rst
rule 10 description Allow the RST TCP packets through
rule 15 deny tcp source 192.168.2.0 0.0.0.255 //系统分配的规则编号是15
#
return
[Huawei-acl-adv-3002] rule 15 description Do not Allow the other TCP packet through
备注:ACK位等于1时表示对对方主机建立连接请求的确认。RST是重建连接标识。当RST=1时,表明TCP连接中出现严重错误(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立连接。