CCNA23-反射acl,动态acl,基于时间的acl

1* 如何配置反射ACL

注意:Cisco IOS只支持使用扩展的命名访问控制列表来定义反射列表。

前面介绍的ACL参数中携带established能够起到单向访问控制的目的,但是这种使用方法只能针对TCP的流量,而反射ACL能够提供真正意义上的单向访问控制,下图演示了反射ACL的工作方式:

124520347.jpg

上图的上半部分,当内部发起一个会话(基于IP、ICMP、TCP、UDP都可以),并将数据发给外部网络时,反射ACL被触发并且生成一个新的临时条目,如果从外部返回的数据符合临时条目,则允许进入内部网络。

如果是一个始发于外部的会话,在边界路由上不会有临时条目的记录,边界路由上的反射ACL将阻止这样的流量进入内部网络。

临时条目的生成依据的原则:协议(protocol)保持不变,Source-IP和Destination-IP严格对调,Source-Port和Destination-Port严格对调;对于ICMP协议,会根据协议类型号进行匹配。

下面就来实际的配置一下反射ACL(使用上面的图五),让R3可以远程telnet R1,R1不能telnet R3:

步骤1,路由器各接口IP如图五所示,在R1和R3上面配置静态路由,让全网互通,这些配置就不贴出来了。

步骤2,在R1和R3上分别配置远程登录VTY:

R1(config)#enable secret ccna
R1(config)#line vty 0 4
R1(config-line)#password ccna
R1(config-line)#login
R1(config-line)#end
R1#
                                                                                         
R3(config)#enable secret ccna
R3(config)#line vty 0 4
R3(config-line)#pass ccna
R3(config-line)#login
R3(config-line)#end
R3#

步骤3,在R2上创建反射ACL:

/*
 * 创建扩展命名ACL,这个ACL将在R2的s0/0接口的出方向上调用,
 * "permit ip any any reflect out-ip",这个条目的意思是,
 * 允许所有IP流量,并对外出的IP流量进行反射,
 * 反射的名称叫out-ip,其实这个out-ip就是一个临时ACL。
 */
R2(config)#ip access-list extended out-acl
R2(config-ext-nacl)#permit ip any any reflect out-ip
R2(config-ext-nacl)#exit
                                                                            
/*
 * 创建另外一个扩展命名ACL,这个ACL的作用是对进入的流量做评估,
 * "evaluate out-ip"当有流量进入的时候,使用这个临时的ACL评估。
 */
R2(config)#ip access-list extended in-acl
R2(config-ext-nacl)#evaluate out-ip
R2(config-ext-nacl)#exit
                                                                            
R2(config)#int s 0/0
/*
 * 在R2的s0/0接口的外出方向调用out-acl,
 * 这个ACL会根据每个从R3途径R2外出到R1的流量做反射,
* 生成一个临时的ACL out-ip。
 */
R2(config-if)#ip access-group out-acl out
/*在R2的s0/0接口进入方向做评估*/
R2(config-if)#ip access-group in-acl in
R2(config-if)#end
R2#
    /*注意,这里说的进入方向、外出方向是相对的。从R1访问R3,那么R2的s0/0就是进入方向;从R3访问R1,R2的s0/0接口对于R3来说就是外出方向。*/


配置完成后,分别在R1和R3上telnet对方进行测试:

/*发现R1不能telnet R3了*/
R1#telnet 23.1.1.3
Trying 23.1.1.3 ...
% Destination unreachable; gateway or host down
                                                                        
/*首先查看一下R2的ACL*/
R2#show access-lists
Extended IP access list in-acl
    10 evaluate out-ip
Extended IP access list out-acl
        10 permit ip any any reflect out-ip
Reflexive IP access list out-ip
R2#
                                                                    
/*在R3上面telnet R1*/
R3#telnet 12.1.1.1
Trying 12.1.1.1 ... Open
User Access Verification
Password:
R1>en
Password:
R1#  /*成功*/
                                                                    
/*再次查看R2的ACL*/
R2#show access-lists
Extended IP access list in-acl
    10 evaluate out-ip
Extended IP access list out-acl
    10 permit ip any any reflect out-ip (50 matches)
                                                                    
/*这个条目就是反射ACL自动生成的*/
Reflexive IP access list out-ip
     permit tcp host 12.1.1.1 eq telnet host 23.1.1.3 eq 52116 (86 matches) (time left 269)
R3------ping----- R1
R3#ping  12.1.1.1
 seconds:
!!!!!
。
/
R1----ping---R3
R1#ping 23.1.1.3 
U.U.U
//在R2上仍然生成了阻止R1--ping---R3的acl条目
R2#show  access-lists
Extended IP access list in-acl
    10 evaluate out-ip
Extended IP access list out-acl
    10 permit ip any any reflect out-ip (53 matches)
Reflexive IP access list out-ip
     permit icmp host 12.1.1.1 host 23.1.1.3  (10 matches) (time left 283)

临时的反射条目是有生存时间的,对于TCP会话,如果路由器检测到两组FIN标记,则会在5秒内删除这个临时条目(比如R3登录R1后使用exit退出登录,R2就会在5秒钟以内删除这个临时条目);如果路由器检测到RST位的分组,则会立即删除临时条目;对于UDP和其他协议(比如ICMP等),默认的删除时间是倒计时300秒。

可以使用下面的命令来更改反射ACL中临时ACL条目的默认生存时间:

1 /*将默认生存时间改成30秒*/
2 R2(config)#ip reflexive-list timeout 30

对于这个生存时间的测试,大家可以在R3上面Ping一下R1的12.1.1.1,然后在R2上查看ACL条目信息,就可以看到临时ICMP条目的末尾有一个(time left 26),time left后面的数字是从刚才更改的30秒开始倒计时的。



2* 如何配置动态ACL

131410466.jpg

动态ACL还有下面几点需要了解的地方:

1,临时条目的生存周期

动态ACL的生存周期有两个参数:空闲时间和绝对时间,当验证通过后,动态ACL临时条目生成后,空闲时间和绝对时间倒计时同时启动,空闲计时器在每当有一个报文匹配动态访问列表时进行复位(即重新开始倒计时),当空闲计时器到期时,该临时条目被删除。绝对计时器永不复位,当绝对定时器到期时,该动态条目被删除。

2,Telnet的设置

配置了动态ACL后,R2上所有的Telnet请求都会被路由器认为是要开启一个动态ACL条目,当用户验证后,telnet就会被关闭,这样会带来一个问题,网络管理员将不能通过Telnet对路由进行管理,解决的方法是使用rotary命令开启其他Telnet端口,如”rotary 1″命令开启的端口是3001,”rotary 2″开启3002以此类推。

这里我们希望实现,让R1(Internet上的用户)访问R3(内网)前,先需要在R2上进行验证,最后达到的效果是,验证前R1不能Telnet R3,验证通过后R1能够telnet R3。

第一步:配置R1、R2、R3各接口IP,配置静态路由让全网能够互相通信,在R1和R3上面配置VTY,这一步很简单就不贴出配置信息了。

第二步:在R2上配置动态ACL:

/*允许外网Telnet本路由进行验证*/
R2(config)#access-list 100 permit tcp any host 12.1.1.2 eq 23
                                            
/*
rotary
adj. 旋转的,转动的;轮流的
 * 允许使用3001端口对本路由进行管理,
 * 稍后会用"rotary 1"命令打开这一端口,
 * 在实际应用中很少使用Telnet去对路由进行远程管理,
 * 如果使用其他网络协议,在这里需要打开对应端口。
 */
R2(config)#access-list 100 permit tcp any host 12.1.1.2 eq 3001
                                                                          ^
    /*
* 创建动态ACL,名称为"ccna_dyanmic_acl",
 * timeout 60 是绝对时间,60分钟。
 *
 * "permit tcp any host 23.1.1.3 eq 23"
 * 后半部分中的any会被通过验证的主机的IP地址所代替。
 */
R2(config)#access-list 100 dynamic ccna_dyanmic_acl timeout 60 permit tcp any host 23.1.1.3 eq 23
/*在本地创建验证用的用户名ccna和密码ccna*/
R2(config)#user ccna pass ccna
                                            
    /*用来验证的VTY线路0、1、2、3*/
    R2(config)#line vty 0 3
    R2(config-line)#login local /*使用本地用户名和密码验证*/    /*
     * 这条命令中的host会被验证通过的主机的IP代替,
     * 这个IP会被传递到上面的动态临时ACL中,去替换any关键字,
     * timeout 3,是空闲时间,这里设置成3分钟。
     */
    R2(config-line)#autocommand access-enable host timeout 3
                                                
    /*
     * 另外创建一条VTY线路4,也使用本地用户名和密码验证,
* 这条线路用来远程管理路由器,使用的端口是3001。
     */
    R2(config-line)#line vty 4
    R2(config-line)#login local
    R2(config-line)#rotary 1
                                                
    /*在路由的端口上调用这个ACL*/
    R2(config-line)#int s 0/0
    R2(config-if)#ip access-group 100 in
    R2(config-if)#end
    R2#

