CCNA网络工程师学习进程(8)访问控制列表ACL

时间:2023-12-05 19:15:14

前面几节我们介绍了路由器的路由配置,接下来几节我们将介绍路由器的高级配置应用,包括ACL、NAT、DHCP、PPP、VPN和远程连接等的配置。

    (1)ACL概述:

  ACL(Access Control List)是一系列运用到路由器接口的指令列表。这些指令告诉路由器如何接收和丢弃数据包,按照一定的规则进行,如源地址、目的地址和端口号等。路由器将根据ACL中指定的条件,对经过路由器端口的数据包进行检查,ACL可以基于所有的Routed Protocols(被路由协议)对经过路由器的数据包进行过滤,还可以针对每个特定的路由协议在指定的端口创建两个ACL:一个用于过滤流入端口的数据流,一个用于过滤流出端口(outbound)的数据流。

ACL可以用作控制和过滤流进路由器端口的数据包和工具。通过使用ACL,路由器提供了基本的数据流过滤能力。

作用:ACL(Access-List,过滤器)能够提供基本的数据报过滤服务,不仅能拒绝不希望的访问连接,同时又能保证正常的访问。

.限制网络流量,提高网络性能;
.提供数据流控制;
.为网络访问提供基本的安全层;
.决定转发或者组织哪些类型的数据流;

一个ACL列表可以由一条到多条ACL语句组成,每条ACL语句都实现一条过滤规则。ACL语句的顺序是至关重要的。当数据报被检查时,ACL列表中的各条语句将顺序执行,直到某条语句满足匹配条件。一旦匹配成功,就执行匹配语句中定义的动作,后续的语句将不再检查。假如ACL列表中有两条语句,第一条语句是允许所有的HTTP数据报通过,第二条语句是禁止所有的数据报通过。按照该顺序,能够达到只允许HTTP数据报通过的目的。但如果将顺序倒过来,则所有的数据报都无法通过。

ACL在执行时应注意以下原则:

最小特权原则:只给受控对象完成任务所必需的最小权限。也就是说被控制的总规则是各个规则的交集,只满足部分条件的是不容许通过规则的。
最靠近受控对象原则:所有的网络层访问权限控制。也就是说在检查规则时是采用自上而下的ACL中一条条检测的,只要发现符合条件了就立刻转发,而不继续检测下面的ACL语句。
默认丢弃原则:在CISCO路由交换设备中默认最后一句为ACL中加入了DENY ANY ANY,也就是丢弃所有不符合条件的数据包。由于默认丢弃数据包,故一个ACL列表至少包含一条允许规则。

    (2)路由器ACL的配置:

ACL被放置在端口上,使得流经该端口的所有数据报都要按照ACL所规定的条件接受检测。如果允许,则通过,否则就被丢弃。当一个ACL被创建后,所有新的语句被加到ACL的最后。无法删除ACL中的单独一条语句,只能删除整个ACL。

ACL适用于所有的路由协议,如IP协议、IPX协议等。ACL的定义必须基于每个协议,如果想在某个端口控制某种协议的数据流,必须对该端口处的每个协议定义单独的ACL。同时,在每个端口、每个协议、每个方向上,只能有一个ACL

ACL的工作流程:

.无论是否使用ACL,通信处理过程的开始都是一样的。当路由器的某个接口收到一个分组时,路由器首先检查该分组是否是可路由的,如果不可路由(如不是发往本路由器的路由),路由器则丢弃该数据包。
.接下来路由器判断该接口上有没有ACL,如果没有则直接查询路由表。如果有ACL,则判断该ACL的指令组是否允许该分组通过,如果不允许,则丢弃。如果允许,则再查询本地路由表。
.路由器查询路由表之后,选择该分组的外出接口。先检查外出接口是否有ACL,如果没有则直接转发,如果有ACL,则判断ACL指令组是否允许该分组通过,如果允许则转发,如果拒绝则丢弃。

在路由器上配置ACL时,每个ACL都有一个唯一的编号作为标识:

协议和ACL响应的编号:

CCNA网络工程师学习进程(8)访问控制列表ACL

    (3)标准ACL的配置:

    常用的标准ACL配置命令:

CCNA网络工程师学习进程(8)访问控制列表ACL

注意:aclid是定义访问列表编号的一个值,范围为1~99(标准ACL)。参数deny或permit指定了允许还是拒绝数据报。参数source是发送数据报的网络地址,source-wildcard则是发送数据报的通配符掩码(或者称为反向掩码)。

