有这么个要求,我们要允许内部的机器可以访问外部,可是不允许外部的主机访问内部,有人说,这个简单,用一个访问控制列表,在串口上做如下配置: 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