Reflexive ACL中outbound的部分: ip access-list extended outbound_filter permit icmp any any reflect icmp_traffic permit ip any any !---注意在Reflexive ACL中只能用named方式的ACL,不能用numbered方式的ACL。 !---基本配置和普通ACL并没有什么太多不同,不同之处是reflect icmp_traffic,它的意思是这条ACE作为单向流量来处理,并且给了一个名称叫icmp_traffic,icmp_traffic在inbound部分被引用。 !---permit ip any any并不是必要的,加在这里是为了另一个测试,下面会说明。
Reflexive ACL中inbound的部分: ip access-list extended inbound_filter evaluate icmp_traffic deny ip any any log !---inbound的配置有和普通ACL有点不同了,第一句evaluate icmp_traffic对上述outbound配置中的icmp_traffic进行了引用,也就是说,它要检查从外网进来的流量,如果这个流量确实是从内网发起的对外访问的返回流量,那么允许这个流量进来。 !---注意deny ip any any log这句,虽然这句也是不必配的,因为是默认的deny ip any any,但我加了log来对上面outbound部分的permit ip any any进行测试。
Reflexive ACL中应用到接口的部分: interface Serial0 ip address 192.1.1.1 255.255.255.0 ip access-group inbound_filter in ip access-group outbound_filter out !---这里也有一些讲究,ACL outbound_filter被应用到外网口的out方向,ACL inbound_filter被应用到外网口的in方向,in和out不能搞混。
…… Reflexive IP access list icmp_traffic permit icmp host 192.1.1.2 host 10.1.1.2 (24 matches) (time left 196) ……
这些动态ACL可通过TCP的FIN/RST包来动态自动消除,对ICMP这样stateless的包来说,是通过内置的timer来消除的,这点可通过上述show access-list结果中的(time left 196)来核实。
最后再说说那另一个测试,也就是两个ACL中加的多余的东西:
ip access-list extended outbound_filter permit ip any any
ip access-list extended inbound_filter deny ip any any log
我在10.1.1.2上发起一个到192.1.1.2的TELNET连接,这个流量到了S0口后由ACL outbound_filter中的permit ip any any检测后放行。到了RouterB后,RouterB进行处理然后返回流量,这个流量到了S0口后由inbound_filter检测,因为evaluate icmp_traffic中并没有包含对TCP类型流量的检测,这个包由deny ip any any log一句处理后丢弃并生成日志: