CCNA22-访问控制列表acl

ACL(Access Control List,访问控制列表),是一系列运用到路由器接口的指令列表,路由根据ACL中指定的条件对经过路由器接口的数据包进行检查。针对IP协议在路由的每个端口可以创建两个ACL:一个用于过滤进入端口的数据,另外一个用于过滤流出端口的数据。
ACL指令的放置顺序是很重要的,Cisco的IOS软件,按照ACL中指令的顺序依次检查数据包是否满足某一个指令条件,当检测到某个指令满足条件时就执行该指令规定的动作,并且不会再检测后面的指令条件。
路由器为了过滤数据包,需要配置一系列的规则,以决定什么样的数据包能够通过,这些规则就是通过访问控制列表
访问控制列表是由permit | deny等语句组成的一系列有顺序的规则,这些规则根据数据包的源地址、目的地址、端口号等来描述。ACL通过这些规则对数据包进行分类,这些规则应用到路由器或交换机接口上,它们根据这些规则判断哪些数据包可以接收,哪些数据包需要拒绝。
ACL的作用大致分为下面这几点:
限制网络流量,提高网络性能。
提供数据流控制。
为网络访问提供基本的安全层。
决定转发或阻止哪些类型的数据流。

1* ACL的工作流程

下图为ACL的工作流程图,当路由器的进入方向的接口收到一个分组的时候,首先检查它是否是可路由的,如果不可路由(比如并非是发往本路由的分组),则直接丢弃。

如果可路由,接下来判断进入方向的接口是否配置了ACL,如果没有配置进入方向的ACL,则直接查询路由表,然后根据路由表中找到的端口准备往外转发;如果配置了进入方向的ACL则检查指令组是否允许该分组通过,不允许则丢弃,允许则查询路由表,选择外出接口准备往外转发,从这里可以看出入站的ACL检查是在查询路由表之前执行的。

外出接口选择好之后,再检查外出接口上有没有配置ACL,如果配置了ACL则检查ACL指令组是否允许,没有配置ACL则直接转发。

184158805.jpg

在ACL流程图中的”ACL指令组”可能包含多条语句,”ACL指令组”的工作流程图如下:

184353404.jpg

“ACL指令组”是逐条执行的,在逐条执行的过程中,只要发现有一条匹配,则使用那一条规定动作确定允许或拒绝(比如执行第一条的时候就匹配了,那么就使用第一条规定的动作允许或拒绝,后面的语句就不会被执行了),如果所有指令都不匹配,默认的动作是拒绝。



2* 通配符掩码在ACL中的作用

路由器使用通配符掩码(Wildcard Masking)与源或目标地址一起来分辨匹配的地址范围,在访问控制列表中,将通配符掩码中的位设置成1表示忽略IP地址中对应的位,设置成0表示必须精确匹配IP地址中对应的位,

192.168.1.0 0.0.0.255

这个例子中,通配符掩码是0.0.0.255,前面24位是0,最后8位是1,也就是前面24位必须精确匹配,最后8位是什么都没关系。将这个通配符和前面的IP地址192.168.1.0结合起来意思就是,匹配从192.168.1.0到192.168.1.255的所有IP地址(这和OSPF或EIGRP中的反掩码是一个道理)。

192.168.0.0 0.0.255.255

这个例子匹配的IP地址范围就是192.168.0.0-192.168.255.255。

192.168.16.0 0.0.7.255

这个例子中,通配符掩码的第三个数是7,IP地址的第三位是16,对他们进行分解转化成二进制就是:

7 = 00000 111
16 = 00010 000

前面说过,通配符掩码中0的部分必须精确匹配,1的部分什么都可以,也就是说16的二进制表示法前面的5位(00010)必须精确匹配,最后3位的取值范围可以是(000-111),那么就是:

00010000-00010111,转化成十进制就是16-23。

所以这条规则匹配的IP地址范围就是”192.168.16.0-192.168.23.255″。

192.168.1.0 0.0.0.254

这条规则匹配的是192.168.1.0中所有偶数IP地址。

192.168.1.1 0.0.0.254

这条规则匹配的是192.168.1.0中所有奇数IP地址。

上面这些例子说明了怎么通过规则中的通配符掩码确定匹配的IP地址范围,下面就来看一看一个数据包中包含了源IP地址192.168.0.2到达路由器,假设路由器上的访问控制列表语句中包含地址对”192.168.0.0 0.0.0.255″,路由器是如何操作的:

1. 使用访问控制列表中的地址对”192.168.0.0 0.0.0.255″执行逻辑或操作(192.168.0.0和0.0.0.255执行逻辑或运算),得到结果192.168.0.255。

2. 用地址对中的通配符掩码(0.0.0.255)和数据包头中的IP(192.168.0.2)执行逻辑或操作,结果为192.168.0.255。

3. 将得到的两个结果相减,如果结果是0则匹配,如果结果非0,则说明不匹配。对接下来的ACL条目都重复以上三步相同的操作。

在IP访问控制列表地址掩码对中,有两个关键词可以用来省略一些输出:

“any” : 它可以用来代替地址掩码对”0.0.0.0 255.255.255.255″,该地址掩码对匹配任何IP地址。
“host” : 它可以用来代替通配符掩码”0.0.0.0″,该通配符掩码只能匹配一个IP地址。比如”host 192.168.1.1″等同于地址对”192.168.1.1 0.0.0.0″。在标准的访问控制列表中,如果仅匹配一个IP地址,可以省略关键字host,也就是说在标准访问控制列表条目中,没有通配符掩码,说明掩码是”0.0.0.0″;而在扩展的访问控制列表中不能省略host关键字。


191853165.jpg

3*.标准ACL配置

* 如何配置标准ACL

首先配置下面的拓扑,保证全网可以互通:


PC配置

PC(config)#interface  f0/0
PC(config-if)#ip address 192.168.1.1 255.255.255.0
PC(config-if)#no shutdown
PC(config)#ip  default-gateway  192.168.1.2

Server配置

Server(config)#ip default-gateway  192.168.0.1
Server(config)#interface f0/0
Server(config-if)#ip address 192.168.0.2 255.255.255.0
Server(config-if)#no shutdown

Router1配置

Router1(config)#interface f1/0
Router1(config-if)#ip address  192.168.1.2 255.255.255.0
Router1(config-if)#no shutdown
Router1(config)#interface  s0/0
Router1(config-if)#ip address 10.1.1.1 255.255.255.0
Router1(config-if)#no shutdown
Router1(config)#ip route 192.168.1.0 255.255.255.0  f1/0 192.168.1.1
Router1(config)#ip route 10.1.1.0 255.255.255.0  s0/0 10.1.1.2
Router1(config)#ip route 192.168.0.0 255.255.255.0  s0/0

Router2配置

Router2(config)#interface  s0/0
Router2(config-if)#ip address 10.1.1.2 255.255.255.0
Router2(config-if)#no shutdown
Router2(config-if)#int f1/0
Router2(config-if)#ip address 192.168.0.1 255.255.255.0
Router2(config-if)#no shutdown
Router2(config)#ip route  192.168.1.0 255.255.255.0 s0/0

完成基本连通性的配置后,下面来创建和应用标准的访问控制列表。

访问控制列表是在路由器的全局配置模式输入的,增加一条标准的访问控制列表的语句如下:

Router(config)#access-list {ACL的编号} {deny|permint} {source [source-wildcard]|any} [log]
                                                                                                                                                                                                                                                                                                                  
/*
 * 其中大括号里面的类容表示必选,中括号里面的类容表示可选,
 *
 * {ACL的编号}:
 * 标准ACL的编号范围是1-99之间的整数,
 * 扩展ACL的编号是100-199之间的整数。
 *
 * {deny|permint}:
 * 指定匹配这条规则的数据是允许(permint)还是拒绝(deny),
 *
 * {source [source-wildcard]|any} :
 * 指定了一个IP地址范围,使用地址对的形式,比如,
 * "192.168.1.0 0.0.0.255","host 192.168.1.1"或者"any"。
 * 这个参数在前面的"通配符掩码在ACL中的作用"中详细介绍过。
 *
 * [log]:可选参数,表示要不要将匹配的条目显示在控制台输出中,
 * 或者输出到特定的服务器。
 */

下面在Router2上面来创建一条标准ACL,禁止IP(192.168.1.1)的访问:

    /*
     * 创建标准的ACL,编号是1,第一个条目是阻止192.168.1.1,
     * 编号是1的ACL的第二个条目是允许任何IP地址的访问,
     * 两个条目的顺序很重要,不能颠倒,如果将允许任何IP地址放置第一条,
     * 那么由于每个IP地址都能匹配第一条,所以第二条将永远不会被执行到。
     * 这个ACL的第一条还可以简写成"access-list 1 deny 192.168.1.1",
     * 这是标准ACL的简写规则,在扩展ACL中不能省略关键字host。
     */
Router2(config)#access-list  1  deny  192.168.1.1 0.0.0.0 log
Router2(config)#access-list  1  permit any  log
    /*
     * 将编号是1的标准ACL应用到路由器的s0/0接口上,
     * 方向是in,即进入的方向。
     */
Router2(config)#interface s0/0
Router2(config-if)#ip access-group 1 in
                                                                                                                                                                                                                                                                                                        
    /*在PC上ping Server测试*/
PC#ping 192.168.0.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.0.2, timeout is 2 seconds:
U.U.U
Success rate is 0 percent (0/5)

这条标准的ACL仅仅是禁止了一个IP地址192.168.1.1,如果PC上面还有其他接口,使用高级ping命令让其他接口的IP地址作为源,去ping Server的f0/0接口IP,还是可以ping通的。

* 如何编辑标准ACL

完成上面的配置后,可以在Router2上使用下面的命令来查看ACL条目:

Router2#show access-lists
Standard IP access list 1
    10 deny   192.168.1.1 log (5 matches)
    20 permit any log
/*
     * "Standard IP access list 1"这一行是ACL类型和编号,
     * 每一行是一个条目,其中"10"是行号,
     * 后面是执行的操作,(5 matches)表示匹配的次数。
     */

可以使用下面的命令来删除标准ACL中对应的条目:

/*首先进入标准ACL 1的编辑模式*/
Router2(config)#ip access-list  standard  1
Router2(config-std-nacl)#no 10    /*删除行号是10的这一行*/
Router2(config-std-nacl)#end
/*再次查看,发现只剩下行号是20的了*/
Router2#show  access-lists
Standard IP access list 1
    20 permit any log

这里有一点不得不说一下,这种删除方法只能适用于Cisco的IOS 12.0之后的版本(包括12.0),这里有个简单的判断方法,如果使用”show access-lists”看不到每个条目前面的行号,就说明当前路由器的IOS版本不支持这种方法,也同样不支持接下来要介绍到的”标准命名ACL”。

标准ACL配置完成后,如果不需要了可以用下面的方法来删除ACL:

/*删除编号是1的标准ACL*/
Router2(config)#no access-list 1
                                                                                                                                                                                                                                                            
/*删除在接口上的调用*/
Router2(config)#int s 0/1
Router2(config-if)#no ip access-group 1 in
Router2(config-if)#end
Router2#

* 标准ACL放置的位置

标准的ACL只能对源地址进行控制,如下图所示,将R1的s0/0接口作为源地址,R3的s0/1作为目的地址,数据一共要经过四个接口。

145859312.jpg

如果将前面创建的ACL 1配置在R1的s0/0上,方向是Out,结果将不起作用,因为ACL仅对穿越流量起作用,对本路由器起源的流量不起作用。

如果将前面创建的ACL 1配置在R2的s0/0上,方向是In,结果起作用,R1不能访问R3了,但同时R1也不能访问R2了,因为标准ACL只针对源地址进行过滤。

如果将前面创建的ACL 1配置在R2的s0/1上,方向是Out,结果正确,R1能正常访问R2,但是不能访问R3。

如果将前面创建的ACL 1配置在R3的s0/1上,方向是In,结果同样正确。

经过上面四步的分析,可以得出这样的结论,标准访问控制列表要尽可能的应用在靠近目标端,因为标准ACL只针对源地址进行过滤。


* 如何配置标准命名ACL

可以使用字符来代替数字标识ACL,称为命名ACL,命名ACL与Cisco IOS 11.2以前的版本不兼容,现在的版本一般都是12.0以后的版本。另外,不能为多个ACL使用相同的名字,不能使用相同的名字来命名不同类型的ACL,比如,不能使用相同的名字来命名一个标准ACL和一个扩展ACL。