通配符掩码:

路由器使用通配符掩码与源或目标地址一起来分辨匹配的地址范围,它与子网掩码不同。它不像子网掩码告诉路由器IP地址的哪一位属于网络号一样,通配符掩码告诉路由器为了判断出匹配,它需要检查IP地址中的多少位。这个地址掩码可以只使用两个32位的号码来确定IP地址的范围。这是十分方便的,因为如果没有掩码的话,不得不对每个匹配的IP客户地址加入一个单独的访问列表语句。这将造成很多额外的输入和路由器大量额外的处理过程。所以地址掩码相当有用。

在子网掩码中,将掩码的一位设为1表示IP地址对应的位属于网络地址部分。而在访问控制列表中,将通配符掩码中的一位设为1表示忽略IP地址中对应的位,该位既可以是0又可以是1,有时可以将其称作不检测位,因为路由器在判断是否匹配时并不关心它们。通配符掩码位设为0表示IP地址中相对应位必须精确匹配。

通配符掩码中二进制“1”出现的位置可以不连续,而子网掩码中“1”连续出现在前面的一些位,后面则是连续的0。

访问控制列表进行地址匹配的过程:

.用访问控制列表语句中的通配符掩码和地址执行逻辑或(192.168..0和0.0.0.255执行逻辑或),该操作结果为192.168.0.。
.用访问控制语句中的通配符掩码数据报头中的IP地址执行逻辑或(192.168..2和0.0.0.),结果为192.168.0..
.将两个结果相减,相减的结果为零,则匹配。如果相减的结果不为零,则不匹配。

  示例一:搭建下述网络拓扑图,进行标准ACL的简单配置:

CCNA网络工程师学习进程(8)访问控制列表ACL

第一步:配置网络接口:

R1:

en
conf t
host R1
int f0/
ip add 192.168.1.254 255.255.255.0
no shut
int f0/
ip add 172.16.1.1 255.255.255.0
no shut
end

R2:

en
conf t
host R2
int f0/
ip add 10.10.10.254 255.255.255.0
no shut
int f0/
ip add 172.16.1.2 255.255.255.0
no shut
end

步骤二:进行路由的配置:

R1:

ip route 10.10.10.0 255.255.255.0 172.16.1.2

R2:

ip route 192.168.1.0 255.255.255.0 172.16.1.1

步骤三:进行ACL的配置:

分别采用两种方法实现ACL的配置分别只允许192.168.1.1的主机和10.10.10.1的主机访问对应的网络:

R1:

en
conf t
access-list permit 192.168.1.1 0.0.0.0
access-list deny 0.0.0.0 255.255.255.255
int f0/
ip access-group in
exit

R2:(在编写ACL语句时,可以使用通配符代替冗长的IP地址和通配符掩码,减少输入量。常用的通配符有any和host。 any表示所有的地址,它相当于0.0.0.0 255.255.255.255(反掩码),host表示指定的一个IP地址,它相当于<IP地址> 0.0.0.0(反掩码)。)

en
conf t
access-list permit host 10.10.10.1
access-list deny any
int f0/
ip access-group in
exit

测试:

CCNA网络工程师学习进程(8)访问控制列表ACL

CCNA网络工程师学习进程(8)访问控制列表ACL

删除配置的ACl规则:

全局模式下: no access-list 

删除配置的ACL列表:

接口模式下:no ip access-group  in

注意:

.ACL仅对穿越路由器的数据包进行过滤;
.标准的ACL只能针对源地址进行控制;
.在配置ACL时要分清是在路由器的进入端口或者输出端口,分别用in和out。

配置标准命名ACL

可以使用字符串来代替数字,来表示ACL,称为命名ACL。使用命名ACL的优点:

.可以在不删除整个ACL的情况下修改它;
.用字符串可以更直观标志一个ACL的用途;
.对于给定的协商,需要配置超出99个标准ACL

示例二:搭建下述网络拓扑图,配置标准命名ACL

  CCNA网络工程师学习进程(8)访问控制列表ACL

步骤一:配置IP地址,及动态路由协议

R1:

en
conf t
host R1
int f0/
ip add 192.168.1.254 255.255.255.0
no shut
int f0/
ip add 172.16.10.1 255.255.255.0
no shut
exit
router rip
version
network 192.168.1.0
network 172.16.10.0
end

R2:

en
conf t
host R2
int f0/
ip add 100.100.100.254 255.255.255.0
no shut
int f0/
ip add 172.16.20.1 255.255.255.0
no shut
exit
router rip
version
network 100.100.100.0
network 172.16.20.0
end

