有这样一个要求,就是我们要允许内部的机器可以访问外部,可是不允许外部的主机访问内部,例如:R1模仿内网,R3模仿外网,现在要求R1可以远程登录到R3,但是不允许R3发起任何到R1的连接。
有人说,这个简单,用一个访问控制列表,在端口上做如下配置
router(config)#access-list 100 deny ip any any
router(config-if)#ip access-group 100 in
这样做的结果是外面肯定不能访问内部了,可是我们从内部出去的数据包也甭想回来了,所以这种做法不行。
自反访问控制列表
自反访问列表的英文名字是Reflexive Access Lists,Reflexive这个词我们翻译成自反,如何自反呢?就是他会根据一个方向的访问控制列表,自动创建出一个反方向的控制列表,那么,创建一个什么样的控制列表呢?就是和原来的控制列表—IP的源地址和目的地址颠倒,并且源端口号和目的端口号完全相反的一个列表。并且还有一定的时间限制,过了时间,就会超时,这个新创建的列表就会消失,这样大大增加了安全性。
解决方案:使用自反访问控制列表
在R上做如下配置
interface Serial0
ip address 10.1.1.2 255.255.255.0
ip access-group tcp-out in
clockrate 64000
!
interface Serial1
ip address 192.168.1.1 255.255.255.0
ip access-group tcp-in in
clockrate 64000
ip access-list extended tcp-out
permit ospf any any
permit tcp any 23 reflect telnet
ip access-list extended tcp-in
permit ospf any any
evaluate telnet
需要注意以下几点
1)自反ACL只能和基于名字的扩展访问控制列表一起工作。
2)他自己不能工作,必须寄生于扩展访问控制列表,并且有两个访问列表才行,也就是用一个列表创建自反列表
例如
ip access-list extended tcp-out
permit tcp any 23 reflect telnet
注意关键词 refect,当由符合tcp any 23 的数据流通过的时候,就会产生一个名字叫做telnet的自反列表,但是它是产生而已,还不能被使用,因为没与应用到接口上。
另外一个列表进行调用
ip access-list extended tcp-in
evaluate telnet
在进来的访问列表里面,用关键字evaluate 来调用已经动态产生的telnet自反列表。