32-访问控制列表(ACL)

1. ACL技术

访问控制列表(Access Control Lists,简称ACL)是一种包过滤技术(实际上就是一种防火墙技术),应用在防火墙或路由器等网络设备,然后路由器会根据ACL指令是否允许或者拒绝转发特定的数据。ACL技术同时也是一种基本的网络安全技术,可用于实现网络流量限制,网络访问控制,提高网络安全性。

 

2. ACL实验部署

关于R1,R2,R3设备的IP地址配置,大家可以根据上图进行配置,这里就直接跳过了......  然后分别给R1,R2,R3设备添加静态路由信息。

 

 

R1设备添加静态路由器,配置如下:

R1(config)#
R1(config)#ip route 3.3.3.3 255.255.255.255 12.1.1.2
R1(config)#ip route 33.3.3.3 255.255.255.255 12.1.1.2
R1(config)#
R1(config)#ip route 23.1.1.0 255.255.255.0 12.1.1.2
R1(config)#

 

R2设备添加静态路由器,配置如下:

R2(config)#ip route 192.168.1.0 255.255.255.0 12.1.1.1
R2(config)#ip route 192.168.2.0 255.255.255.0 12.1.1.1
R2(config)#
R2(config)#ip route 3.3.3.3 255.255.255.255 23.1.1.3
R2(config)#ip route 33.3.3.3 255.255.255.255 23.1.1.3

 

 

R3设备添加静态路由器,配置如下:

R3(config)#ip route 12.1.1.0 255.255.255.0 23.1.1.2
R3(config)#ip route 192.168.1.0 255.255.255.0 23.1.1.2
R3(config)#ip route 192.168.2.0 255.255.255.0 23.1.1.2
R3(config)#

 

测试R1和R3设备的网络连通性:

R3#ping 192.168.1.1

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.1.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 28/36/44 ms
R3#ping 192.168.2.1



R1#ping 3.3.3.3

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 3.3.3.3, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 40/42/48 ms

 

 

R2用于模拟防火墙设备部署ACL技术要求192.168.1.0/24网段不能访问外网,其他网段可以正常访问外网,配置如下:

//这条命令的意思是拒绝源地址为192.168.1.0网段的数据包通过
R2(config)#access-list 1 deny 192.168.1.0 0.0.0.255
//允许其他网段的数据包通过
R2(config)#access-list 1 permit any
//将配置好的ACL指令应用到f0/0接口中
R2(config)#int f0/0
R2(config-if)#ip access-group 1 in
R2(config-if)#exit
R2(config)#

这里我们使用编号ACL技术,当在R2设备上这样配置时:access-list 1 deny 192.168.1.0 0.0.0.255,路由器在收到源地址为192.168.1.0网段的数据包时就会按照访问控制列表(ACL)的指令执行,该数据报会被拒绝通过。ip access-group 1 in命令表示流量的出口方向,也就是f0/0口in方向的数据流量,这条ACL指令就会应用到f0/0接口中。

 

 

测试网络连通性:

R1#ping 3.3.3.3 source 192.168.1.1

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 3.3.3.3, timeout is 2 seconds:
Packet sent with a source address of 192.168.1.1 
UUUUU
Success rate is 0 percent (0/5)
R1#
R1#
R1#ping 3.3.3.3 source 192.168.2.1

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 3.3.3.3, timeout is 2 seconds:
Packet sent with a source address of 192.168.2.1 
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 96/99/108 ms
R1#

当R2设备部署好ACL技术后,可以看到当192.168.1.0网段访问外网时是不通的,U表示Unreachable,即数据不可达或者被禁止通过。

 

但是192.168.2.0网段依然是可以访问外网的,编号标准 ACL 可以实现最基本的访问限制和安全管理,但是对于一些限制要求比较高的场景下,例如根据目的地址,端口号和协议类型等,编号ACL就无法胜任,因为编号ACL只能基于源ip地址进行过滤数据流量。

 

注意:每个接口,每个方向,每种协议,只能设置一个访问控制列表(ACL)。

 

3. ACL的工作原理

通过前面的实验已经了解ACL技术的作用,但是这还远远不够,学习ACL的工作原理可以帮助我们配置功能更加强大的ACL,同时也方便排错。

ACL指令是按顺序执行的,先匹配第一行,再匹配第二行......直到最后一行。当找到一条符合条件的指令后,剩下的语句将不再执行。例如要求禁止192.168.0.0/16网段的192.168.1.0/24子网通过的话,假设当前ACL是这样配置的:

R2(config)#access-list 1 permit 192.168.0.0 0.0.255.255 
R2(config)#access-list 1 deny 192.168.1.0 0.0.0.255

当R2设备收到192.168.0.32网段的数据包时,会顺序匹配ACL列表中的第一行指令,发现该数据包是属于192.168.0.0网段,ACL指令匹配成功,后面的指令将不再执行,那么该网段的数据包将会被允许通过。为了防止出现这种问题,调整好ACL指令的顺序就显得尤为重要。

 

