网络(十三)之ACL的高级应用

ACL的高级应用

本篇讲一下ACL的一些更高级的运用,包括动态ACL、基于时间ACL、单向流量ACL及自反ACL。

动态ACL

传统的标准ACL和扩展 ACL不能创建动态访问条目。一旦在传统ACL中加入了一个语句,除非手工删除,该语句将一直产生作用。而在动态ACL中,网络管理员可以根据用户认证过程来创建特定的、临时的ACL.注意:CiscoIOS 只支持使用扩展 IP 访问控制列表定义动态ACL。在一个ACL内只能有一条动态规则语句。

动态ACL配置命令

ACL配置:
R2(config)#ip access-list extended csdn //定义ACL名称
R2(config-ext-nacl)#permit tcp any host 12.1.1.2 eq 23 //允许任何IPtelnet到R2.关键语句,用于认证用户.
R2(config-ext-nacl)#permit tcp any host 12.1.1.2 eq 3001 //允许任何IPtelnet到R2.关键语句,用户管理设备.
R2(config-ext-nacl)#dynamic ccie timeout 60 permit iphost 12.1.1.1 host 23.1.1.3 //当用户登录成功后激活的的语句.timeout 60,是绝对超时时间,以分钟为单位,也就是说这条语句最多存活一小时。后面还有一个叫作闲时超时时间。
本地用户数据库与VTY配置配置:
R2(config)#username yelsj password kaiche //定义用户名和密码
R2(config)#line vty 0 4 //进入0,1,2,3的VTY链路用于认证
R2(config-line)#login local //使用本地用户数据库来认证
R2(config-line)#autocommand access-enable host timeout10 //关键命令.设置vty0,1,2,3链路作用用户认证链路,自动建立动态ACL。
timeout 10 指的是空闲超时时间。就是当激活后,用户没有流量经过,这个条动态的语句就会失效,需要重新激活。如果不加上host。那么产生的ACL就是一个网段的。加上host就是单个主机的。换一句话说就是当一个网段内的一个主机认证后,其他主机都不需要认证了,如果不加上host的话。设置了动态 ACL 以后,所有的 telnet 请求都会被路由器认为是要开启一个动态 ACL 条目,当用户被认证之后,telnet会话很快就会被关闭。这就带来了一个问题:网络管理员将不再能 够通过 telnet 对路由器进行管理。解决上述问题的方法是在一部分 VTY 线路上使用 rotary 命令开启其他的 telnet端口, 例如:“rotary 1"命令开启 3001 端口、 “rotary 2"命令开启 3002 端口,依此类推。
R2(config)#line vty 5 10
R2(config-line)#login local
R2(config-line)#rotary 1

动态ACL实例配置

网络(十三)之ACL的高级应用_第1张图片
如图所示,配置好OSPF,使得全网可以通信。
要求:

  1. 在R1上配置动态ACL使得只有PC1与PC2先telnetR1之后才可以正常访问R5。
  2. 设置绝对时间5分钟,闲时时间1分钟。
  3. 设置PC3可以直接telnet R1。

配置:
配置前,先检查是否可以实现PC1,PC2ping通R5。
网络(十三)之ACL的高级应用_第2张图片
先配置动态ACL,使得PC1与PC2无法ping通R5。
R1:
R1(config)#access-list 101 permit tcp any host 192.168.1.254 eq 23
R1(config)# access-list 101 dynamic ccie permit ip 192.168.1.0 0.0.0.255 host 172.16.1.1
配置完成,查看PC1pingR5,无法ping通。
网络(十三)之ACL的高级应用_第3张图片
配置本地用户数据库和VTY配置。设置用户名为cce,密码为ccie。
R1(config)#username ccie password ccie
R1(config)#line vty 0 4
R1(config-line)#login local
R1(config-line)#autocommand access-enable host
PC1telnetR1,再测试PC1是否能ping通R5。结果成功ping通。

网络(十三)之ACL的高级应用_第4张图片
这里来查看R1的access-list,发现只是PC1有了条目,若是相PC2也能ping通R5,则PC2也需先telnetR1才能ping通R5。网络(十三)之ACL的高级应用_第5张图片
PC2成功telnet后ping通R5