配置完成后进行下面的测试来验证动态ACL配置的正确性:

/*在没有登录R2验证前,telnet不了R3*/
R1#telnet 23.1.1.3
Trying 23.1.1.3 ...
% Destination unreachable; gateway or host down
                                 
/*登录R2进行验证*/
R1#telnet 12.1.1.2
Trying 12.1.1.2 ... Open
User Access Verification
Username: ccna  /*用户名和密码都是ccna*/
Password:
[Connection to 12.1.1.2 closed by foreign host]
R1#   /*验证成功,然后R2主动断开连接*/
                                     
/*在R2上查看ACL条目*/
R2#show access-lists
Extended IP access list 100
    10 permit tcp any host 12.1.1.2 eq telnet (66 matches)
    20 permit tcp any host 12.1.1.2 eq 3001
    30 Dynamic ccna_dyanmic_acl permit tcp any host 23.1.1.3 eq telnet
/*在动态临时条目下面多出一条,any关键字被验证通过的R1的s0/0接口IP替代。*/
   permit tcp host 12.1.1.1 host 23.1.1.3 eq telnet
                                 
/*这时在R1再次telnet R3*/
    R1#telnet 23.1.1.3
    Trying 23.1.1.3 ... Open
      User Access Verification
Password:  /*连接上了,没有任何问题*/
R3>en
Password:
R3#exit
[Connection to 23.1.1.3 closed by foreign host]
R1#
/*再次查看R2的ACL*/
                                     
    R2#show access-lists
    Extended IP access list 100
        10 permit tcp any host 12.1.1.2 eq telnet (66 matches)
        20 permit tcp any host 12.1.1.2 eq 3001
        30 Dynamic ccna_dyanmic_acl permit tcp any host 23.1.1.3 eq telnet
    /*
     * 如果没有任何符合这个动态临时条目的流量,
     * (time left 107)这个条目将在107秒后被删除,
     * 这个显示是空闲时间倒计时。
     */
           permit tcp host 12.1.1.1 host 23.1.1.3 eq telnet (39 matches) (time left 107)
                                     
    /*最后测试3001端口对R2的远程管理*/
    R1#telnet 12.1.1.2 3001
    Trying 12.1.1.2, 3001 ... Open
    User Access Verification
    Username: ccna
    Password:
    R2>  /*登录R2成功,没有和验证的时候一样断开连接。*/


3* 如何配置基于时间的ACL

使用基于时间的ACL配置下面的拓扑,让R1只有在每周周一到周五上午7点到8点,下午1点到2点可以Telnet R2:

151643127.jpg

R1配置:

R1(config)#int s 0/0
R1(config-if)#ip add 12.1.1.1 255.255.255.0
R1(config-if)#no shut

R2配置:


R2(config)#int s 0/1
R2(config-if)#ip add 12.1.1.2 255.255.255.0
R2(config-if)#no shut
R2(config-if)#exit
          
/*配置时区,我们是在东八区。*/
R2(config)#clock timezone GMT +8
R2(config)#end
/*设置成当前时间*/
    R2#clock set 22:33:00 25 november 2012
      
R2#conf t
    /*创建时间范围,working是自定义的名称*/
    R2(config)#time-range working
    R2(config-time-range)#? /*查看帮助*/
    Time range configuration commands:
      absolute  absolute time and date
      default   Set a command to its defaults
      exit      Exit from time-range configuration mode
  no        Negate a command or set its defaults
  periodic  periodic time and date
          
    /*使用周期性的时间范围,关键字weekdays代表周一到周五*/
    R2(config-time-range)#periodic weekdays 7:00 to 8:00
    R2(config-time-range)#periodic weekdays 13:00 to 14:00
    R2(config-time-range)#exit
          
    /*创建基于时间的ACL,time-range后面跟上面创建的时间范围名称*/
    R2(config)#access-list 100 permit tcp host 12.1.1.1 host 12.1.1.2 eq 23 time-range working
          
    /*在接口上调用它*/
    R2(config)#int s 0/1
    R2(config-if)#ip access-group 100 in
    R2(config-if)#end
          
    /*查看,因为现在时间不符合,这个条目没有生效(inactive)*/
    R2#show access-lists
    Extended IP access list 100
        10 permit tcp host 12.1.1.1 host 12.1.1.2 eq telnet time-range working (inactive)
    R2#







你可能感兴趣的:(acl,记录,动态,Cisco,路由器)