使用访问列表管理网络
本章主要讲述使用标准访问控制列表
和扩展访问控制列表控制网络流量的方法。
本章同时提供了标准访问控制列表和扩展
访问控制列表以及在路由接口应用ACL的
例子。
要求掌握内容:
(1)标准ACL和扩展ACL;
(2)命名ACL ;
(3)应用ACL控制和管理通信流量。
章节内容
1 访问列表简介
2 标准的访问列表
3 扩展的IP访问列表
4 命名的访问列表
5 应用和验证访问控制列表
• 是一系列运用网络地址或者上层协议上
的允许或拒绝指令的集合。
访问列表简介
访问控制列表ACL
• 网络管理者需要了解怎样控制非法的网
络访问,允许正常的网络访问。ACL具
有灵活的基本数据流过滤能力和特定的
控制能力。例如,网络管理者可能允许
用户访问Internet,而不允许外部的用户
登录到局域网中。
• 路由器提供了基本的数据流过滤能力。
如使用访问控制列表(ACL),可以有
条件地阻止Internet数据流。ACL,是一
系列的允许或拒绝指令的集合,这些指
令将运用到网络地址或者上层协议上。
ACL需求
• 有多种原因需要创建ACL:
– 限制网络数据流,增加网络性能。
• 例如:根据不同的协议,ACL可以指定路由器优
先处理哪些数据报。这叫做队列管理,路由器可
以不处理不需要的数据报。队列管理限制了网络
数据流,减少了网络拥塞。
– 提供数据流控制。
• 例如:ACL可以限定或者减少路由更新的内容。
这些限定,可以用于限制关于某个特定网络的信
息传播到整个网络。
ACL需求
• 有多种原因需要创建ACL:
– 为网络访问提供基本的安全层。
• ACL可以允许某个主机访问网络的某一部分,而
阻止另一台主机访问网络的这个部分。
– 决定转发或者阻止哪些类型的数据流。
• 例如:可以允许路由email数据流,而阻止telnet
数据流。
ACL的定义
• 访问控制列表(ACL)是运用到路由器
接口的指令列表。这些指令告诉路由器
接受哪些数据报而拒绝哪些数据报。
• 接受或者拒绝根据一定的规则进行,如
源地址,目标地址,端口号等。ACL使
得用户能够管理数据流,检测特定的数
据报。
• 路由器将根据ACL中指定的条件,对经
过路由器端口的数据报进行检查。
• ACL可以基于所有的Routed Protocols,
如IP,IPX,对经过路由器的数据报进行
过滤。
ACL的定义
• ACL在路由器的端口过滤网络数据流,
决定是否转发或者阻止数据报。
• ACL应该根据路由器的端口所允许的每
个协议来制定。如果需要控制流经某个
端口的所有数据流,就需要为该端口允
许的每一个协议分别创建ACL。
– 例如,如果端口配置成允许IP,Appletalk和
IPX协议的数据流,那么就需要创建至少三
个ACL。
• ACL可以用作控制和过滤流经路由器端
口的数据报的工具。
ACL指令
• ACL指令的放置顺序是很重要的。当路
由器在决定是否转发或者阻止数据报的
时候,Cisco的IOS软件,按照ACL中指
令的顺序依次检查数据报是否满足某一
个指令条件。当检测到某个指令条件满
足的时候,就不会再检测后面的指令条
件。
• 在每一个路由器的端口,可以为每一个
支持的Routed Protocols创建ACL。对于
某些协议,可以创建多个ACL:一个用
于过滤进入端口的数据流inbound,一个
用于过滤流出端口的数据流outbound。
Inbound or Outbound
• Inbound or Outbound
– 进入路由器的Inbound,离开路由器的
outbound
Outgoing
Packet
E0
S0
Incoming
Packet
Access List Processes
Permit?
Source
and
Destination
Protocol
ACL指令
• 一个ACL就是一组指令,规定数据报如
何:
– 进入路由器的某个端口
– 在路由器内的转送
– 离开路由器的某个端口
• ACL允许控制哪些客户端可以访问的网
络。在ACL中的条件可以是:
– 筛选某些主机允许或者禁止访问的部分网络
– 允许或者禁止用户访问某一类协议,如FTP
,HTTP等。
ACL的工作流程
• 无论是否使用ACL,开始的通信过程是相同的。
• 当一个数据报进入一个端口,路由器检查这个数
据报是否可路由。
– 如果是可以路由的,路由器检查这个端口是否有ACL
控制进入数据报。
– 如果有,根据ACL中的条件指令,检查这个数据报。
– 如果数据报是被允许的,就查询路由表,决定数据报
的目标端口。
• 路由器检查目标端口是否存在ACL控制流出的数
据报
– 不存在,这个数据报就直接发送到目标端口。
– 如果存在,就再根据ACL进行取舍。
ACL的工作流程
ACL的配置
• 创建一个ACL访问控制
– Router(config)# access-list access_list_number
{permit|deny} {test_conditions}
• 将访问控制绑定到接口上
– Router(config-if)# {protocol} access-group
access_list_number {in|out}
• 关闭访问控制列表
– Router(config)# no access-list
access_list_number
为每个ACL分配一个唯一标识
• 配置ACL的时候需要为每一个协议的
ACL指定一个唯一的数字,用以标识这
个ACL。这个数字必须在有效范围之内。
• 为一个ACL指定了数字后,需要把它关
联到一个端口。假如需要修改,只需要
利用命令:"no access-list list-number",
就可以删除这个ACL的指令。
ACL绑定到接口
• ACL可以指定到一个或者多个端口。根
据配置,可以过滤进入或流出的数据流。
• 对流出的数据流使用ACL更有效,因此
也更常使用。
• 如果是针对进入数据流的ACL,路由器
将检查每一个数据报,看是否满足ACL
的条件,然后才将允许的数据报发送到
送出端口。
标准ACL和扩展ACL
• 标准ACL
– 检查源地址
– 可以允许或者拒绝整套协议栈
– 标准ACL(数字1到99),可以提供数据流过滤
控制。它是基于源地址和通配掩码。标准ACL
可以允许或禁止整套IP协议。
• 扩展ACL
– 检查源地址和目的地址
– 可以允许或者拒绝指定协议
– 为了更加精确的数据流过滤,需要扩展ACL。
扩展ACL检查源地址和目标地址,以及TCP或
UDP端口号。还可以指定扩展ACL针对特定的
协议的进行操作。
– 扩展ACL使用的数字范围是:100-199。
标准的访问列表
• 如果想允许或者禁止来自于某各个网络
的所有数据流,或者禁止某一套协议的
数据流,可以使用标准ACL。
• 标准ACL检查数据报的源地址,即根据
地址中的网络、子网和主机位,来允许
或者拒绝来自于整套协议的数据报。
• 例如,来自于E0端口的数据报,将检查
它的源地址和协议,如果被允许,将输
出到相应的端口。如果被禁止,数据报
将被丢弃。
标准ACL指令
• 使用标准版本的access-list全局配置命令来定义
一个带有数字的标准ACL。这个命令用在全局
配置模式下
– Router(config)# access-list access-list-number {deny |
permit} source [source-wildcard ] [log]
– 例如:access-list 1 permit
• 使用这个命令的no形式,可以删除一个标准
ACL。语法是:
– Router(config)# no access-list access-list-number
– 例如:no access-list 1
标准ACL举例
• 以下图的结构为例,介绍标准ACL的使用。
• 实例1:E0和E1端口只允许来自于网络的数据报
被转发,其余的将被阻止。
• 实例2:E0端口不允许来自于特定地址的数据
流,其它的数据流将被转发。
• 实例3:E0端口不允许来自于特定子网的数据,
而转发其它的数据。
E0
S0
E1
Non-
实例1:只允许指定的网络数据
• E0和E1端口只允许来自于网络
的数据报被转发,其余的将被阻止。
• 第一个ACL命令用“permit”允许来自于此指定
网络的数据流,通配掩码表明要检查
匹配IP地址中的网络位(前16位)。
• 最后将ACL关联到端口E0和E1。
access-list 1 permit
(implicit deny all - not visible in the list)
(access-list 1 deny )
interface ethernet 0
ip access-group 1 out
interface ethernet 1
ip access-group 1 out
实例2:禁止来自特定地址的数据
• E0端口不允许来自于特定地址的数据流,
其它的数据流将被转发。
– 第一个ACL命令用“deny”禁止来自于此指定主机的数
据流,通配掩码表明要检查匹配地址中的所有的
位。
– 第二个ACL命令中,“ ”IP地址
和通配掩码组合,表示允许来自于任何源的数据流。这
个组合,也可以用关键字“any”替代。
– 最后将ACL关联到端口E0。access-list 1 deny
access-list 1 permit
(implicit deny all)
(access-list 1 deny )
interface ethernet 0
ip access-group 1 out
实例3:禁止来自特定子网的数据
• E0端口不允许来自于特定的子网的数据,
而转发其它的数据。
• 第一个ACL命令用“deny”禁止来自子网的数据流,
通配掩码,前三个字节表示IP地址中的前三个字节将
被检测。而最后一个字节全1,表明将不关心IP地址的主机部
分。
• 第二个ACL命令表示在之前没有匹配的时候允许任何的源IP地
址。
• 最后将ACL关联到端口E0。
access-list 1 deny
access-list 1 permit any
(implicit deny all)
(access-list 1 deny )
interface ethernet 0
ip access-group 1 out
扩展的IP访问列表
• 扩展ACL提供了比标准ACL更大范围的控制,
因而运用更广。例如,可以使用扩展ACL来实
现允许Web数据流,而禁止FTP或Telnet。
• 扩展ACL可以检查源地址和目标地址,特定的
协议,端口号,以及其它的参数。一个数据报,
可以根据它的源或者目标地址,而被允许或者
禁止。例如,扩展ACL可以允许来自于E0而到
S0的e-mail数据,而禁止远程登录或者文件传
输。
• 假设端口E0与一个扩展ACL相关联。可以使用
精确的逻辑指令,来创建ACL。在一个数据报
进入这个端口前,相应的ACL将对其进行检查。
• 基于扩展ACL检查,数据报将被允许或
禁止。对于进入端口的数据,允许的数
据报将被继续处理。对于发出端口的数
据,允许的数据报将被转发到端口。拒
绝的数据报将被丢弃,某些协议还会向
发端发送数据报,说明目标不可到达。
• 一个ACL中可以包含任意多条指令。每
一条指令,应该具有相同的标识名或者
数字。ACL中的指令越多,就越难理解
和管理。所以,为ACL做好文档可以防
止混淆。
扩展ACL
扩展ACL配置
• 完全形式的access-list命令为:
Router(config)# access-list access_list_number
{permit|deny}
protocol source [source_mask
destination
destination_mask operator operand
[established]
• 命令"ip access-group"将一个存在的扩展
ACL和一个端口关联。记住:一个端口
的一个方向的某套协议,只允许存在一
个ACL。
Router(config-if)# {protocol} access-group
access_list_number {in|out}
扩展ACL举例
• 以下图的结构为例,介绍扩展ACL的使用。
– 实例1:在E0端口,禁止转出来自子
网的FTP数据流到子网,其它的数据
流将被转发。
– 实例2:在E0端口,禁止转出来自子
网的 Telnet 数据流,其它的数据流将被转发。
E0
S0
E1
Non-
实例1:禁止转出FTP数据
• 在E0端口,禁止转出来自子网的FTP数据流到
子网,其它的数据流将被转发。
– 第一个ACL命令用“deny”禁止来自子网的FTP-
DATA(port=20)数据流到子网。
– 第二个ACL命令用“deny”禁止来自子网的
FTP(port=21)数据流到子网。
– 第三个ACL命令表示允许任何的数据流。
– 最后将此ACL101关联到端口E0。
access-list 101 deny tcp eq 21
access-list 101 deny tcp eq 20
access-list 101 permit ip any any
(implicit deny all)
(access-list 101 deny ip )
interface ethernet 0
ip access-group 101 out
实例2:禁止转出Telnet 数据
• 在E0端口,禁止转出来自子网
的 Telnet 数据流,其它的数据流将被转
发。
– 第一个ACL命令用“deny”禁止来自
子网的Telnet(port=23)数据流。
– 第二个ACL命令表示允许任何的数据流。
– 最后将此ACL101关联到端口E0。
access-list 101 deny tcp any eq 23
access-list 101 permit ip any any
(implicit deny all)
interface ethernet 0
ip access-group 101 out
通配掩码
• 通配掩码(wildcard mask)是分成4字节的32bit数。
通配掩码与IP地址位位配对,相应位为0/1,用于
表示如何对待IP地址中的相应位。
– 通配掩码某位是0,表示检查相应bit位的值;
– 通配掩码某位是1,表示不检查(忽略)相应位的值。
• ACL使用通配掩码来控制一个或者多个需要进行"
允许"或者"禁止"检查的IP地址。
• 尽管都是32位,通配掩码与子网掩码不同。在子
网掩码中,0/1决定了相应主机IP地址是网络位、
子网位还是主机位。在通配掩码中,0/1决定ACL
是否检查或者忽略IP地址中的相应位。
通配掩码的工作原理
通配掩码举例
• 假设一个B类地址,有8位的子网地址。想
使用通配掩码,允许所有来自于网络
~网络的数据报访问。
通配掩码举例
• 假设一个B类地址,有8位的子网地址。
想使用通配掩码,允许所有来自于网络
~网络的数据报访
问。
– 首先,检查前面两个字节(),通配掩
码中的前两个字节位全为0。由于没有兴趣
检查主机地址,通配掩码的最后一个字节位
全为1。
– 通配掩码的第三个字节应该是15 (00001111)。
– 与之相应的通配掩码是,将匹配子
网到的IP地址。
通配掩码举例
• IP地址的第三个字节为16 (00010000)。通配掩码中的
前四位为0,告诉路由器要匹配IP地址的前四位(0001)。
由于最后的四位被忽略,则所有的在范围16
(00010000)到31 (00011111)的都将被允许,相应的通配
掩码位是1。 Network Network .host
00 00 00 11 0 0 0 0
Wildcard mask: 0 0 0 0 1 1 1 1
|<---- match ---->|<----- don’t care ----->|
0 0 0 1 0 0 0 0 = 16
0 0 0 1 0 0 0 1 = 17
0 0 0 1 0 0 1 0 = 18
: :
0 0 0 1 1 1 1 1 = 31
any命令
• 使用二进制通配掩码很不方便,某些通
配掩码可以使用缩写形式替代。这些缩
写形式,减少了在配置地址检查条件时
候的键入量。
• 假如想允许任何目标地址都被允许,为
了检查任何地址,需要输入。要使
ACL忽略任意值,通配掩码为:
。可以使用缩写形式,来
指定相同的测试条件。
– Router(config)# access-list 1 permit
– 等价于
– Router(config)# access-list 1 permit any
host命令
• 当想匹配IP地址中所有的位时,Cisco
IOS允许使用另一个ACL通配掩码的缩写。
• 假如希望一个特定的IP地址,在ACL的
检查中获得允许。为了指明这个主机地
址,将输入整个地址(如)。
然后,为了指明ACL将检查地址中的所
有的位,相应的通配掩码的各位将设置
成0(即)。可以使用缩写形式来
完成这个任务。
– Router(config)# access-list 1 permit
– 等价于
– Router(config)# access-list 1 permit host
any 和host命令
验证ACL
• 使用show interface
– 可以显示在某个接口上绑定了那些ACL
• 使用show running-config
– 显示ACL详细信息和绑定位置
• 使用show access-list
– 显示所有的ACL列表内容
命名的访问列表
• 可以使用字符串代替数字,来标识ACL,称为
命名ACL。使用具名ACL,可以在不删除整个
ACL的情况下修改它。
• 具名ACL用于以下一些情况:
– 想用字符串直观标识一个ACL。
– 在路由器上,对于给定的协议,需要配置超出了99
个标准ACL或者100个扩展ACL。
• 在使用具名ACL的时候,需要考虑到以下的因
素:
– 有名ACL与Cisco IOS 之前的版本不兼容。
– 不能为多个ACL使用相同的名字。
– 不同类型的ACL不能使用相同的名字。例如,不能
使用同一个名字来命名一个标准ACL和一个扩展
ACL。
• 可以使用下面的命令为一个ACL命名:
• 在ACL配置模式中,可以指定一个或者多个允
许或者禁止条件。命令如下:
• 将Named ACL关联到某个端口。
Router(config)# ip access-list { standard | extended } name
Router(config {std- | ext-}nacl)#
{ permit | deny } { ip access list test conditions }
…
no { permit | deny } { ip access list test conditions }
Router(config-if)# ip access-group name { in | out }
实例
• 为一个名为Internetfilter的标准ACL设定条件。
(所有其他的条件隐含禁止。)
• ip access-list standard Internetfilter
• deny
• permit
• permit
• permit 和deny指令没有数字,"no"表示删除某
个测试条件。
• Router(config {std- | ext-}nacl)#
• {permit | deny} {ip ACL test conditions}
• no {permit | deny} {ip ACL text conditions}
标识ACL
• 使用“deny”为一个有名ACL设
定条件。
deny {source [source-wildcard] | any}
• 使用这个命令的no形式取消设定
的deny条件。
no deny {source [source-wildcard] | any}
标识ACL
• 使用“permit”为有名标准ACL设定条
件。
permit {source [source-wildcard] | any}[log]
• 使用这个命令的no形式取消设定的条件。:
no permit {source [source-wildcard]| any}
• 在access-list配置模式使用下这个命令,
需要在ip access-list 命令之后,定义数据
报经过ACL的条件。
应用和验证访问控制列表
• ACL可以控制路由器支持的绝大部分协议。在
全局ACL配置的时候,可以输入一个代表协议
的数字,作为它的第一个参数。根据这个数字,
路由器会识别使用哪一个ACL软件。对于某个
协议,可能有多个ACL
• 对于一个新的ACL,可以选择不同的数字,只
要其在协议数字范围之内。但是,一个端口的
一个协议,只能够指定一个ACL。
• 对于某些协议,一个端口可以指定两个ACL:
一个负责收到的数据,一个负责发出的数据。
而某些协议,需要把这两个ACL组合成一个负
责进出该端口的数据
• 假如ACL负责控制接收的数据,当路由
器接收到数据报,将检查是否满足ACL
的条件。假如这个数据报被允许,路由
器继续处理这个数据报。如果被拒绝,
该数据报将被丢弃。
• 如果ACL是负责控制发出的数据,当接
收到一个数据报,并发送到了发出端口,
路由器将检查ACL的条件是否满足。假
如数据报被允许,则传送这个数据报,
如果数据报被拒绝,将丢弃这个数据报。
ACL的放置
• ACL可以用于控制数据流,消除不需要
的数据流。依赖于ACL放置的位置,可
以减少不必要的数据流。如在远离目的
端,禁止某些数据流,可以减少使用到
达目的端的网络资源。
• ACL放置的规则是:尽量将扩展ACL放
置在靠近被拒绝的数据源。标准ACL不
能指定目标地址,所以需要把标准ACL
放置在尽量靠近目标的地方。
ACL的放置
ACL的放置
• 防火墙路由器通常位于内部网和外部网之间,
提供了一个隔离点,使得内部网结构不会受
外部网影响。可以在防火墙路由器上使用
ACL,以控制流入和流出内部网某个特定部
分的数据流。
• 为了使用ACL的安全特性,至少需要在边界
路由器上配置ACL。针对外部网络,或者网
络的控制较少的区域到网络中更为私有的区
域,这样可以提供基本的安全性。在这些边
界路由器上,可以为路由器的每一个端口的
每一个协议配置ACL,使得流入或者流出的
数据被过滤。
Net1
Net2
E0
S0
E1
Non-
E2
Net3
访问控制列表举例
1. Net1可以使用所有的协议访问所有的子网和Internet,不接受任何非
本子网TELNET的访问。不接收所有非设备的HTTP和
FTP访问。
2. Net2和Net3在网内可以使用所有的协议,但不能使用
Internet。
3. Net2中的服务器只接收来自Net3和Net2设备的访问。
4. 某日,Net3中的主机因为大量发送广播包,被网管人
员取消了访问权限。
实 验
掌握配置标准IP访问控制列表;
掌握配置扩展IP访问控制列表;
掌握配置命名的IP访问控制列表;
通过实验了解如何控制内外网络之间的相互访问。
目的:
配置环境图示及参数
switch_a
switch_b
pc12
pc22
Fa0/2 Fa0/3
Fa0/3
Fa0/2
Fa0/0
S0/0
S0/0
pc11
Fa0/1
Fa0/0
pc21
Fa0/1
R1
R2
问 题
• 1. IP访问控制列表有哪几种类型?
• 2. 标准IP访问控制列表的编号范围是?
• 3. 扩展IP访问控制列表的编号范围是?
• 4. 使用命名IP访问控制列表有哪些好处?