网络(十三)之ACL的高级应用_第6张图片
再来查看R1access-list,发现多了一条PC2的。
网络(十三)之ACL的高级应用_第7张图片
需求2添加了绝对时间和闲时时间,那么我们就需要对ACL进行一定的修改,具体修改如下。
R1(config)# access-list 101 dynamic ccie time 5 permit ip 192.168.1.0 0.0.0.255 host 172.16.1.1(绝对时间)
R1(config-line)#autocommand access-enable host time 1 (闲时时间)
绝对时间指的是,这一次的telnet之后,只需要这段时间内通信,时间一到自动断网。
闲时时间指的是,telnet之后,若用户一定时间内没通信,则自动端午,理论上闲时时间低于绝对时间。
可以看得,修改之后的,这里后面多了时间,若是没通信,一分钟后自动断网。
网络(十三)之ACL的高级应用_第8张图片
依照上面的理论,理论上我们telnet他就直接去匹配ACL了,那我们想去真正的telnet控制R1呢,这里我们就讲到一个端口的映射问题,我们前面定义 line vty 0 4,这里有五个端口,都是telnet匹配ACL的。那么假设有这五个端口都被占用,我们再次telnet的话就是控制R1了。这里就不做测试,我们这里讲端口映射来解决问题。
配置:
R2(config)#line vty 5 10
R2(config-line)#login local
R2(config-line)#rotary 1

当然这里我们需要添加一条ACL,不然无法通过3001口。
R1(config)#access-list 101 permit tcp any any eq 3001

用PC3测试,很明显,但我们不加端口号,它执行的就是去匹配ACL的,若是加了端口号,访问的就是控制R1了。区别就在于我们前面定义的端口。
网络(十三)之ACL的高级应用_第9张图片

基于时间的ACL

基于时间的 ACL 是对传统 ACL 的一种功能增强,它在传统扩展 ACL 中加入了时间范围以增强ACL 的控制能力。基于时间的 ACL 可以根据一天中的不同时间,或者根据一星期中的不同日期,或二者相结合的方式来控制数据包的转发。CiscoIOS 只支持使用扩展 IP 访问控制列表定义基于时间的 ACL。

基于时间的ACL配置命令

时间配置:
在日常生活中,运用这种基于时间的ACL时要注意设备时间。并不是我们生活时间。
R2#show clock //在R2上查看设备时间。
时间可以通过我们的手动修改,也可以使用NTP服务器来同步我们的设备时间。这里只介绍手动修改。
R2(config)#clock timezone UTC 8 //配置时区东八区
R2#clock set 15:48:00 AUG 4 2016 //设置时间。 注意设置时间时用使用24小时制,格式分别为: hh:mm:ss 时间 AUG 月份 4 日 2016
年份,其中月份使用英文缩写。这里不必担心打错。因为如果月份打错了。后面是没有命令可跟的,如下:
一月:January 简写Jan.
二月:February 简写Feb.
三月:March 简写Mar.
四月:April 简写Apr.
五月:May 简写May.
六月:June 简写Jun.
七月:July 简写Jul.
八月:August 简写Aug.
九月:September 简写Sep. / Sept.
十月:October 简写Oct.
十一月:November 简写Nov.
十二月:December 简写Dec.
ACL配置:
R2(config)#time-range csdn //定义Time-range策略名称,这个Time-range是一个时间策略,可以在这个Time-range里面定义一些准确时间,或者时间段。一次性的,或者周期性的。
R2(config-time-range)#absolute start 16:00 4 AUG 2016 end 17:00 4 AUG 2016 //定义一个绝对时间(一次性):开始时间为2016年8月4日16点,结束时间为2016年8月4日17点。这个时间可以被一个ACL里的某一个条目调用,那就意味着这个条目会在这个规定时间内生效其他时间均为失效。
R2(config-time-range)#absolute start 16:00 4 AUG 2016//定义一个绝对时间(一次性):开始时间为2016年8月4日16点。这个时间可以被
一个ACL里的某一个条目调用,那就意味着这个条目会在这个规定时间点生效。往后的时间也会一直生效。
R2(config-time-range)#absolute end 17:00 4 AUG 2016//定义一个绝对时间(一次性):结束时间为2016年8月4日17点。这个时间可以被
一个ACL里的某一个条目调用,那就意味着这个条目会立刻生效,在这个时间点过后会永久失效。
注意:在一个time-range策略里。absolute绝对时间只有一条。也就是说。当你打多条absolute命令时,只有最新打的那条会生效(覆盖前面打的命令)。
R2(config-time-range)#periodic monday wednesday friday 9:00 to 18:00 //定义一个周期性的时间:每周一,周三,周五,上午9点到下午6点。这个时间可以被一个ACL里的某一个条目调用,那就意味着这个条目在这时间内这个条目会生效,其余时间都为失效状态。而这个生效时间时周期性的。
R2(config-time-range)#periodic daily //每天(星期一到星期日)
R2(config-time-range)#periodic weekdays //工作日(星期一到星期五)
R2(config-time-range)#periodic weekend //周末(周六,周日)
注意:一个time-range下只能有一个absolute语句,但可以有多条periodic语句,如果在一个time-range下即有absolute语句,又有periodic语句,则先匹配absolute语句。
R2(config)#ip access-list extended ccie //建立名字为ccie的扩展访问控制列表
R2(config-ext-nacl)#permit ip host 12.1.1.1 host 23.1.1.3 time-range yels-j //允许注意12.1.1.1到23.1.1.3 并且调用time-range为yels-j的策略使得这个时间段内。这个规则生效。
R2(config)#interface f0/0 //进入f0/0接口
R2(config-if)#ip access-group ccie in //在这个接口的in方向调用名字为ccie的ACL