下面使用标准命名ACL来实现拒绝PC访问Server:

/#
/*"Deny-PC"就是这条标准ACL的字符串名称,可以自己随便写一个*/
#/
Router2(config)#ip access-list standard Deny-PC
/* /*第一条规则,阻止192.168.1.1*/*/
Router2(config-std-nacl)#deny  host 192.168.1.1 log
 /*第二条规则允许所有IP*/
Router2(config-std-nacl)#permit any log
Router2(config-std-nacl)#exit
/*在Router2上的f1/0上调用acl*/
Router2(config)#int f1/0
Router2(config-if)#ip access-group Deny-PC out
/***查看acl**/
Router2#show  access-lists
Standard IP access list Deny-PC
    10 deny   192.168.1.1 log (5 matches)
    20 permit any log
PC#ping 192.168.0.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.0.1, timeout is 2 seconds:
U.U.U
Success rate is 0 percent (0/5)
PC#

标准命名的ACL也可以使用标准ACL里面的编辑语句来编辑它:

/删除acl/
Router2(config)#ip access-list  standard  Deny-PC
Router2(config-std-nacl)#no  20
/*再次查看,发现只剩下一条ACL条目了*/
Standard IP access list Deny-PC
    10 deny   192.168.1.1 log (5 matches)
/*可以使用下面的方法删除这个标准命名ACL,并在接口上删除对它的调用*/
Router2#conf t
Router2(config)#no ip access-list standard Deny-PC
Router2(config)#int f1/0
Router2(config-if)#no ip access-group Deny-PC out
Router2(config-if)#end
Router2


*4.扩展ACL配置

* 如何配置扩展ACL

配置扩展ACL也分为两个步骤:创建ACL和在接口下调用;扩展ACL的结尾也是隐式的拒绝所有。下面是创建扩展ACL的基本格式:

   Router(config)#access-list access-list-number {deny|permit|remark} protocol source source-wildcard [operator operand] [port port-name or name] destination destination-wildcard [operator operand] [port port-name or name] [established]
                                                                                                                                                                                                        
   /*
    * "access-list-number"是扩展ACL编号,范围从100-199。
    *
    * {deny|permit|remark} 是这条ACL条目执行的操作,拒绝|允许|注释,
    * 其中的"remark"是添加注释,相当于程序设计中的注释语句。
    *
    * "protocol"代表协议,可以用具体的协议名称代替,比如TCP、UDP、ICMP、IP等。
    *
    * "source source-wildcard",表示源地址以及通配符掩码
    *
    * "destination destination-wildcard",表示目的地址以及通配符掩码。
    *
    * "[port port-name or name]"表示端口号或名称,输入telnet和23的效果是一样的。
*
    * "[established]"在后面的"扩展ACL中的established"中介绍。
    */

下面举个例子,还是使用配置好的的下图作为拓扑图,配置扩展ACL拒绝PC去往Server的Telnet通信。

203939131.jpg

在Router2上f1/0上配置扩展的acl

/*
* 扩展ACL号为100,第一条命令拒绝tcp类型的连接,
 * 源主机是192.168.1.1,没有配置源端口,默认就匹配所有端口,
 * 目的主机是192.168.0.2,目的端口是23,即telnet。
 */
Router2(config)#access-list 100 deny   tcp host 192.168.1.1 host 192.168.0.2 eq  telnet
/*第二条命令允许所有IP通信,源和目的是任意主机。*/
Router2(config)#access-list 100 permit ip any any
¥
¥
/*在Router2的f1/0接口上调用它*/
Router2(config)#interface  f1/0
Router2(config-if)#ip access-group 100   out
/查看acl的相关消息//
Router2#show  access-lists
Extended IP access list 100
    10 deny tcp host 192.168.1.1 host 192.168.0.2 eq telnet
    20 permit ip any any

Server上面配置vty

/Server上配置本地的用户名和密码验证/
Server(config)#username ccna  password  ccna
/配置vty使用本地用户名和密码登陆/
Server(config)#line vty  0 4
Server(config-line)#login   local

我们测试PC是否可以telnet登陆Server

