访问控制列表 ACL
访问控制列表(Access Control List,ACL) 是路由器和交换机接口的指令列表,用来控制端口进出的数据包。其目的是为了对某种访问进行控制。
作用
ACL可以限制网络流量、提高网络性能。例如,ACL可以根据数据包的协议,指定数据包的优先级。
ACL提供对通信流量的控制手段。例如,ACL可以限定或简化路由更新信息的长度,从而限制通过路由器某一网段的通信流量。
ACL是提供网络安全访问的基本手段。ACL允许主机A访问人力资源网络,而拒绝主机B访问。
ACL可以在路由器端口处决定哪种类型的通信流量被转发或被阻塞。例如,用户可以允许E-mail通信流量被路由,拒绝所有的Telnet通信流量。
3P原则!!!!
记住 3P 原则(呵呵呵呵)你便记住了在路由器上应用 ACL 的一般规则。您可以为每种协议 (per protocol)、每个方向 (per direction)、每个接口 (per interface) 配置一个 ACL:
每种协议一个 ACL:要控制接口上的流量,必须为接口上启用的每种协议定义相应的 ACL。
每个方向一个 ACL :一个 ACL 只能控制接口上一个方向的流量。要控制入站流量和出站流量,必须分别定义两个 ACL。
每个接口一个 ACL :一个 ACL 只能控制一个接口(例如快速以太网0/0)上的流量。
ACL 的编写可能相当复杂而且极具挑战性。每个接口上都可以针对多种协议和各个方向进行定义。示例中的路由器有两个接口配置了 IP、AppleTalk 和 IPX。该路由器可能需要 12 个不同的 ACL — 协议数 (3) 乘以方向数 (2),再乘以端口数 (2)。
ACL 的编写可能相当复杂而且极具挑战性。每个接口上都可以针对多种协议和各个方向进行定义。
执行过程
一个端口执行哪条ACL,这需要按照列表中的条件语句执行顺序来判断。如果一个数据包的报头跟表中某个条件判断语句相匹配,那么后面的语句就将被忽略,不再进行检查。
数据包只有在跟第一个判断条件不匹配时,它才被交给ACL中的下一个条件判断语句进行比较。如果匹配(假设为允许发送),则不管是第一条还是最后一条语句,数据都会立即发送到目的接口。如果所有的ACL判断语句都检测完毕,仍没有匹配的语句出口,则该数据包将视为被拒绝而被丢弃。这里要注意,ACL不能对本路由器产生的数据包进行控制。
如果设备使用了TCAM,比如aute U3052交换机,那么所有的ACL是并行执行的。举例来说,如果一个端口设定了多条ACL规则,并不是逐条匹配,而是一次执行所有ACL语句。
ACL分类
目前有三种主要的ACL:标准ACL、扩展ACL及命名ACL。其他的还有标准MAC ACL、时间控制ACL、以太协议 ACL 、IPv6 ACL等。
标准的ACL使用 1 ~ 99 以及1300~1999之间的数字作为表号
扩展的ACL使用 100 ~ 199以及2000~2699之间的数字作为表号。
标准ACL可以阻止来自某一网络的所有通信流量,或者允许来自某一特定网络的所有通信流量,或者拒绝某一协议簇(比如IP)的所有通信流量。
扩展ACL比标准ACL提供了更广泛的控制范围。例如,网络管理员如果希望做到“允许外来的Web通信流量通过,拒绝外来的FTP和Telnet等通信流量”,那么,他可以使用扩展ACL来达到目的,标准ACL不能控制这么精确。
在标准与扩展访问控制列表中均要使用表号,而在命名访问控制列表中使用一个字母或数字组合的字符串来代替前面所使用的数字。使用命名访问控制列表可以用来删除某一条特定的控制条目,这样可以让我们在使用过程中方便地进行修改。 在使用命名访问控制列表时,要求路由器的IOS在11.2以上的版本,并且不能以同一名字命名多个ACL,不同类型的ACL也不能使用相同的名字。
随着网络的发展和用户要求的变化,从IOS 12.0开始,思科(CISCO)路由器新增加了一种基于时间的访问列表。通过它,可以根据一天中的不同时间,或者根据一星期中的不同日期,或二者相结合来控制网络数据包的转发。这种基于时间的访问列表,就是在原来的标准访问列表和扩展访问列表中,加入有效的时间范围来更合理有效地控制网络。首先定义一个时间范围,然后在原来的各种访问列表的基础上应用它。
基于时间访问列表的设计中,用time-range 命令来指定时间范围的名称,然后用absolute命令,或者一个或多个periodic命令来具体定义时间范围。
ACL放置位置
标准ACL要尽量靠近目的端
扩展ACL要尽量靠近源端
注意事项
1.最有限制性的语句应该放在ACL语句的首行。把最有限制性的语句放在ACL语句的首行或者语句中靠近前面的位置上,把“全部允许”或者“全部拒绝”这样的语句放在末行或接近末行,可以防止出现诸如本该拒绝(放过)的数据包被放过(拒绝)的情况
2.增加:标准ACL、扩展ACL,新的表项只能被添加到ACL的末尾,这意味着不可能改变已有访问控制列表的功能。如果必须改变,只有先删除已存在的ACL,然后创建一个新ACL,将新ACL应用到相应的接口上。
命名ACL可以在指定的位置添加新的一行。
3.删除:!!!标准ACL、扩展ACL语句不能被逐条的删除,只能一次性删除整个ACL。命名ACL可以单一删除某一行,
4.在ACL的最后,有一条隐含的“全部拒绝”的命令,所以在 ACL里一定至少有一条“允许”的语句
5.ACL只能过滤穿过路由器的数据流量,不能过滤由本路由器上发出的数据包
6.在路由器选择进行以前,应用在接口进入方向in的ACL起作用。在路由器选择决定以后,应用在接口离开方向out的ACL起作用
7.如果建立一个空的ACL,绑定至端口,则会允许所有流量通过。如果ACL中有一句规则,则ACL末尾会隐含一条
deny any any
(1)标准访问列表
access-list access-list-number { permit | deny } {source [source-wildcard] | any|host source}
源IP地址
源IP地址的通配符
access-list-number : 1~99、1300~1999
{ permit | deny }: permit、deny 、 remark
{source [source-wildcard] | any|host source}:192.168.1.0 0.0.0.255 host 192.168.0.1 any
access-list 编号 动作 源地址
access-list 1 deny host 172.17.31.222
access-list 1 permit any
允许172.17.31.0/24通过,其他主机禁止
access-list 1 permit 172.17.31.0 0.0.0.254
(反码255.255.255.255减去子网掩码,如172.17.31.0/24的255.255.255.255— 255.255.255.0=0.0.0.255)
禁止172.17.31.0/24通过,其他主机允许
access-list 1 deny 172.17.31.0 0.0.0.254
access-list 1 permit any
(2)扩展访问列表
access-list access-list-number { permit | deny } { protocol \ protocol-keyword }
{ source [ source-wildcard ] | any|host source }
{ destination destination-wildcard } | any |host source}
[protocol-specific options]
[established] [log]
access-list-number :100-199、2000-2699
{ permit | deny } :permit deny remark
{ protocol \ protocol-keyword } : tcp udp ip icmp ……
{ source [ source-wildcard ] | any|host source } :192.168.1.0
0.0.0.255 host 192.168.0.1 any
{ destination destination-wildcard } | any |host
source}:同上
[protocol-specific options]:eq等于 lq小于 gq大于 范围rang 15 20
[established] :established选项只适用于TCP,限制外部发起的TCP连接,外网只能回应内网的TCP连接,
而不能发起对内网的TCP连接!
[log]:将匹配的记录记载至日志。
access-list 编号 动作 协议 源地址 目的地址 端口
允许所有主机访问172.17.31.222的www服务
access-list 100 permit tcp host 172.17.31.222 any eq www
允许所有主机访问172.17.31.222主机telnet(23)端口其他禁止
access-list 100 permit tcp any host 172.17.31.222 eq 23
如果禁用了icmp包,可禁止外部的ping 消息
(3)将acl应用到端口
进入端口:interface f0/0
绑定命令:ip access-group acl_number out | in
再一次强调,在标准ACL和扩展ACL中,如果执行no
access-list acl_number 会删除整个acl及其引用的命令。
用no 作为任何acl语句的开头,会有完全相同的效果。
千万不要在生产设备上轻易使用此命令!
第二部分
从IOS11.2开始,思科路由器同时支持编号acl和命名acl
(1)在路由器上配置命名的标准ACL.
ip access-list standard acl名称 回车
动作 源地址
ip access-list standard acl__name 回车
permit | deny source source_netmask | host x.x.x.x | any 回车
(2)命名扩展ACL
ip access-list extended acl名称 回车
动作 协议 源地址 目的地址 端口号 ……
ip access-list exteded acl__name 回车
permti | deny tcp | udp | ip …… 源地址 目的地址 eq | lg | gq | rang 端口号|服务 [established] [log]
(3)应用到端口
interface f0/0
ip access-group acl_name in | out
修改命名ACL
在cisco的IOS新版本(12.2(14)S,12.2(15)T,12.3(2)T以上)中引入了ACL序列编号(ACL Sequence Numbering)功能,使得访问控制列表的编辑变得非常的方便和快捷,
序列号不会显示在 show running-config 路由器运行配置中。只有运行show access-list查看访问列表显示命令才能显示输入的序列号信息。
例如:
show running-config
ip access-group test in
ip access-list extended tset
permit ip 10.10.10.0 0.0.0.255 any
permit icmp 10.10.10.0 0.0.0.255 any
deny ip 10.10.20.0 0.0.0.255 any
permit tcp 10.10.30.0 0.0.0.255 host 192.168.87.65 eq www
我们可以再指定的位置增加一行语句,
1.建立一个测试用访问控制列表
R1(config)#ip access-list
extended test
R1(config-ext-nacl)#deny tcp any any eq 80
R1(config-ext-nacl)#deny udp any any eq 8000
R1(config-ext-nacl)#permit ip any any
2.显示访问控制列表语句的当前序号
R1#show ip access-lists test
Extended IP access list test
10 deny tcp any any eq www
20 deny udp any any eq 8000
30 permit ip any any
3.在访问控制列表中指定的位置上增加一个语句(注意新增语句的序列号)
R1(config)#ip access-list extended test
R1(config-ext-nacl)#12 permit udp any host 192.168.1.1 eq 8000
R1#show ip access-lists test
Extended IP access list test
10 deny tcp any any eq www
12 permit udp any host 192.168.1.1 eq 8000
20 deny udp any any eq 8000
30 permit ip any any
在命名ACL中,我们可以删除特定的一行,
删除访问控制列表中的某个特定语句
R1(config)#ip access-list extended test
R1(config-ext-nacl)#no 20 deny
udp any any eq 8000
R1#show ip access-lists test
Extended IP access list test
10 deny tcp any any eq www
12 permit udp any host 192.168.1.1 eq 8000
30 permit ip any any
重新编排一个访问控制列表的序号
R1(config)#ip access-list resequence test 10 10
(从序号10开始排序,每次增加为10)
R1(config)#do show ip access-lists test
Extended IP list
test
10 deny any
any eq
20 permit udp any host 192.168.1.1 eq 8000
30 permit ip any any
(在这里do 命令运行您在配置模式下执行一个EXEC命令,该命令要求IOS版本12.2(8)T 以上)
第三部分
ACL的查看、注释、分析
查看:
show running-config:可以显示ACL,以及哪些接口启动ACL
show ip interfaces: 在路由器接口上启动了哪个ACL
show access-lists :显示ACl中的语句(可以显示每条规则被匹配的次数),可以使用
clear access-list counters [acl_number | acl_name]来清除计数器
show access-list [acl_number | acl_name] :查看特定ACL
show ip access-list :只列出 IP协议的ACL
注释:
在大型网络环境中可能同时存在上百条ACL,上千行规则语句。从 IOS12.0(2)T 开始可以在ACL语句中嵌入
注释或备注,对编号ACL和命名ACL都有效果。
编号ACL access-list 1 remark this is access
命名ACL ip access-list standard|extended ACL_NAME 回车
remark this is access
分析:
如果在ACL语句后加log 选项,则匹配语句的访问都会被记录,问题是被记录到哪里?
默认地,日志记录只在路由器的控制台线路上打开,我们必须让电脑连接路由器,在电脑上看这些记录,当消息滚过屏幕并超出了终端软件的历史缓存,我们则没有任何机制可以再看到那些丢失的消息。
如果把日志消息记录到除了线路以外的其他目的地,则可以避免这个问题。
要在其他地方记录日志,则必须相应地打开日志记录并进行配置。使用以下命令打开日志记录:
Router(config)#logging on 允许将日志记录到非控制台目的地
可以将日志信息转发到以下4种基本目的地
●线路;
●内部缓存;
●系统日志服务器;
●SNMP管理台;
Router(config)#logging monitor [severity_level] 记录到逻辑VTY
Router(config)#logging buffered [buffer_size|severity_level] 记录到路由器的内部缓存
Router(config)#logging host {IP_address|hostname} 记录到日志服务器中