正确的写法应该是这样的:

R2(config)#access-list 1 deny 192.168.1.0 0.0.0.255
R2(config)#access-list 1 permit 192.168.0.0 0.0.255.255 

 

可以通过show命令查看访问控制列表中的指令顺序,如下所示:

R2#show access-lists 
Standard IP access list 1
    10 deny   192.168.1.0, wildcard bits 0.0.0.255
    20 permit any
R2#
R2#

 

 

4. ACL的种类

访问控制列表分很多种,根据不同的应用场景有不同的访问控制列表,一般分为以下几类:

1. 标准访问控制列表(ACL):标准ACL是最简单的一种,基于IP数据包的源地址进行数据过滤,其编号范围是1-99或1300-1999,标准ACL的缺点是不易于管理,只能实现基本的限制和安全访问。

 

 2. 扩展访问控制列表(ACL):扩展ACL比标准ACL更加强大,具有灵活的可扩展性,它是基于协议类型,端口号,源IP地址和目的IP地址,TCP连接建立进行数据流量过滤,其编号范围为100-199或2000-2699。

 

3. 命名访问控制列表(ACL):命名ACL可以通过自定义命名来代替数字编号,还可以删除访问控制列表中的某一条ACL指令,便于修改。通过ip access-list命令可以创建命名ACL。

 

前面的实验已经学习过标准ACL技术,后面将继续学习扩展ACL和命名ACL ......

 

5. 扩展ACL

还是基于前面的实验,在R2设备上配置扩展ACL,例如现在的需求是允许内网192.168.1.0网段的ip地址访问互联网,但不允许192.168.2.0网段的IP地址访问互联网。

 

为了完成这个要求,扩展ACL的具体配置如下:

R2#conf t
R2(config)#access-list 100 permit ip host 192.168.1.1 host 3.3.3.3
R2(config)#access-list 100 deny ip host 192.168.2.1 host 3.3.3.3
//把扩展编号ACL应用到f0/0口的in方向
R2(config)#int f0/0
R2(config-if)#ip access-group 100 in
R2(config)#exit
R2#

注意:in代表流量的进出方向,in代表进入f0/0口的流量。

 

 

Show命令查看R2设备的ACL指令列表,如下所示:

R2#show access-lists 
Extended IP access list 100
    10 permit ip 192.168.1.0 0.0.0.255 host 3.3.3.3
    20 deny ip 192.168.2.0 0.0.0.255 host 3.3.3.3
R2#

 

 

在R1设备上测试网络连通性:

R1#ping 3.3.3.3 source 192.168.1.1

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 3.3.3.3, timeout is 2 seconds:
Packet sent with a source address of 192.168.1.1 
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 96/99/104 ms
R1#
R1#ping 3.3.3.3 source 192.168.2.1

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 3.3.3.3, timeout is 2 seconds:
Packet sent with a source address of 192.168.2.1 
UUUUU
Success rate is 0 percent (0/5)
R1#

可以看到,扩展ACL比编号ACL更加强大,可以匹配源地址和目的地址,以及协议类型,能适应更为复杂的网络环境。

 

例如想要实现拒绝192.168.1.1发起的telnet的流量,可以在R2设备上这样配置:

access-list 100 deny tcp host 192.168.1.1 any eq telnet

但扩展ACL同样存在和编号ACL同样的问题,那就是都不易于管理。

还有一个地方需要注意的是,ACL指令列表的末尾默认情况下都有一条deny any any 的语句,这条语句的意思是拒绝任何流量,如果你想允许其他流量通过时,为了防止其他流量被拒绝通过,一般需要手动添加一条ACL语句:permit any any。

 

6. 命名ACL

命名ACL继承了扩展ACL和标准ACL的灵活和可扩展性,同时还易于管理,可以增加或修改删除某条ACL指令语句。

 

命名ACL的配置如下:

R2(config)#ip access-list ?
  extended    Extended Access List
  log-update  Control access list log updates
  logging     Control access list logging
  resequence  Resequence Access List
  standard    Standard Access List

配置命名ACL有以上几种方式可以选择,extended表示命名的扩展ACL,standard则表示命名的标准ACL。

 

 

命名的标准ACL

例如通过命名ACL方式来禁止192.168.1.0/24网段访问外网,其他网段的可以访问外网,在R2设备上配置命名的标准ACL:

R2(config)#
//标准ACL的命名为DENY1
R2(config)#ip access-list standard DENY1
//拒绝192.168.1.0网段的流量通过
R2(config-std-nacl)#deny 192.168.1.0 0.0.0.255
R2(config-std-nacl)#permit any 
R2(config-std-nacl)#exit
R2(config)#int f0/0
R2(config-if)#ip access-group DENY1 in
R2(config-if)#exit
R2(config)#

 

Show命令查看ACL指令列表:

