自反ACL实验.docx
- 文档编号:23984380
- 上传时间:2023-05-23
- 格式:DOCX
- 页数:12
- 大小:44.61KB
自反ACL实验.docx
《自反ACL实验.docx》由会员分享,可在线阅读,更多相关《自反ACL实验.docx(12页珍藏版)》请在冰豆网上搜索。
自反ACL实验
自反访问控制列表
自反访问列表的英文名字是ReflexiveAccessLists,Reflexive这个词我们翻译成自反,如何自反呢?
就是他会根据一个方向的访问控制列表,自动创建出一个反方向的控制列表,那么,创建一个什么样的控制列表呢?
就是和原来的控制列表—IP的源地址和目的地址颠倒,并且源端口号和目的端口号完全相反的一个列表。
并且还有一定的时间限制,过了时间,就会超时,这个新创建的列表就会消失,这样大大增加了安全性。
拓扑图如下:
需求如下:
R1模仿内网,R3模仿外网,现在要求R1可以远程登录到R3,但是不允许R3发起任何到R1的连接。
三台路由器初始配置如下:
R1#shrun
interfaceSerial0
ipaddress10.1.1.1255.255.255.0
routerospf1
log-adjacency-changes
network0.0.0.0255.255.255.255area0
linevty04
passwordcisco
login
R2#shrun
interfaceSerial0
ipaddress10.1.1.2255.255.255.0
clockrate64000
interfaceSerial1
ipaddress192.168.1.1255.255.255.0
clockrate64000
routerospf1
log-adjacency-changes
network0.0.0.0255.255.255.255area0
R3#shrun
interfaceLoopback0
ipaddress3.3.3.3255.255.255.0
interfaceEthernet0
noipaddress
shutdown
interfaceSerial0
noipaddress
interfaceSerial1
ipaddress192.168.1.2255.255.255.0
routerospf1
log-adjacency-changes
network0.0.0.0255.255.255.255area0
linevty04
passwordcisco
login
R1上的路由表
R1#shiproute
Codes:
C-connected,S-static,R-RIP,M-mobile,B-BGP
D-EIGRP,EX-EIGRPexternal,O-OSPF,IA-OSPFinterarea
N1-OSPFNSSAexternaltype1,N2-OSPFNSSAexternaltype2
E1-OSPFexternaltype1,E2-OSPFexternaltype2
i-IS-IS,L1-IS-ISlevel-1,L2-IS-ISlevel-2,ia-IS-ISinterarea
*-candidatedefault,U-per-userstaticroute,o-ODR
P-periodicdownloadedstaticroute
Gatewayoflastresortisnotset
3.0.0.0/32issubnetted,1subnets
O 3.3.3.3[110/129]via10.1.1.2,00:
03:
42,Serial0
10.0.0.0/24issubnetted,1subnets
C 10.1.1.0isdirectlyconnected,Serial0
O 192.168.1.0/24[110/128]via10.1.1.2,00:
03:
42,Serial0
测试一下
R1#ping3.3.3.3
Typeescapesequencetoabort.
Sending5,100-byteICMPEchosto3.3.3.3,timeoutis2seconds:
!
!
!
!
!
Successrateis100percent(5/5),round-tripmin/avg/max=60/62/68ms
R1#
R1#telnet3.3.3.3
Trying3.3.3.3...Open
UserAccessVerification
Password:
R3>
在R3上测试一下:
R3#ping10.1.1.1
Typeescapesequencetoabort.
Sending5,100-byteICMPEchosto10.1.1.1,timeoutis2seconds:
!
!
!
!
!
Successrateis100percent(5/5),round-tripmin/avg/max=60/60/60ms
R3#telnet10.1.1.1
Trying10.1.1.1...Open
UserAccessVerification
Password:
R1>
路由是通畅的,R1可以正常的远程登录到R3,因为没有作任何控制,所以R3照样可以访问R1
解决方案1:
使用扩展访问控制列表,控制TCP标志位
在R2上做如下配置
interfaceSerial1
ipaddress192.168.1.1255.255.255.0
ipaccess-group100in
clockrate64000
access-list100permittcpanyanyestablished //用ACK也行
access-list100permitospfanyany //保持ospf路由协议正常工作
注:
在访问控制列表100中没有允许ICMP协议,所以返回的数据包在R2上面被拒绝掉了,但是telnet能成功,因为在进来的访问控制列表里允许了TCP。
虽然允许了TCP包通过,但是如果是R3向R1发起初始化连接,TCP里面的标志位SYN=1,ACK=0,而我们的访问控制列表的关键词established定义了只有ACK=1的包才能被允许,所以,这个初始连接包就被拒绝了
R1上做测试:
R1#ping3.3.3.3
Typeescapesequencetoabort.
Sending5,100-byteICMPEchosto3.3.3.3,timeoutis2seconds:
.....
Successrateis0percent(0/5)
R1#telnet3.3.3.3
Trying3.3.3.3...Open
UserAccessVerification
Password:
R3>
这个时候,我们发现不能ping通了,原因是什么呢?
access-list100permittcpanyanyestablished
access-list100permitospfanyany
在访问控制列表中没有允许ICMP协议,所以返回的数据包在R2上面被拒绝掉了,但是telnet成功了,因为我们在进来的访问控制列表里允许了TCP。
在R3上做测试:
R3#ping10.1.1.1
Typeescapesequencetoabort.
Sending5,100-byteICMPEchosto10.1.1.1,timeoutis2seconds:
U.U.U
Successrateis0percent(0/5)
R3#telnet10.1.1.1
Trying10.1.1.1...
%Destinationunreachable;gatewayorhostdown
R3是不能访问R1的任何东西了,ping不通的原因是在R2上阻止了ICMP,而telnet为什么不行呢,虽然允许了TCP包通过,但是因为是R3向R1发起初始化连接,TCP里面的标志位SYN=1,ACK=0,而我们的访问控制列表的关键词established定义了只有ACK=1的包才能被允许,所以,这个初始连接包就被拒绝了,那么这种做法就满足了试验要求。
解决方案2:
使用自反访问控制列表
在R2做如下配置
interfaceSerial0
ipaddress10.1.1.2255.255.255.0
ipaccess-grouptcp-outin
clockrate64000
!
interfaceSerial1
ipaddress192.168.1.1255.255.255.0
ipaccess-grouptcp-inin
clockrate64000
ipaccess-listextendedtcp-in//建立进来TCP数据的ACL
permitospfanyany//同意OSPF数据包通过
evaluatetelnet//在进来的访问列表里面,用关键字evaluate来调用已经产生的telnet自反列表。
ipaccess-listextendedtcp-out
permitospfanyany
permittcpanyanyreflecttelnet//reflect,当由符合tcpanyany的数据流通过的时候,就会产生一个名字叫做telnet的自反列表,但是它是产生而已,还不能被使用,因为没与应用到接口上
需要注意以下几点
1)自反访问控制列表只能和基于名字的扩展访问控制列表一起工作
2)它自己不能工作,必须寄生于扩展访问控制列表,并且有两个访问列表才行。
3)自反ACL实现过程:
R1的telnet3.3.3.3命令从R2的S0进来时,写了一条permittcpanyanyreflecttelnet命令,意思是当R1访问R3时,自动生成一条名为telnet自反列表permittcphost3.3.3.3eqtelnethost10.1.1.1eq11003(26matches)(timeleft258),这时,这个ACL只产生而已,还不能被使用。
当R3的3.3.3.3对R1回复信息时,在R2的S1口入口方向用evaluate来调用已经产生的telnet自反列表。
这时回复的数据包符合telnet自反列表的要求,同意通过。
4)自反ACL的目的就是在安全方(内网)有数据包出去的情况下,不安全方(外网)的数据的回复才能进来,不安全方(外网)不能作为连接的发起者,只能作回复者,只能reply,不能request。
安全方(内网)可以reply和request。
在R1上做测试
R1>en
R1#telnet3.3.3.3
Trying3.3.3.3...Open
UserAccessVerification
Password:
R3>
我们看看R2上:
R2#showaccess-lists
ExtendedIPaccesslisttcp-in
10permitospfanyany(72matches)
20evaluatetelnet
ExtendedIPaccesslisttcp-out
20permitospfanyany(72matches)
30permittcpanyanyreflecttelnet
ReflexiveIPaccesslisttelnet
permittcphost3.3.3.3eqtelnethost10.1.1.1eq11003(26matches)(timeleft258)
已经产生了一个自反访问控制列表,他的源端口是23,目的端口是11003,正好是我们刚才从R1上telnet的返回的数据流。
从R3上做下测试:
R3#telnet10.1.1.1
Trying10.1.1.1...
%Destinationunreachable;gatewayorhostdown
我们看不成功,这个连接的源端口号是一个大于10000得一个随机端口号,目的端口号是23,但是访问控制列表并不允许这样的数据流,所以访问失败,这个满足我们的试验需求。
我们还可以对这个自反列表存在时间进行控制,我们看看这个自反列表
permittcphost3.3.3.3eqtelnethost10.1.1.1eq11003(26matches)(timeleft258),timeleft258是指如果没有数据流的情况下,再过258秒,这个自反列表既要从缓存中被清掉。
这无疑增加了安全性,降低了被IP欺骗的可能。
这个时间我们可以用如下的方式修改:
ipaccess-listextendedtcp-out
permittcpanyanyreflecttelnettimeout600 //单位是秒
另外在全局模式下,可以使用另外一个命令修改超时时间:
r2(config)#ipreflexive-listtimeout600
这样就把时间改成了10分钟,而默认是5分钟
现在有一个新的需求:
我们要求在R2可以telnet到R3,但是R3不能访问R2
我们在R2上做如下配置
interfaceSerial1
ipaddress192.168.1.1255.255.255.0
ipaccess-grouptcp-inin
ipaccess-grouptcp-outout
clockrate64000
ipaccess-listextendedtcp-in
permitospfanyany
evaluatetelnet
ipaccess-listextendedtcp-out
permitospfanyany
permittcpanyanyreflecttelnet
我们首先在R3上测试一下:
R3#telnet192.168.1.1
Trying192.168.1.1...
%Destinationunreachable;gatewayorhostdown
结果是满意的
我们再在R2上测试一下:
R2#telnet3.3.3.3
Trying3.3.3.3...
%Connectiontimedout;remotehostnotresponding
结果却出乎我们的预料。
原因在哪里?
我们看一下R2上的访问列表
R2#showaccess-lists
ExtendedIPaccesslisttcp-in
10permitospfanyany(230matches)
20evaluatetelnet
ExtendedIPaccesslisttcp-out
20permitospfanyany(202matches)
30permittcpanyanyreflecttelnet
ReflexiveIPaccesslisttelnet
自反列表竟然为空!
这是为什么呢?
原因在于访问列表的一个特性,就是出去的访问列表不对这个路由器自己产生的数据包进行检查,也就是我们从R2上telnet到R3的数据流是从R2产生的,所以没有经过这个下面这个访问控制列表的检查
ipaccess-listextendedtcp-out
permitospfanyany
permittcpanyanyreflecttelnet
访问控制列表,那么自然就不会产生自反访问列表telnet了。
解决的办法有两个:
一个是通过本地路由策略(localpolicyroute-map)
iplocalpolicyroute-mapcisco
route-mapciscopermit10
matchipaddresstcp-out
在R2上再测试一下:
R2#telnet3.3.3.3
Trying3.3.3.3...Open
UserAccessVerification
Password:
R3>
R2上看下访问列表:
//注意,不能在上面的配置中打exit,如果是这样,那么自反列表剩下的时间立刻被降为6秒,不好观察结果,我采用的是在R1上远程登录(telnet)到R2再观察
r2#showaccess-lists
ExtendedIPaccesslisttcp-in
10permitospfanyany(8matches)
20evaluatetelnet
ExtendedIPaccesslisttcp-out
10permitospfanyany
20permittcpanyanyreflecttelnet
ReflexiveIPaccesslisttelnet
permittcphost3.3.3.3eqtelnethost192.168.1.1eq11002(timeleft297)
好的,我们看看现在就可以了!
当然,我们还有另外的一个方法:
R2上这样配置:
ipaccess-listextendedtcp-in
permitospfanyany
evaluatetelnet
permittcpanyeqtelnetanyack---------------------------加上了这条指令
ipaccess-listextendedtcp-out
permitospfanyany
permittcpanyanyreflecttelnet
在R2上测试:
r2#telnet3.3.3.3
Trying3.3.3.3...Open
UserAccessVerification
Password:
R3>
成功登陆,符合我们的期望:
在R3上进行测试:
R3#telnet192.168.1.1
Trying192.168.1.1...
%Destinationunreachable;gatewayorhostdown
结果也是我们所需要的
总结:
自反访问控制列表在第四层上分析数据流,是一个按需生成的控制列表,在没有数据流的时候,也就是不需要的时候,会自动消失,是一种较自动化的数据控制方式,在一定程度上防止了IP地址欺骗攻击,非常有效的保护了用户的网络免受黑客破坏,并且对UDP数据包最有效(对于UDP包,扩展访问控制列表毫无办法)。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ACL 实验