基于时间的ACL的配置实例

网络(十三)之ACL的高级应用_第10张图片
按要求1来说是设置time-range 周一周五的9:00-18:00,和周末的全天。允许访问网络,但是我这里就反则来理解,除了周一到周五的18:01-23.59,0:00-8:59两个时间段deny,其余可以上网。
所以先配置time-range
R3(config)#time-range sbsj
R3(config-time-range)# periodic weekdays 18:01 to 23:59
R3(config-time-range)#periodic weekdays 0:00 to 8:59
再配置ACL,接口调用ACL。
R3(config)#ip access-list extended swkz
R3(config-ext-nacl)#10 deny ip host 172.16.1.1 192.168.1.0 0.0.0.255 time-range sbsj
R3(config-ext-nacl)#20 permit ip any any
R3(config)#interface f0/0
R3(config-if)#ip access-group swkz in

需求2是指的2020.3.6下午六点开始,使得取消禁止R5对R7的访问。这里一样,我们先设置time-range,再配置ACL。
R3(config)#time-range qxkz
R3(config-time-range)# absolute start 18:00 06 March 2020
配置ACL,需注意这里配置与需求1配置在一起要注意ACL的先后顺序,这里是要优先。
R3(config-ext-nacl)# 5 permit ip host 172.16.1.1 host 192.168.1.3 time-range qxkz

测试查看
先查看time-range
网络(十三)之ACL的高级应用_第11张图片
将时间设置在2020.03.05的15:30:30.(上班时间)
查看是否R5能够访问192.168.1.0网段。成功通信。

在这里插入图片描述
网络(十三)之ACL的高级应用_第12张图片
将时间设置在2020.03.05的19:30:30.(下班时间)
查看是否R5能够访问192.168.1.0网段。通信失败。
在这里插入图片描述
网络(十三)之ACL的高级应用_第13张图片
最后将时间设置在2020.03.06的19:30:30.(下班时间)
查看是否R5能够访问192.168.1.3(R7)。通信成功。

在这里插入图片描述
网络(十三)之ACL的高级应用_第14张图片

ACL established

在扩展 ACL语句的最后,我们可以加上 established参数,它可以用来作 TCP的单向访问控制。扩展Acl中的established可以根据数据 段中是否设置了ACK位来对分组进行过滤(没有ACK位的不符合established条件)

ACL established 配置命令

ACL配置:
R2(config)#ip access-list extended ccie //定义扩展ACL名字
R2(config-ext-nacl)#permit tcp host 23.1.1.3 host12.1.1.1 established //允许R3对R1的TCP回包
R2(config)#interface f0/1 //进入接口调用,注意是F0/1
R2(config-if)#ip access-group yels-j in //调用ACL

ACL established 配置实例

网络(十三)之ACL的高级应用_第15张图片
要求:在R2上配置,实现PC1能够单向的访问R5的ICMP服务,R5能够单向的访问PC1的远程登录服务。PC1能够单向的访问R5的http服务。

R2:
配置ACL:
R2(config)#ip access-list extended cjc
R2(config-ext-nacl)# permit icmp host 192.168.1.1 host 172.16.1.1 echo //echo也能够进行单向访问
R2(config-ext-nacl)# permit ospf any any
R2(config-ext-nacl)# permit tcp host 192.168.1.1 eq telnet host 172.16.1.1 established
R2(config-ext-nacl)# permit tcp host 192.168.1.1 host 172.16.1.1 eq 80
接口调用ACL
R2(config)#interface f0/1
R2(config-if)#ip access-group cjc in

配置完成,查看效果。
PC1pingR5,R5pingPC1。结果PC1可以访问R5,R5无法访问PC1。
网络(十三)之ACL的高级应用_第16张图片
PC1telnetR5,R5telnetPC1。结果PC1无法telnetR5,R5则可以telnetPC1。
查看之前先配置一下远程登录设置。
PC1(config)#username ccie password ccie
PC1(config)#line vty 0 4
PC1(config-line)#login local
R5(config)#username ccie password ccie
R5(config)#line vty 0 4
R5(config-line)#login local
网络(十三)之ACL的高级应用_第17张图片
PC1telnetR5的80服务,R5telnetPC1的80服务。结果是PC1可以访问R5的80服务,R5则无法访问PC1的80服务。查看之前需开启路由器HTTP服务。ip http server (全局模式下)
网络(十三)之ACL的高级应用_第18张图片