R2#show access-list  
Standard IP access list DENY1
//具体的ACL指令
    10 deny   192.168.1.0, wildcard bits 0.0.0.255
    20 permit any
R2#
R2#

Standard IP access list DENY1:说明这是一个命名的标准ACL,名字为DENY1。

 

 

测试网络连通性:

R1#ping 3.3.3.3 source 192.168.2.1

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 3.3.3.3, timeout is 2 seconds:
Packet sent with a source address of 192.168.2.1 
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 96/97/100 ms
R1#
R1#ping 3.3.3.3 source 192.168.1.1

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 3.3.3.3, timeout is 2 seconds:
Packet sent with a source address of 192.168.1.1 
UUUUU
Success rate is 0 percent (0/5)
R1#
R1#ping 33.3.3.3 sour
R1#ping 33.3.3.3 source 192.168.1.1

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 33.3.3.3, timeout is 2 seconds:
Packet sent with a source address of 192.168.1.1 
UUUUU
Success rate is 0 percent (0/5)
R1#

 

 

命名的扩展ACL

命名的扩展ACL的配置方式和标准ACL是类似的,现在通过命名的扩展ACL方式禁止192.168.2.0网段ping通外网的3.3.3.3地址,拒绝192.168.1.0网段telnet33.3.3.3的23号端口,具体配置如下:

R2#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
//扩展ACL命名为DENY2
R2(config)#ip access-list extended DENY2
//拒绝192.168.2.0网段ping通3.3.3.3
R2(config-ext-nacl)#deny icmp 192.168.2.0 0.0.0.255 host 3.3.3.3
//拒绝192.168.1.0网段远程登录33.3.3.3的23号端口
R2(config-ext-nacl)#deny tcp 192.168.1.0 0.0.0.255 host 33.3.3.3 eq 23
R2(config-ext-nacl)#permit ip any any 
R2(config-ext-nacl)#
R2(config)#int f0/0
R2(config-if)#ip access-group DENY2 in

需要注意的是:命名ACL在应用到接口中需要写上自定义的名字,而不是编号。

 

R1远程登录R3设备,测试网络连通性:

R1#telnet 33.3.3.3 /source-interface loopback 1
Trying 33.3.3.3 ... 
% Destination unreachable; gateway or host down

R1#
R1#ping 33.3.3.3 source 192.168.1.1

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 33.3.3.3, timeout is 2 seconds:
Packet sent with a source address of 192.168.1.1 
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 96/98/104 ms
R1#

从% Destination unreachable; gateway or host down结果来看,很明显,192.168.1.1的远程登录请求被拒绝掉了,但是1.1依然可以ping通R3设备。

 

 

测试网络连通性:

R1#ping 3.3.3.3 source 192.168.2.1

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 3.3.3.3, timeout is 2 seconds:
Packet sent with a source address of 192.168.2.1 
UUUUU
Success rate is 0 percent (0/5)
R1#
R1#ping 33.3.3.3 source 192.168.2.1

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 33.3.3.3, timeout is 2 seconds:
Packet sent with a source address of 192.168.2.1 
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 20/36/44 ms
R1#

另外,192.168.2.1也ping不通3.3.3.3地址的。

 

 

Show命令查看ACL状态

R2#show ip access-lists 
Extended IP access list DENY2
    10 deny icmp 192.168.2.0 0.0.0.255 host 3.3.3.3 (15 matches)
    20 deny tcp 192.168.1.0 0.0.0.255 host 33.3.3.3 eq telnet (3 matches)
    30 permit ip any any (10 matches)
R2#
R2#

 

 

删除一条ACL指令,再次查看ACL状态:

R2(config)#ip access-list extended DENY2
R2(config-ext-nacl)#no 10
R2(config-ext-nacl)#exit
R2(config)#exit
R2#show ip access-lists 
Extended IP access list DENY2
    20 deny tcp 192.168.1.0 0.0.0.255 host 33.3.3.3 eq telnet (3 matches)
    30 permit ip any any (10 matches)
R2#

 

 

插入一条ACL指令,再次查看ACL状态:

R2(config)#ip access-list extended DENY2
//插入一条ACL指令
R2(config-ext-nacl)#25 deny icmp 192.168.2.0 0.0.0.255 host 3.3.3.3
R2(config-ext-nacl)#exit
R2(config)#exit
R2#show ip access-lists 
Extended IP access list DENY2
    20 deny tcp 192.168.1.0 0.0.0.255 host 33.3.3.3 eq telnet (3 matches)
    25 deny icmp 192.168.2.0 0.0.0.255 host 3.3.3.3
    30 permit ip any any (10 matches)
R2#

注意:25 deny icmp 192.168.2.0 0.0.0.255 host 3.3.3.3,在这条ACL指令中,最前面的编号25代表ACL指令插入的位置,25则表示该ACL指令插入到编号20到30之间;如果是10的话,则表示该指令插入到编号20的前面。因此命名ACL在管理方面更具有优势。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章