CCNP路由实验之十四 路由器的访问控制ACL
ACL(Access Control List,访问控制列表) 是路由器接口的指令列表,用来控制端口进出的数据包。ACL适用于所有的路由协议,如IP、IPX、AppleTalk等。这张表中包含了匹配关系、条件和查询语句,表只是一个框架结构,其目的是为了对某种访问进行控制。访问控制列表使用包过滤技术,在路由器上读取第三层及第四层包头中的信息如源地址,目的地址,源端口,目的端口等,根据预先定义好的规则对包进行过滤,从而达到访问控制的目的,该技术初期仅在路由器上支持,现在已经支持三层交换机和二层交换机。ACL的定义是基于每一种协议的,如果路由器接口配置成为支持三种协议(IP、AppleTalk以及IPX)的情况,那么用户必须定义三种ACL来分别控制这三种协议的数据包。
ACL可以限制网络流量、提高网络性能。例如,ACL可以根据数据包的协议,指定数据包的优先级。
ACL提供对通信流量的控制手段。例如,ACL可以限定或简化路由更新信息的长度,从而限制通过路由器某一网段的通信流量。
ACL是提供网络安全访问的基本手段。ACL允许主机A访问网络,而拒绝主机B访问。
ACL可以在路由器端口处决定哪种类型的通信流量被转发或被阻塞。例如,用户可以允许E-mail通信流量被路由,拒绝所有的Telnet通信流量。
注意,并不是越多ACL就越好,因为ACL会消耗路由器的资源,影响路由器的性能
ACL执行过程:
ACL执行顺序是从上往下执行的,一个包只要遇到一条匹配的ACL语句后,就会停止后续语句的执行.一个端口执行哪条ACL,这需要按照列表中的条件语句执行顺序来判断。如果一个数据包的报头跟表中某个条件判断语句相匹配,那么后面的语句就将被忽略,不再进行检查。数据包只有在跟第一个判断条件不匹配时,它才被交给ACL中的下一个条件判断语句进行比较。如果匹配(假设为允许发送),则不管是第一条还是最后一条语句,数据都会立即发送到目的接口。如果所有的ACL判断语句都检测完毕,仍没有匹配的语句出口,则该数据包将视为被拒绝而被丢弃。这里要注意,ACL不能对本路由器产生的数据包进行控制。如果设备使用了TCAM,比如aute U3052交换机,那么所有的ACL是并行执行的。举例来说,如果一个端口设定了多条ACL规则,并不是逐条匹配,而是一次执行所有ACL语句。
ACL分类
标准ACL:使用 1-99 以及1300-1999之间的数字作为表号。标准ACL只检查源地址,可以阻止来自某一网络的所有通信流量,或者允许来自某一特定网络的所有通信流量,或者拒绝某一协议簇(比如IP)的所有通信流量。标准ACL要尽量靠近目的端
扩展ACL:使用 100 ~ 199以及2000~2699之间的数字作为表号。扩展ACL通过启用基于IP源地址和目的地址、传输层协议(TCP、UDP)和应用端口号的过滤,您也可以使用逻辑运算,例如等于 (eq)、不等于 (neq)、大于 (gt) 和小于 (lt),这样可以提供比标准ACL更细致、更高程度的数据流选择控制。扩展ACL要尽量靠近源端.
命名ACL是以列表名称代替列表编号来定义ACL,同样包括标准和扩展两种列表。命名ACL还可以被用来从某一特定的ACL中删除个别的控制条目,这样可以使网络管理员方便修改ACL。在使用命名访问控制列表时,要求路由器的IOS在11.2以上的版本,并且不能以同一名字命名多个ACL,不同类型的ACL也不能使用相同的名字。命名ACL中的允许为每一条目添加sequnce number,这样更加简化我们修改和维护(推荐使用)。注意其实
标准Access-list1 等于标准命名式ip access-liststandard 1 ;扩展Access-list 100等于扩展命名式ip access-list extended 100
基于时间的ACL:就是在原来的标准访问列表和扩展访问列表中,加入有效的时间范围来更合理有效地控制网络。首先定义一个时间范围,然后在原来的各种访问列表的基础上应用它。要配置这样的时间范围,就要通过time-range来实现的,在time-range中定义好时间,再将此time-range跟在某ACL的条目之后,那么此条目就在该时间范围内起作用,其它时间是不起作用的。在定义time-range时,常用的时间简单分为两种,第一种叫做绝对时间(absolute),即这个时间只生效一次,比如2014年9月1月12:00;另一种时间叫做周期时间(periodic),即这个时间是会多次重复的,比如每周一,或者每周一到周五
自反(reflexive)访问列表基于上层会话(session)信息过滤数据包,它允许起源于内网(受保护网络)的数据流通过路由器,外网(非信任网络)响应起源于内网的会话的数据流也可以通过路由器,但禁止起源于外网的数据通过路由器进入内网。自反ACL只使用扩展命名IP访问列表定义,不能使用代码或标准命名访问列表定义。 自反ACL和其他ACL相似:包含一系列条件语句,并安装条件语句的顺序逐一检查,一旦某个条件匹配,就不再检查后面的条件。 不同的是,自反ACL只包含临时的条件语句,当一个IP会话发起时,这些临时条件自动建立;当会话结束,这些临时条件将被路由器删除。自反ACL不能直接应用在接口上,需要由另一个扩展命名IP访问列表调用, 另外,自反ACL不包含系统隐含的deny all 语句。自反ACL只能在命名的扩展ACL里定义
动态ACL:用户必须通过提供用户名和口令,开启一个到路由器的telnet会话。(也可以配置路由器,让其只需要口令,而不需要用户名,但并不推荐这样做)在用户被认证之后,路由器会自动关闭telnet会话,并自动将一个动态访问表项置于某个访问表中,以允许源地址为认证用户工作站地址的报文通过。这样,我们可以在安全边界上配置访问表,只允许那些能够通过用户认证的工作站才能发送向内的报文。这种配置很像网页认证后才能上网的行为。注意当用户验证后,telnet就会被关闭,这样会带来一个问题,网络管理员将不能通过Telnet对路由进行管理,解决的方法是使用rotary命令开启其他Telnet端口,如”rotary 1″命令开启的端口是3001,”rotary 2″开启3002以此类推。
ACL的原则
每种协议一个 ACL:要控制接口上的流量,必须为接口上启用的每种协议定义相应的 ACL。
每个方向一个 ACL :一个 ACL 只能控制接口上一个方向的流量。要控制入站流量和出站流量,必须分别定义两个 ACL。
每个接口一个 ACL :一个 ACL 只能控制一个接口上的流量。
ACL定义规范
ACL的列表号指出了是哪种的ACL。各种协议有自己的ACL,而每个协议的ACL又分为标准ACL和扩展ACL。这些ACL是通过ACL列表号区别的。如果在使用一种访问ACL时用错了列表号,那么就会出错误。
一个ACL的配置是每协议、每接口、每方向的。路由器的一个接口上每一种协议可以配置进方向和出方向两个ACL。也就是说,如果路由器上启用了IP和IPX两种协议栈,那么路由器的一个接口上可以配置IP、IPX两种协议,每种协议进出两个方向,共四个ACL。
ACL中的通配符,也称作反掩码,它是将原子网的掩码0变成1,1变成0,0为绝对匹配,而1为表示任意,通过这样用来进行地址块匹配的。反掩码可以通过使用255.255.255.255减去正常的子网掩码得到,当相减为0.0.0.0时表示一台主机;例如对于单一网段10.10.10.0/24的反掩码等于255.255.255.255-255.255.255.0=0.0.0.25;对于连续的网段可以先进行汇总再相减,例如192.168.32.0/24、192.168.33.0/24、192.168.34.0/24,此时汇总的网段为192.168.32.0/22,即255.255.255.255-255.255.252.0=0.0.3.255;另外192.168.32.0/24的ACL反转掩码写成0.0.0.254表示过滤网络中的所有偶数地址,如果192.168.34.1/24的ACL返掩码写成0.0.0.254即表示网络中的奇数地址。如果是网段内的特定连续的几台主机如192.168.1.17/24、192.168.1.18/24、192.168.1.19/24即反掩码为192.168.1.17 0.0.0.3.
ACL的语句顺序决定了对数据包的控制顺序。在ACL中各描述语句的放置顺序是很重要的。当路由器决定某一数据包是被转发还是被阻塞时,会按照各项描述语句在ACL中的顺序,根据各描述语句的判断条件,对数据报进行检查,一旦找到了某一匹配条件就结束比较过程,不再检查以后的其他条件判断语句。
最有限制性的语句应该放在ACL语句的首行。把最有限制性的语句放在ACL语句的首行或者语句中靠近前面的位置上,把“全部允许”或者“全部拒绝”这样的语句放在末行或接近末行,可以防止出现诸如本该拒绝(放过)的数据包被放过(拒绝)的情况。
对于标准或扩展ACL中新的表项只能被添加到ACL的末尾,这意味着不可能改变已有访问控制列表的功能。如果必须改变,只有先删除已存在的ACL,然后创建一个新ACL,将新ACL应用到相应的接口上。
在将ACL应用到接口之前,一定要先建立ACL。首先在全局模式下建立ACL,然后把它应用在接口的出方向或进方向上。在接口上应用一个不存在的ACL是不可能的。
标准和扩展的ACL语句不能被逐条的删除,只能一次性删除整个ACL。命名式ACL可以
在ACL的最后,有一条隐含的“全部拒绝”的命令,所以在 ACL里一定至少有一条“允许”的语句。
ACL只能过滤穿过路由器的数据流量,不能过滤由本路由器上发出的数据包。
在路由器选择进行以前,应用在接口进入方向的ACL起作用。
在路由器选择决定以后,应用在接口离开方向的ACL起作用。
实验一、标准ACL
PC1配置:
PC1#conf t
PC1(config)#no ip routing
PC1(config)#int fa0/0
PC1(config-if)#ip add192.168.1.1 255.255.255.0
PC1(config-if)#no sh
PC1(config-if)#exit
PC1(config)#ip default-gateway192.168.1.11
PC2配置:
PC2#conf t
PC2(config)#no ip routing
PC2(config)#ip default-gateway192.168.2.22
PC2(config)#int fa0/0
PC2(config-if)#ip add192.168.2.2 255.255.255.0
PC2(config-if)#no sh
PC2(config-if)#exit
R1配置:
R1#conf t
R1(config)#int lo 1
R1(config-if)#ip add 1.1.1.1255.255.255.0
R1(config-if)#exit
R1(config)#int fa0/0
R1(config-if)#ip add192.168.12.1 255.255.255.0
R1(config-if)#no sh
R1(config-if)#exit
R1(config)#int fa0/1
R1(config-if)#ip add192.168.1.11 255.255.255.0
R1(config-if)#no sh
R1(config-if)#exit
R1(config)#access-list 1 deny2.2.2.0 0.0.0.255 //创建ACL 1拒绝所有2.2.2.0网段的流量
R1(config)#access-list 1 permitany//设置ACL 1放行其他流量
R1(config)#int fa0/0
R1(config-if)#ip access-group 1in //将ACL 1放在接口的进方向
R1(config-if)#exit
R1(config)#router rip
R1(config-router)#version 2
R1(config-router)#noauto-summary
R1(config-router)#network1.1.1.0
R1(config-router)#net192.168.1.0
R1(config-router)#net192.168.12.0
R1(config-router)#exit
R2配置:
R2#conf t
R2(config)#int lo 1
R2(config-if)#ip add 2.2.2.2255.255.255.0
R2(config-if)#exit
R2(config)#int fa0/0
R2(config-if)#ip add192.168.12.2 255.255.255.0
R2(config-if)#no sh
R2(config-if)#exit
R2(config)#int fa0/1
R2(config-if)#ip add192.168.2.22 255.255.255.0
R2(config-if)#no sh
R2(config-if)#exit
R2(config)#router rip
R2(config-router)#version 2
R2(config-router)#noauto-summary
R2(config-router)#net 2.2.2.0
R2(config-router)#net 192.168.2.0
R2(config-router)#net192.168.12.0
R2(config-router)#exit
R2(config)#int fa0/0
R2(config-if)#ip access-group 1in
R2(config-if)#exit
检查测试:
PC1#ping 192.168.2.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echosto 192.168.2.2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent(5/5), round-trip min/avg/max = 60/96/192 ms
PC1#ping 2.2.2.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echosto 2.2.2.2, timeout is 2 seconds:
.....
Success rate is 0 percent (0/5)
R2#ping 192.168.1.1 source2.2.2.2 //2.2.2.0网段被R1的fa0/0接口掉弃
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echosto 192.168.1.1, timeout is 2 seconds:
Packet sent with a sourceaddress of 2.2.2.2
UUUUU
Success rate is 0 percent (0/5)
R1#debug ip packet
IP packet debugging is on
*Mar 1 00:03:42.039: IP: s=2.2.2.2(FastEthernet0/0), d=192.168.1.1, len 100, access denied
*Mar 1 00:03:42.047: IP: tableid=0, s=192.168.12.1(local), d=2.2.2.2 (FastEthernet0/0), routed via FIB
*Mar 1 00:03:42.047: IP: s=192.168.12.1 (local),d=2.2.2.2 (FastEthernet0/0), len 56, sending
*Mar 1 00:03:42.175: IP: s=2.2.2.2(FastEthernet0/0), d=192.168.1.1, len 100, access denied
*Mar 1 00:03:42.179: IP: tableid=0, s=192.168.12.1(local), d=2.2.2.2 (FastEthernet0/0), routed via FIB
*Mar 1 00:03:42.183: IP: s=192.168.12.1 (local),d=2.2.2.2 (FastEthernet0/0), len 56, sending
*Mar 1 00:03:42.255: IP: s=2.2.2.2(FastEthernet0/0), d=192.168.1.1, len 100, access denied
实验二、扩展ACL
PC1配置:
PC1#conf t
PC1(config)#no ip routing
PC1(config)#ip default-gateway192.168.0.1
PC1(config)#int fa0/0
PC1(config-if)#ip add192.168.0.2 255.255.255.0
PC1(config-if)#no sh
PC1(config-if)#exit
R1配置:
R1#conf t
R1(config)#int fa0/0
R1(config-if)#ip add192.168.0.1 255.255.255.0
R1(config-if)#no sh
R1(config-if)#exit
R1(config)#int fa0/1
R1(config-if)#ip add202.100.100.1 255.255.255.0
R1(config-if)#no sh
R1(config-if)#exit
Server配置:
Server(config)#username ciscoprivilege 15 password cisco
Server(config)#line vty 0 4
Server(config-line)#login local
Server(config-line)#exit
Server(config)#ip http server
Server(config)#int fa0/1
Server(config-if)#ip add202.100.100.80 255.255.255.0
Server(config-if)#no sh
Server(config-if)#exit
Server(config)#ip route 0.0.0.00.0.0.0 202.100.100.1
Server(config)#access-list 100permit tcp any 202.100.100.80 0.0.0.0 eq www
Server(config)# access-list 100permit tcp host 192.168.0.254 host 202.100.100.80 eq 23
Server(config)#access-list 100deny ip any any
erver(config)#int fa0/1
Server(config-if)#ipaccess-group 100 in
Server(config-if)#exit
测试检查:
PC1#ping 202.100.100.80 //拒绝telnet和web之外的一起流量进入
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echosto 202.100.100.80, timeout is 2 seconds:
UUUUU
Success rate is 0 percent (0/5)
PC1#telnet 202.100.100.80 //只允许192.168.0.254的主机telnet到服务器上
Trying 202.100.100.80 ...
% Destination unreachable;gateway or host down
PC1#telnet 202.100.100.80 80 //可以访问网站端口80(www)
Trying 202.100.100.80, 80 ...Open
HTTP/1.1 400 Bad Request
Date: Fri, 01 Mar 2002 00:22:11GMT
Server: cisco-IOS
Accept-Ranges: none
400 Bad Request
[Connection to 202.100.100.80closed by foreign host]
实验三、命名式的ACL
PC1配置:
PC1#conf t
PC1(config)#no ip routing
PC1(config)#int fa0/0
PC1(config-if)#ip add192.168.1.100 255.255.255.0
PC1(config-if)#no sh
PC1(config-if)#exit
PC1(config)#ip default-gateway192.168.1.1
PC2配置:
PC2#conf t
PC2(config)#int fa0/0
PC2(config-if)#ip add172.168.2.22 255.255.255.0
PC2(config-if)#no sh
PC2(config-if)#exit
PC2(config)#ip route 0.0.0.00.0.0.0 172.168.2.1
Server配置:
Server#conf t
Server(config)#int fa0/0
Server(config-if)#ip add202.100.100.100 255.255.255.0
Server(config-if)#no sh
Server(config-if)#exit
Server(config)#ip route 0.0.0.00.0.0.0 202.100.100.1
Server(config)#username ciscoprivilege 15 password cisco
Server(config)#line vty 0 4
Server(config-line)#login local
Server(config-line)#exit
Server(config)#ip http server
R1配置:
R1#conf t
R1(config)#int fa0/0
R1(config-if)#ip add192.168.1.1 255.255.255.0
R1(config-if)#no sh
R1(config-if)#exit
R1(config)#int fa0/1
R1(config-if)#ip add202.100.100.1 255.255.255.0
R1(config-if)#no sh
R1(config-if)#exit
R1(config)#int fa1/0
R1(config-if)#ip add 172.168.2.1255.255.255.0
R1(config-if)#no sh
R1(config-if)#exit
R1(config)#ip access-liststandard pc1-to-pc2 //创建一条pc1到pc2的标准命名ACL
R1(config-std-nacl)#10 deny 192.168.1.00.0.0.255 log//拒绝pc1的访问
R1(config-std-nacl)#20 permitany //其他流量全部允许
R1(config-std-nacl)#exit
R1(config)#ip access-listextended client-to-server //创建一条客户端到服务器的扩展命名ACL
R1(config-ext-nacl)#10 permittcp any host 202.100.100.100 eq 80//所有主机可以访问服务器的80
R1(config-ext-nacl)# 20 permittcp 172.168.2.0 0.0.0.255 host 202.100.100.100 eq 23 //只允许172.168.2.0可以telnet设备。
R1(config-ext-nacl)#30 deny ipany any //其他流量全部掉弃
R1(config-ext-nacl)#exit
R1(config)#int fa1/0
R1(config-if)#ip access-grouppc1-to-pc2 out //把pc1-to-pc2应用到fa1/0的出方向
R1(config-if)#exit
R1(config)#int fa0/1
R1(config-if)#ip access-groupclient-to-server out //把client-to-server应用到fa0/1的进方向
R1(config-if)#exit
检查测试:
PC1#ping 172.168.2.22 //PC1无法访问PC2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echosto 172.168.2.22, timeout is 2 seconds:
U.U.U
Success rate is 0 percent (0/5)
PC1#telnet 202.100.100.100//PC1不能访问server的telnet服务(23端口)
Trying 202.100.100.100 ...
% Destination unreachable;gateway or host down
PC1#telnet 202.100.100.100 80//PC1可以访问server的www服务(80端口)
Trying 202.100.100.100, 80 ... Open
HTTP/1.1 400 Bad Request
Date: Fri, 01 Mar 2002 00:57:16GMT
Server: cisco-IOS
Accept-Ranges: none
400 Bad Request
[Connection to 202.100.100.100closed by foreign host]
PC2#telnet 202.100.100.100//PC2可以telnet服务器的23端口
Trying 202.100.100.100 ... Open
User Access Verification
Username: cisco
Password:
Server#q
[Connection to 202.100.100.100closed by foreign host]
实验四、基于时间的ACL
PC1配置:
PC1#conf t
PC1(config)#no ip routing
PC1(config)#int fa0/0
PC1(config-if)#ip add192.168.0.11 255.255.255.0
PC1(config-if)#no sh
PC1(config-if)#exit
PC1(config)#ip default-gateway192.168.0.1
Boss配置:
Boss#conf t
Boss(config)#no ip routing
Boss(config)#ip default-gateway192.168.0.1
Boss(config)#int fa0/0
Boss(config-if)#ip add192.168.0.22 255.255.255.0
Boss(config-if)#no sh
Boss(config-if)#exit
Internet配置:
nternet#conf t
Internet(config)#int fa0/1
Internet(config-if)#ip add202.100.100.1 255.255.255.0
Internet(config-if)#no sh
Internet(config-if)#exit
Internet(config)#ip route0.0.0.0 0.0.0.0 202.100.100.100
R1配置:
R1#conf t
R1(config)#int fa0/0
R1(config-if)#ip add192.168.0.1 255.255.255.0
R1(config-if)#no sh
R1(config-if)#exit
R1(config)#int fa0/1
R1(config-if)#ip add202.100.100.100 255.255.255.0
R1(config-if)#no sh
R1(config-if)#exit
R1(config)#time-range T1 //创建时间段T1
R1(config-time-range)#periodicdaily 09:00 to 18:00 //定义T1的时间为每天9点到18点
R1(config-time-range)#exit
R1(config)#ip access-listextended go-internte //创建go-internet的扩展命名ACL
R1(config-ext-nacl)#10 deny ip192.168.0.3 0.0.0.254 any time-range T1//T1时间禁止奇数IP地址的客户机上网
R1(config-ext-nacl)#20 permitip any any //其他全部允许
R1(config-ext-nacl)#exit
R1(config)#int fa0/1
R1(config-if)#ip access-groupgo-internet out //将go-internet的ACL应用到fa0/1的出方向
R1(config-if)#exit
测试检查:
R1#clock set 17:00:00 27 sep2014 //将R1的系统时间改到T1范围内
PC1#ping 202.100.100.1 //在T1时间段不能上网
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echosto 202.100.100.1, timeout is 2 seconds:
UUUUU
Success rate is 0 percent (0/5)
R1#clock set 19:00:00 27 sep2014//将R1的时间改到T1范围外
PC1#ping 202.100.100.1 //在T1范围外PC1可以上网
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echosto 202.100.100.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent(5/5), round-trip min/avg/max = 56/164/288 ms
Boss#ping 202.100.100.1 //Boss机永远可以上网
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echosto 202.100.100.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent(5/5), round-trip min/avg/max = 64/137/308 ms
实验五、ACL中的establish实现TCP的单向通信
PC1配置:
C#conf t
PC(config)#no ip routing
PC(config)#ip default-gateway192.168.0.1
PC(config)#int fa0/0
PC(config-if)#ip add192.168.0.11 255.255.255.0
PC(config-if)#no sh
PC(config-if)#exit
PC(config)#line vty 0 4
PC(config-line)#login local
PC(config-line)#exit
PC(config)#username cisco privilege15 password cisco
Internet配置:
Internte#conf t
Internte(config)#int fa0/0
Internte(config-if)#ip add202.100.100.100 255.255.255.0
Internte(config-if)#no sh
Internte(config-if)#exit
Internte(config)#ip route0.0.0.0 0.0.0.0 202.100.100.1
Internte(config)#line vty 0 4
Internte(config-line)#loginlocal
Internte(config-line)#exit
Internte(config)#username ciscoprivilege 15 password cisco
R1配置:
R1#conf t
R1(config)#int fa0/0
R1(config-if)#ip add192.168.0.1 255.255.255.0
R1(config-if)#no sh
R1(config-if)#exit ^
R1(config)#int fa0/1
R1(config-if)#ip add202.100.100.1 255.255.255.0
R1(config-if)#no sh
R1(config-if)#exit
R1(config)#ip access-listextended tcp-establish
R1(config-ext-nacl)#10 permittcp any 192.168.0.0 0.0.0.255 established//允许已经建立连接的从外网返回的TCP数据通过
R1(config-ext-nacl)#20 deny ip any any //拒绝所有流量
R1(config-ext-nacl)#exit
R1(config)#int fa0/1
R1(config-if)#ip access-grouptcp-establish in
R1(config-if)#exit
检查测试:
PC#ping 202.100.100.100 //内部发起的icmp出不去
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echosto 202.100.100.100, timeout is 2 seconds:
.....
Success rate is 0 percent (0/5)
PC#telnet 202.100.100.100 //内部发起tcp的telnet可以出去
Trying 202.100.100.100 ... Open
User Access Verification
Username: cisco
Password:
Internte#q
[Connection to 202.100.100.100closed by foreign host]
Internte#ping 192.168.0.11 //外部发起的ICMP进不来
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echosto 192.168.0.11, timeout is 2 seconds:
UUUUU
Success rate is 0 percent (0/5)
Internte#telnet 192.168.0.11 //外部发起TCP的telnet进不来
Trying 192.168.0.11 ...
% Destination unreachable;gateway or host down
Establish参数利用TCP握手发起方未设置ACK位来匹配控制列表。ACK=0的将不符合控制列表。
当在ACL中加上establish参数后,路由器会滤除IP报头中SYNC置位的包(也就是连接请求的包)。而如果请求是内部用户发起的包,则不受影响。达到了控制外部用户的目的。即用户对外网请求的TCP数据允许通过;而禁止从外网主动发起的TCP连接数据通过,这样允许单向通信的效果,更符合安全需要。注意Establish对UDP无效。
实验六、自反ACL,真正实现单向通信
PC配置:
PC#conf t
PC(config)#no ip routing
PC(config)#ip default-gateway192.168.0.1
PC(config)#int fa0/0
PC(config-if)#ip add192.168.0.11 255.255.255.0
PC(config-if)#no sh
PC(config-if)#exit
PC(config)#username ciscoprivilege 15 password cisco
PC(config)#line vty 0 40
PC(config-line)#login local
PC(config-line)#exit
Internte配置:
Internet#conf t
Internet(config)#int fa0/0
Internet(config-if)#ip add202.100.100.100 255.255.255.0
Internet(config-if)#no sh
Internet(config-if)#exit
Internet(config)#ip route0.0.0.0 0.0.0.0 202.100.100.1
Internet(config)#ip http server
R1配置:
R1#conf t
R1(config)#int fa0/0
R1(config-if)#ip add192.168.0.1 255.255.255.0
R1(config-if)#no sh
R1(config-if)#exit
R1(config)#int fa0/1
R1(config-if)#ip add202.100.100.1 255.255.255.0
R1(config-if)#no sh
R1(config-if)#exit
R1(config)#ip access-listextended reflect //创建扩展命名的ACL
R1(config-ext-nacl)#permit ip192.168.0.0 0.0.0.255 any reflect getout//设置内网访问外网自反ACL,名字为getout
R1(config-ext-nacl)#deny ip anyany
R1(config-ext-nacl)#exit
R1(config)#ip access-listextended getin
R1(config-ext-nacl)#evaluategetout//根据getout自反ACL的规则,自动生成自反列表允许外部流量准入
R1(config-ext-nacl)#deny ip anyany
R1(config-ext-nacl)#exit
R1(config)#int fa0/1
R1(config-if)#ip access-groupreflect out //将自反ACL应用到fa0/1的出方向
R1(config-if)#ipaccess-group getin in//将自动生成的ACL应用到fa0/1的进方向
R1(config-if)#exit
检查测试:
PC#ping 202.100.100.100 //PC可ping外网
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echosto 202.100.100.100, timeout is 2 seconds:
.!!!!
Success rate is 80 percent(4/5), round-trip min/avg/max = 60/117/216 ms
PC#telnet 202.100.100.100 80//PC可以上网页
Trying 202.100.100.100, 80 ...Open
HTTP/1.1 400 Bad Request
Date: Fri, 01 Mar 2002 00:18:33GMT
Server: cisco-IOS
Accept-Ranges: none
400 Bad Request
[Connection to 202.100.100.100closed by foreign host]
Internet#ping 192.168.0.11 //外网无法ping内网
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echosto 192.168.0.11, timeout is 2 seconds:
UUUUU
Success rate is 0 percent (0/5)
Internet#telnet 192.168.0.11 //外网无法telnet内网
Trying 192.168.0.11 ...
% Destination unreachable;gateway or host down
R1#sh access-list //检查access-list状态,注意自动产生的几条ACL在会话结束后消失
Extended IP access list getin
10 evaluate getout
20 deny ip any any (24matches)
Reflexive IP access list getout
permit tcp host202.100.100.100 eq www host 192.168.0.11 eq 26055 (7 matches) (time left 293)
permit icmp host202.100.100.100 host 192.168.0.11 (18matches) (time left 54)
Extended IP access list reflect
10 permit ip 192.168.0.0 0.0.0.255any reflect getout (62 matches)
20 deny ip any any
自反 ACL 允许最近出站数据包的目的地发出的应答流量回到该出站数据包的源地址。这样您可以更加严格地控制哪些流量能进入您的网络,并提升了扩展访问列表的能力。使用自反 ACL 来允许从内部网络发起的会话的 IP 流量,同时拒绝外部网络发起的 IP 流量。此类 ACL 使路由器能动态管理会话流量。路由器检查出站流量,当发现新的连接时,便会在临时 ACL 中添加条目以允许应答流量进入。自反 ACL 仅包含临时条目。当新的 IP 会话开始时(例如,数据包出站),这些条目会自动创建,并在会话结束时自动删除。与前面介绍的带established 参数的扩展 ACL 相比,自反 ACL 能够提供更为强大的会话过滤。尽管在概念上与established 参数相似,但自反 ACL 还可用于不含 ACK 或 RST 位的 UDP 和 ICMP。established 选项还不能用于会动态修改会话流量源端口的应用程序。permit established 语句仅检查 ACK 和 RST 位,而不检查源和目的地址。
自反 ACL 具有以下优点:
帮助保护您的网络免遭网络黑客攻击,并可内嵌在防火墙防护中。
提供一定级别的安全性,防御欺骗攻击和某些 DoS 攻击。自反 ACL 方式较难以欺骗,因为允许通过的数据包需要满足更多的过滤条件。例如,源和目的地址及端口号都会检查到,而不只是 ACK 和 RST 位。
自反ACL永远是permit的;
自反ACL允许高层Session信息的IP包过滤;
利用自反ACL可以只允许出去的流量,但是阻止从外部网络产生的向内部网络的流量,从而可以更好地保护内部网络;
自反ACL是在有流量产生时(如出方向的流量)临时自动产生的,并且当Session结束时条目就自动删除;
自反ACL不是直接被应用到某个接口下的,而是嵌套在一个扩展命名访问列表下的。
自反 ACL 仅可在扩展命名 IP ACL 中定义。自反 ACL 不能在编号 ACL 或标准命名ACL 中定义,也不能在其它协议 ACL 中定义。自反 ACL可以与其它标准和静态扩展 ACL 一同使用。
实验七、动态ACL
PC1配置:
PC#conf t
PC(config)#no ip routing
PC(config)#ip default-gateway 192.168.0.1
PC(config)#int fa0/0
PC(config-if)#ip add 192.168.0.11255.255.255.0
PC(config-if)#no sh
PC(config-if)#exit
Internet配置:
Internet#conf t
Internet(config)#int fa0/0
Internet(config-if)#ip add 202.100.100.100255.255.255.0
Internet(config-if)#no sh
Internet(config-if)#exit
ternet(config)#ip route 0.0.0.0 0.0.0.0202.100.100.1
Internet(config)#ip http server
R1配置:
R1#conf t
R1(config)#int fa0/0
R1(config-if)#ip add 192.168.0.1255.255.255.0
R1(config-if)#no sh
R1(config-if)#exit
R1(config)#int fa0/1
R1(config-if)#ip add 202.100.100.1255.255.255.0
R1(config-if)#no sh
R1(config-if)#exit
R1(config)#username cisco password cisco
R1(config)#line vty 0 2
R1(config-line)#login local
R1(config-line)#autocommand access-enablehost timeout 5//设置当telnet身份认证完成就触发激活动态ACL,如果2分钟内没有匹配该条目的流量出现,则条目失效。
R1(config-line)#exit
R1(config)#line vty 3 4
R1(config-line)#login local
R1(config-line)#rotary 1
R1(config-line)#exit
R1(config)#ip access-list extended DY //创建扩展命名的ACL
R1(config-ext-nacl)#10 permit ip 192.168.0.00.0.0.255 host 192.168.0.1//允许内网到网关的访问,可telnet认证
R1(config-ext-nacl)#20dynamic internet timeout 120 permit ip 192.168.0.0 0.0.0.255 any//telnet认证后动态创建acl,允许内网主机有120分钟时间访问外网,一旦它超过120分钟,即使有流量正在传输,所有会话都会被切断,如果还需要通信,就需要重新建立连接
R1(config-ext-nacl)#30 deny ip any any //其他流量全部拒绝
R1(config-ext-nacl)#exit
R1(config)#int fa0/0
R1(config-if)#ip access-group DY in
R1(config-if)#exit
检查测试:
PC#ping 202.100.100.100 //未认证前出不了外网
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to202.100.100.100, timeout is 2 seconds:
UUUUU
Success rate is 0 percent (0/5)
PC#telnet 192.168.0.1 //telnet到路由器进行认证
Trying 192.168.0.1 ... Open
User Access Verification
Username: cisco
Password:
[Connection to 192.168.0.1 closed by foreignhost]
PC#ping 202.100.100.100 //完成认证后正常ping外网
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to202.100.100.100, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-tripmin/avg/max = 60/122/268 ms
PC#telnet 202.100.100.100 80////完成认证后正常访问外网
Trying 202.100.100.100, 80 ... Open
HTTP/1.1 400 Bad Request
Date: Fri, 01 Mar 2002 00:47:04 GMT
Server: cisco-IOS
Accept-Ranges: none
400 Bad Request
[Connection to 202.100.100.100 closed byforeign host]
R1#show access-lists //查看ACL状态
Extended IP access list DY
10permit ip any host 192.168.0.1 (333 matches)
20Dynamic internet permit ip 192.168.0.0 0.0.0.255 any
permit ip host 192.168.0.11 any (21matches) (time left 7138)//只允许认证成功的主机出去
30deny ip any any (60 matches)
动态ACL(AccessControl List)是对传统访问表的一种重要功能增强。动态ACL是能够自动创建动态访问表项的访问列表。传统的标准访问列表和扩展的访问列表不能创建动态访问表项。一旦在传统访问列表中加入了一个表项,除非手工删除,该表项将一直产生作用。而在动态访问表中,可以根据用户认证过程来创建特定的、临时的访问表项,一旦某个表项超时,就会自动从路由器中删除。用户首先通过提供用户名和口令,开启一个到路由器的telnet会话。在用户被认证之后,路由器会自动关闭telnet会话,同时将一个动态访问表项置于某个访问表中,以允许源地址为认证用户工作站地址的报文通过。这样,我们可以在安全边界上配置访问表,只允许那些能够通过用户认证的工作站才能发送向内的报文。由于动态ACL需要telent认证,所以要注意以下几点配置:
Router(config-line)# rotary 1//如果一旦开启动态ACL,那么所有发起的telnet会话都会触发一个动态ACL表项,但是telnet会马上关闭,如果我们想要管理一台设备的话,就需要在vty 0-4的其中一个进程中输入该命令,然后在telnet的时候地址后面打上3001。
Router(config-line)# password xxxx //在VTY下配置即只进行密码认证
Router(config)# username name password xxxx//指定认证时需要输入的用户名和密码
Router(config-line)# autocommand access-enable [host][timeout minutes] //输入该命令就是允许认证成功后自动建立一个动态ACL,如果不加host,一旦一台主机认证成功以后,那么其他主机就不需要认证了,这样是不好的。timeout指定空闲超时时间,单位是分钟。空闲超时时间是针对单独的一个表项的时间,如果该表现在指定的时间内没有流量通过,那么它就会超时,并且自动从ACL中删除。另外autocommand access-enable既可以在vty进程下面打,也可以在特权模式下打,不同的是,特权模式下可以打?看到命令的详细解释,而vty下面看不到