/*PC发现无法连接上Server*/
PC#telnet 192.168.0.2
Trying 192.168.0.2 ...
% Destination unreachable; gateway or host down
/ping得通哦!!!!!因为没有禁止ping的相关协议的数据包/
PC#ping   192.168.0.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.0.2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 168/188/216 ms
/发现我们在Router1上可以登陆到Server上/
Router1#telnet  192.168.0.2
Trying 192.168.0.2 ... Open
User Access Verification
Username: ccna
Password:
Server>
Server>

* 扩展ACL放置的位置

210315902.jpg

R1的12.1.1.1是源地址,R3的23.1.1.3是目的地址:

如果将扩展ACL 100放在R1的s0/0接口上,方向是Out,结果将不起作用,前面也介绍过,ACL只对穿越流量起作用,对本地起源的流量不起作用。

如果将扩展ACL 100放在R2的s0/0接口上,方向是In,结果正确,并无其他影响。

如果将扩展ACL 100放在R2的s0/1接口上,方向是Out,结果正确,并无其他影响。

如果将扩展ACL 100放在R3的s0/1接口上,方向是In,结果正确,并无其他影响。

经过上面四步的分析,因为扩展ACL是可以根据源和目的地址以及端口进行过滤,放在R2和R3的任何接口上都不会影响其他数据流量。但有以下两点需要注意:

放在R2的s0/1接口,方向是Out,根据前面的”ACL工作流程示意图”可以知道,路由器会先处理这个数据,并且查询路由表准备转发,转发的时候发现在转发端口上面调用的扩展ACL 100中,有一个条目匹配,并且动作是阻止,这个数据在这个时候被丢弃,这就浪费了R2的CPU资源(需要查询路由表)。

放在R3的s0/1接口,方向是In,不但会因为一个最终会被丢弃的数据浪费R2和R3的CPU资源,还会造成带宽资源的浪费。

所以从上面的分析得出结论,扩展ACL应该尽可能的放在靠近源端,这样可以使得一些非法的数据流尽早的被丢弃。所以在上面的实例中,这个扩展ACL 100被放置在R2的s0/0接口上,方向是In,这是最靠近源的端口。



* 如何编辑扩展ACL

上面配置扩展ACL拒绝PC去往Server的Telnet通信,但是PC仍然可以ping通Server,那么我们现在就开始学习如何让PC不能ping通Server。

/*首先我们查看Router2上面的扩展ACL*/
Router2#show  access-lists
Extended IP access list 100
    10 deny tcp host 192.168.1.1 host 192.168.0.2 eq telnet
    20 permit ip any any
.
.
/*在PC上测试Ping*/
PC#ping 192.168.0.2
 /*可以ping通*/
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.0.2, timeout is 2 seconds:
!!!!!
..
..
/*
* 在Router2上添加ACL条目到ACL 100,让PC无法ping通R3,
* 进入ACL 100编辑模式。
 */
Router2(config)#ip access-list extended  100
 * 添加一条新的规则,阻止ICMP协议,
Router2(config-ext-nacl)#deny  icmp host 192.168.1.1  host 192.168.0.2
.
.
/*
 * 查看ACL 100,发现了一个问题,
 * 新添加的ACL条目被增加到了ACL的末尾,
* 而在此之前有一条"permit ip any any",
 * 这样,新增加的那个条目永远也别想执行到,
 * 这个时候在PC上ping Server的192.168.0.2任然能够Ping通。
 */
Router2#show   access-lists
Extended IP access list 100
    10 deny tcp host 192.168.1.1 host 192.168.0.2 eq telnet (2 matches)
    20 permit ip any any (41 matches)
    30 deny icmp host 192.168.1.1 host 192.168.0.2
/*先用下面的命令删除最新添加的ACL条目*/
    Router2(config)#ip access-list extended 100
    Router2(config-ext-nacl)#no 30
..
/*
 * 然后用这条命令在中间插入一条ACL条目,
 * 前面的数字15是条目编号,可以是10-20之间的任何整数,
* 这样这条条目就会被自动插入到ACL100的10到20之间。
 */