自反ACL

自反 ACL 提供了一种真正意义上的单向访问控制,它的工作原理是:当内部网络发起一个会话(基于 TCP、UDP 都可以)并且将数据发送给外部网络时,反射 ACL 就被触发并且生成一个新的临时条目。如果从外部网络过来的数据流符合临时条目,则允许其进入内部网络,否则禁止其进入内部网络
自反ACL的特点:
自反ACL永远是permit的;
自反ACL允许高层Session信息的IP包过滤;利用自反ACL可以只允许出去的流量,但是阻止从外部网络产生的向内部网络的流量,从而可以更好地保护内部网络;
自反ACL是在有流量产生时(如出方向的流量)临时自动产生的,并且当Session结束时条目就自动删除;
自反ACL不是直接被应用到某个接口下的,而是嵌套在一个扩展命名访问列表下的。
自反 ACL 允许最近出站数据包的目的地发出的应答流量回到该出站数据包的源地址。这样您可以更加严格地控制哪些流量能进入您的网络,并提升了扩展访问列表的能力。
自反 ACL 不能直接应用到接口,而是“嵌套”在接口所使用的扩展命名 IP ACL 中
自反 ACL 仅可在扩展命名 IP ACL 中定义。自反 ACL 不能在编号 ACL 或标准命名 ACL 中定义,也不能在其它协议 ACL 中定义。自反 ACL 可以与其它标准和静态扩展 ACL 一同使用。

自反ACL配置命令

ACL配置:
R2(config)#ip access-list extended R1-R3
R2(config-ext-nacl)#permit ip any any reflect ccie //允许R1到R3的所有流量,并且定义反射的名字叫做ccie
R2(config)#ip access-list extended R3-R1
R2(config-ext-nacl)#evaluate ccie //评估名字为ccie 的反射。
R2(config)#interface f0/0
R2(config-if)#ip access-group R1-R3 in
R2(config-if)#ip access-group R3-R1out

自反 配置实例

网络(十三)之ACL的高级应用_第19张图片
配置:
第一步,配置IP地址,再配置路由协议eigrp。使得全网通信。
R1(config)#int f0/0
R1(config-if)#ip address 202.100.1.1 255.255.255.0
R1(config)#int loopback 0
R1(config-if)#ip address 1.1.1.1 255.255.255.0
R1(config)#router eigrp 10
R1(config-router)#network 1.1.1.0 0.0.0.255
R1(config-router)#network202.100.1.0 0.0.0.255
R2(config)#int f0/0
R2(config-if)#ip address 202.100.1.2 255.255.255.0
R2(config)#int f0/1
R2(config-if)#ip address 202.100.2.2 255.255.255.0
R2(config)#router eigrp 10
R2(config-router)#network 202.100.2.0 0.0.0.255
R2(config-router)#network202.100.1.0 0.0.0.255
R3(config)#int f0/0
R3(config-if)#ip address 202.100.2.1 255.255.255.0
R3(config)#int loopback 0
R3(config-if)#ip address 3.3.3.3 255.255.255.0
R3(config)#router eigrp 10
R3(config-router)#network 3.3.3.0 0.0.0.255
R3(config-router)#network202.100.2.0 0.0.0.255

第二部,配置DCHP获取,使得R1能通过DHCP获取地址。

R3(config)#ip dhcp pool cjc
R3(dhcp-config)#network 202.100.1.0 255.255.255.0
R3(dhcp-config)#default-router 202.100.1.2
R2(config)#int f0/0
R2(config-if)#ip helper-address 3.3.3.3
网络(十三)之ACL的高级应用_第20张图片
第三部,配置DHCP使得R3也能从R1获取DHCP地址
网络(十三)之ACL的高级应用_第21张图片
再通过配置单反ACL,来使得R3无法获取IP地址,
配置命令如下:
R2(config)#ip access-list extended R1-R3
R2(config-ext-nacl)# 10 permit udp any eq bootpc any eq bootps reflect ccie
R2(config)#ip access-list extended R3-R1
R2(config-ext-nacl)#evaluate ccie 。
R2(config)#interface f0/0
R2(config-if)#ip access-group R1-R3 in
R2(config-if)#ip access-group R3-R1 out
网络(十三)之ACL的高级应用_第22张图片

结尾

到此,ACL的讲解就结束了,ACL的运用极为广泛,在于我们对数据包流量的需求问题。面对不同的问题运用不同的ACL更加方便以使用,最后感谢观看。

你可能感兴趣的:(网络(十三)之ACL的高级应用)