R3:

en
conf t
host R3
int f0/
ip add 172.16.10.2 255.255.255.0
no shut
int f0/
ip add 172.16.20.2 255.255.255.0
no shut
int f1/
ip add 10.10.10.254 255.255.255.0
no shut
exit
router rip
version
network 172.16.10.0
network 172.16.20.0
network 10.10.10.0
end

步骤二:配置访问控制列表:

R3:

en
conf t
ip access-list standard deny-left
deny 192.168.1.0 0.0.0.255
permit 100.100.100.0 0.0.0.255
permit any
int f1/
ip access-group deny-left out
end

检测配置情况:

CCNA网络工程师学习进程(8)访问控制列表ACL

CCNA网络工程师学习进程(8)访问控制列表ACL

检测ACL的结果:

CCNA网络工程师学习进程(8)访问控制列表ACL

标准ACL可以进行局部修改,可以在不删除ACL的基础上修改它:

en
conf t
ip access-list standard deny-left
no
end

CCNA网络工程师学习进程(8)访问控制列表ACL

    (4)扩展ACL的配置:

扩展ACL(ID号为:100~199)与标准ACL(ID号为:1~99)相比,标准ACL只能对源数报的IP地址进行限制,而扩展ACL提供了更强的控制能力,不但可以检查数据报的IP地址,而且可以检查协议类型和端口号,还可以针对目标进行配置。

标准ACL只能使用源地址作为过滤条件,提供了十分基本的过滤功能。扩展ACL可以同时使用源地址和目标地址作为过滤条件。还可以有选择的使用协议类型信息来优化控制,如TCP、UDP协议及他们的端口号,也可以使用时间参数。

常用的扩展ACL配置命令:

CCNA网络工程师学习进程(8)访问控制列表ACL

参数含义如下:

.acl_id是指定义访问列表编号的一个值,范围为100—。
.deny或permit指定了允许还是拒绝数据报。 指发送方的网络地址,source-wildcared则是指发送方的通配符掩码或反掩码。
.destination是指接收方的网络地址,estination-wildcard则是指接收方的通配符掩码。
4.operator是个可选项,用于比较源和目的端口,可用的操作符包括lt(小于)、gt(大于)、eq(等于)、neq(不等于)和range(包括的范围)。
5.port是个可选项,用于指明TCP或UDP端口的十进制数字或名字。 端口号的范围是0~。TCP端口只被用于过滤TCP数据报,UDP端口只被用于过滤UDP数据报。
6.established表示只允许TCP包头中的ACK位被置为1(即己建立了TCP连接)的数据包通过。

  示例三:搭建下列网络拓扑结构图,进行扩展ACL的配置:

CCNA网络工程师学习进程(8)访问控制列表ACL

步骤一:配置网络接口的IP地址(略)。

步骤二:配置静态路由(略)。

步骤三:配置ACL列表:

en
conf t
access-list permit ip host 192.168.1.1 any
access-list permit tcp host 192.168.1.2 host 200.200.200.1 eq www
access-list permit tcp host 192.168.1.3 host 200.200.200.2 eq ftp
access-list permit tcp host 192.168.1.4 host 200.200.200.3 eq telnet
access-list 100 deny ip any any
int f0/
ip access-group in
end

检测配置情况:

CCNA网络工程师学习进程(8)访问控制列表ACL

ACL配置位置

    在实际的工作环境中,网络的结构并非实验环境这么单纯,而是很复杂的,标准的ACL由于只对数据源进行控制,要么拒绝所有协议或应用,要么允许所有协议和应用,故标准ACL只适合配置在靠近目的地的接口上,如果配置在靠近源地址方的端口上,则可能造成源对所有目标的访问都受到影响,而并非只对特定目标的访问拒绝。

因扩展ACL能实现对源端和目标的精准过滤,故扩展ACL适合配置在靠近源地址端的接口上。如果在靠近目标端才进行过滤,则将浪费从源到目标端之间的网络资源。

基于时间的ACL配置(需要用到GNS3模拟器)

基于时间的ACL能够限制特定网络设备或者网段的流量通过特定设备从而访问其它网段。

常用的基于时间的ACL配置命令:

CCNA网络工程师学习进程(8)访问控制列表ACL

月份及其简写:

一月: January,简写 JAN;
二月:February,简写Feb;
三月:March,简写Mar;
四月:April,简写Apr;
五月:May;
六月:June,简写Jun;
七月:July,简写Jul;
八月:August,简写Aug;
九月: September,简写Sep;
十月:October,简写Oct;
十一月:November,简写Nov;
十二月:December,简写Dec;

    示例四:搭建下列网络拓扑图,实现图中文本所述功能:

CCNA网络工程师学习进程(8)访问控制列表ACL

步骤一:配置接口ip地址,由于拓扑图比较简单,无需路由。

步骤二:在R1上配置如下远程登录和基于时间的ACL:

en
conf t
line vty
password cisco
login
exit
time-range NotPC1TelnetR1
periodic weekend : to :
exit
time-range NotPC2ConnectNet
periodic daily : to :
exit
time-range NotWeb
absolute start : Jan end : 30 Jan
exit
ip access-list extended TimeACL
deny tcp host 192.168.1.1 any eq time-range NotPC1TelnetR1
deny ip 192.168.1.0 0.0.0.255 200.200.100.0 0.0.0.255
deny tcp 192.168.1.2 0.0.0.0 host 200.200.100.1 eq 80 time-range NotWeb
permit ip any any
exit
int f0/
ip access-group TimeACL in
exit
end

这里由于设备功能不全面,测试无法进行。

自反ACL的配置:

常用的标准ACL配置命令:

CCNA网络工程师学习进程(8)访问控制列表ACL

配置案例:RA是公司的边界路由器,要求只允许内网用户主动访问外网的IP流量,外网主动访问内网的所有流量都拒绝。

CCNA网络工程师学习进程(8)访问控制列表ACL

路由器RA的基本配置:

RA(config-if)#int f1/
RA(config-if)#ip address 192.168.1.1 255.255.255.0
RA(config-if)#no shutdown
RA(config-if)#int s0/
RA(config-if)#ip address 202.116.65.1 255.255.255.252
RA(config-if)#clock rate
RA(config-if)#bandwidth
RA(config-if)#no shutdown

Internet的基本配置(使用路由器模拟):

Internet(config)#int s0/
Internet(config-if)#ip address 202.116.65.2 255.255.255.252
Internet(config-if)#bandwidth
Internet(config-if)#no shutdown
Internet(config-if)#exit
Internet(config)#ip route 0.0.0.0 0.0.0.0 Serial0/

在RA上配置自反ACL:

RA(config)#ip access-list extended PERMIT
//创建名为PERMIT的扩展ACL
RA(config-ext-nacl)#permit ip 192.168.1.0 0.0.0.255 any reflect EXCEPT
//指定对该条语句执行自反,自反列表的名字为EXCEPT
RA(config-ext-nacl)#EXIT
RA(config)#interface f1/
RA(config-if)#ip access-group PERMIT in
//在端口f1/0上启动名为PERMIT的ACL过滤,让内网数据通往Internet
RA(config-if)#exit
RA(config)#ip access-list extend DENY
//创建名为DENY的扩展ACL
RA(config-ext-nacl)#evaluate EXCEPT
//生成自反列表(对名为EXCEPT的条目进行自反计算并生成ACL条目)
RA(config-ext-nacl)#deny ip any any//拒绝来自Internet的数据
RA(config-ext-nacl)#exit
RA(config)#interface s0/
RA(config-if)#ip access-group DENY in

查看配置的自反ACL:

RA#show ip access-lists
Extended IP access list DENY
evaluate EXCEPT
deny ip any any ( matches)
Reflexive IP access list EXCEPT
Extended IP access list PERMIT
permit ip 192.168.1.0 0.0.0.255 any reflect EXCEPT ( matches)

在PC上执行ping 202.116.65.2后,再次查询RA#show ip access-lists:

RA#show ip access-lists
Extended IP access list DENY
evaluate EXCEPT
deny ip any any ( matches)
Reflexive IP access list EXCEPT
permit icmp host 202.155.144.2 host 192.168.1.2 ( matches) (time left )//触发的自反列表项,匹配自反列表后自动产生,如无此条自反列表,则由PC至Internet的流量再回来的方向会被名为DENY的ACL过滤掉。
Extended IP access list PERMIT
permit ip 192.168.1.0 0.0.0.255 any reflect EXCEPT ( matches)

在PC上执行ping 202.116.65.2测试网络畅通,但在Internet执行ping 192.168.1.2却不通,原因是Internet主动发起的流量被名为DENY的ACL过滤掉了。

文件下载:http://files.cnblogs.com/files/MenAngel/NetBlog8.zip