Router2(config)#ip access-list extended  100
Router2(config-ext-nacl)#15 deny icmp host 192.168.1.1 host 192.168.0.2
..
..
/*查看一下,发现果然插入到了10-20之间,这样PC就Ping不了Server了。*/
Extended IP access list 100
    10 deny tcp host 192.168.1.1 host 192.168.0.2 eq telnet (2 matches)
    15 deny icmp host 192.168.1.1 host 192.168.0.2
    20 permit ip any any (46 matches)
PC#ping   192.168.0.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.0.2, timeout is 2 seconds:
U.U.U
Success rate is 0 percent (0/5)
PC#

如果大家觉得ACL条目前面的编号从10开始不怎么习惯,可以使用下面的命令自己调整起始编号和编号的递增方式:

/*
     * 100是ACL的编号,也可以是一个命名扩展ACL的字符串名称,
     * 1代表起始的数字,5代表增量(每个条目编号增加5)。
 */
Router2(config)#ip access-list resequence 100 1 5
/*查看ACL,条目编号就变成1、6、11了*/
Router2#show  access-lists
Extended IP access list 100
    1 deny tcp host 192.168.1.1 host 192.168.0.2 eq telnet (2 matches)
    6 deny icmp host 192.168.1.1 host 192.168.0.2 (8 matches)
    11 permit ip any any (46 matches)

* 扩展ACL中的established

1、established参数实现原理:

首先回顾一下TCP协议:
TCP数据包中有六个标志位(Code Bits):6 位标志域。表示为:紧急标志URG、有意义的应答标志ACK、推PSH、重置连接标志RST、同步序列号标志SYN、完成发送数据标志FIN。在整个TCP数据传输过程中ACK位除了在第一次握手的时候置位为0外,其他任何时候都置位为1。Eetablished的扩展访问列表只允许ACK或RST位置1的TCP报文通过.
在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
通过检查TCP段头内的ACK和RST标记,关键字established可以实现这一点。如果这两个标记都没有被设置(值为0),表明源点正在向目标建立TCP连接,那么匹配不会发生。报文被访问列表拒绝。

established 访问列表的方向:established是允许来自被请求方的数据。所以如本例,要使R2允许访问R3,则应该将ACL应用在R3向R2的方向,比如,R1的接口G1/0的in方向或者F0/0的out方向。

established 选项只是针对基于TCP协议的通讯,而ICMP,IP,UDP等协议不能使用此参数。

232032283.jpg


首先配置各个路由的IP以及静态路由,让全网都可以互通,这一步这里就不重复了,实验的目的是在R2和R3上面都配置VTY,只允许R3对R2的telnet访问,不允许R2对R3的telnet访问,配置如下:

R2、R3配置VTY:

R2:
R2(config)#enable  secret    ccna
R2(config)#username  cisco password cisco
R2(config)#line vty 0  1869
R2(config-line)#login  local
R2(config-line)#transport  input  telnet
R3:
R3(config)#enable  secret    ccna
R3(config)#username  cisco password cisco
R3(config)#line vty 0  1869
R3(config-line)#login  local
R3(config-line)#transport  input  telnet

R1上面配置ACL:

/*
 * 末尾添加established参数,
* 还有一点要注意,因为是允许R3访问R2的telnet,
* 所以源和目的地址以及端口别搞错了,
* 这个访问列表是当R3的telnet发到R2,R2回复的TCP中携带ACK号才匹配的,
* 所以源应该是R2,源端口应该是R3的telnet端口23,
 * 目的端口是R3上的一个随机端口,没有写出来就是匹配所有端口。
 */
R1(config)#access-list 101   permit tcp host 10.0.1.2 eq telnet host 10.0.2.2  established
/*在f0/0接口上调用,注意方向是in*/
R1(config)#interface  f0/0
R1(config-if)#ip access-group 101 in

测试

R2----telnet-----R3
R2#telnet 10.0.2.2
Trying 10.0.2.2 ...
% Destination unreachable; gateway or host down
/*
 * 发现连接不上,根据前面的分析可以知道,
 * 因为R2始发的TCP连接只有序列号,在经过R1的f0/0接口的时候,
 * 被ACL拦截了下来。
 */
R1#show  access-l
R1#show  access-lists
Extended IP access list 101
    10 permit tcp host 10.0.1.2 eq telnet host 10.0.2.2 established (31 matches)
