Reflexive Access Lists
1.一个面临的控制问题
我们首先看下图
有这样一个要求,就是我们要允许内部的机器可以访问外部,可是不允许外部的主机访问内部,有人说,这个简单,用一个访问控制列表,在Seial1上做如下配置
router(config)#access-list 100 deny ip any any
router(config-if)#ip access-group 100 in
这样做的结果是外面肯定不能访问内部了,可是我们从内部出去的数据包也甭想回来了,所以这种做法不行
我们可以继续开动脑筋,我们知道TCP在建立连接之前,有一个三次握手过程,在TCP的包头里面有一个标志位,我们的扩展访问控制列表可以对这个标志位进行控制。我们分析下,内部主机向外发起连接的时候,SYN位为1,而外部的主机回应包里面为 SYN=1 ACK=1
而一个外部主机要想内部发起连接,他的第一个包只是SYN=1,而ACK=0,所以,我们可以通过这种方式来做
Router(config)#access-list 100 permit tcp any any ack
或者
Router(config)#access-list 100 permit tcp any any established
然后应用到接口上
router(config-if)#ip access-group 100 in
这个方法是可以,但是如果不是TCP的应用,是UDP的程序该如何办?很显然,通过这个方式是解决不了的。我们用自反访问列表就可以很好的解决这个问题
2. 自反访问控制列表
自反访问列表的英文名字是Reflexive Access Lists,Reflexive这个词我们翻译成自反,如何自反呢?就是他会根据一个方向的访问控制列表,自动创建出一个反方向的控制列表,那么,创建一个什么样的控制列表呢?就是和原来的控制列表—IP的源地址和目的地址颠倒,并且源端口号和目的端口号完全相反的一个列表。并且还有一定的时间限制,过了时间,就会超时,这个新创建的列表就会消失,这样大大增加了安全性。
具体案例:
拓扑图如下

需求如下:
R1模仿内网,R3模仿外网,现在要求R1可以远程登录到R3,但是不允许R3发起任何到R1的连接。