/*R3 telnet R2没有任何问题*/
R3----telnet-----R2
R3#telnet  10.0.1.2
Trying 10.0.1.2 ... Open
User Access Verification
Username: cisco
Password:
R2>en
Password:
R2#
R2#
R2#


此时不论是R2 ping R3还是R3 ping R2结果都是Ping不通的,因为ACL 101中没有匹配ICMP的条目,最后默认的操作是拒绝所有没有条目匹配的数据,可以使用下面的命令添加一条条目允许R3 ping R2,R2不能Ping R3:

/*添加一条命令允许R2对R3的ICMP的应答包*/
R1(config)#ip access-list  extended 101
R1(config-ext-nacl)#permit icmp host 10.0.1.2 host 10.0.2.2  echo-reply
R1(config-ext-nacl)#
R1#show  access-lists
Extended IP access list 101
    10 permit tcp host 10.0.1.2 eq telnet host 10.0.2.2 established (132 matches)
    20 permit icmp host 10.0.1.2 host 10.0.2.2 echo-reply
..
..
R3#ping   10.0.1.2            
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.0.1.2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 12/53/136 ms
..
..
R2#ping   10.0.2.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.0.2.2, timeout is 2 seconds:
U.U.U
Success rate is 0 percent (0/5)

* 如何配置扩展命名ACL

/*首先删除之前配置好的ACL 100*/
R2(config)#no access-list 100
R2(config)#int s 0/1
R2(config-if)#no ip access-group 100 out
R2(config-if)#exit
/*配置扩展命名ACL,名称为tcp-firewall*/
R2(config)#ip access-list extended tcp-firewall
R2(config-ext-nacl)#permit tcp host 12.1.1.1 eq 23 host 23.1.1.3 established
R2(config-ext-nacl)#permit icmp host 12.1.1.1 host 23.1.1.3 echo-reply
R2(config-ext-nacl)#end
R2#conf t
               
/*在接口上调用*/
R2(config)#int s 0/1
R2(config-if)#ip access-group tcp-firewall out
    R2(config-if)#end
                   
    /*查看*/
    R2#show access-lists
    Extended IP access list tcp-firewall
        10 permit tcp host 12.1.1.1 eq telnet host 23.1.1.3 established
        20 permit icmp host 12.1.1.1 host 23.1.1.3 echo-reply
    R2#


*.配置ACL需要注意的事项

下面是应用访问控制列表需要注意的一些事情:

  • 访问控制列表只对穿越流量起作用。

  • 标准列表应该尽可能应用在靠近目标端。

  • 扩展访问列表应该尽可能应用在靠近源端。

  • ACL条目的放置顺序很重要,如果两条语句放置的前后都不影响结果,一般将较多使用的那条放在前面,这样可以减少路由器的查找时间。

  • IP访问控制列表中最后隐含为拒绝所有,没有匹配任何语句的流量将被拒绝。

  • 同一个访问控制列表可以应用在同一个路由的不同接口上;对于每个协议的每个接口的每个方向,只能提供一个访问控制列表。

  • 没有携带条目号对ACL的编辑,比如添加操作,条目默认是被添加在ACL的最后面。

* 配置扩展ACL允许RIP协议

配置ACL时往往容易忽略路由协议,如果一个网络中运行的是RIPv1协议,在路由器上使用了ACL,ACL条目中没有能够匹配RIP数据流的条目,默认的操作是拒绝,这样就会影响RIP协议的运作,可以在ACL的第一条添加下面的语句,允许RIPv1协议的数据流通过:

1 Router(config)#access-list 100 permit udp any host 255.255.255.255 eq rip

如果一个网络中运行的是RIPv2协议,则可以使用下面这条语句允许RIPv2的流量:

1 Router(config)#access-list 100 permit udp any host 224.0.0.9 eq rip

* 配置扩展ACL允许EIGRP协议

如果一个网络中运行的是EIGRP协议,可以使用下面这条语句允许EIGRP的流量:

1 Router(config)#access-list 100 permit eigrp any any

* 配置扩展ACL允许OSPF协议

如果一个网络中运行的是OSPF协议,可以使用下面这条语句允许OSPF的流量:

1 Router(config)#access-list 100 permit ospf any any






你可能感兴趣的:(路由器,交换机,数据流,数据包)