自反访问控制列表
作用:internal network可以访问externalnetwork,但是不允许external network访问internal network。
说明:为了全网互通,底层运行ospf
R1与R2之间12.0.0.0/24,R2与R3之间23.0.0.0/24
在R1上建立lo0:1.1.1.1,在R3上建立lo0:3.3.3.3
开始:
第一步:在R1上测试
在R1pingR3回环口 R1#ping 3.3.3.3 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 3.3.3.3, timeout is 2 seconds: !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 32/76/132 ms |
可以在R1上ping通R3,反之亦然。
第二步:为了不让external network(R3)ping通internal network(R1)
如果使用扩展访问控制列表在int F1/1上做如下配置
R2(config)#access-list 100 permit ospf any any R2(config)#access-list 100 deny ip any any R2(config)#int f1/1 R2(config-if)#ip access-group 100 in 1.R1pingR3 R1#ping 3.3.3.3 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 3.3.3.3, timeout is 2 seconds: ..... Success rate is 0 percent (0/5) 正常的出流量也不通,这是因为R1的流量到达R3后,在返回过程中被R2丢弃 2.R3上debug ip icmp *Aug9 12:47:40.547: ICMP: echo reply sent, src 3.3.3.3, dst 12.0.0.1 *Aug9 12:47:40.627: ICMP: dst (3.3.3.3) administratively prohibited unreachable rcv from 23.0.0.2 R3# *Aug9 12:47:42.535: ICMP: echo reply sent, src 3.3.3.3, dst 12.0.0.1 *Aug9 12:47:42.591: ICMP: dst (3.3.3.3) administratively prohibited unreachable rcv from 23.0.0.2 R3# *Aug9 12:47:44.527: ICMP: echo reply sent, src 3.3.3.3, dst 12.0.0.1 *Aug9 12:47:44.607: ICMP: dst (3.3.3.3) administratively prohibited unreachable rcv from 23.0.0.2 R3# *Aug9 12:47:46.531: ICMP: echo reply sent, src 3.3.3.3, dst 12.0.0.1 *Aug9 12:47:46.615: ICMP: dst (3.3.3.3) administratively prohibited unreachable rcv from 23.0.0.2 R3# *Aug9 12:47:48.527: ICMP: echo reply sent, src 3.3.3.3, dst 12.0.0.1 *Aug9 12:47:48.583: ICMP: dst (3.3.3.3) administratively prohibited unreachable rcv from 23.0.0.2 //icmp的响应包,源为3.3.3.3目标为12.0.0.1 //被管理性的禁止 |
第三步:使用自反访问控制列表
ip access-list extended filter-IN permit ospf any any evaluate TELNET ip access-list extended filter-OUT permit ospf any any permit tcp any any reflect TELNET //在这里我们只使用了telnet流量从internal到external,反之不通 |
对于自反访问控制列表说明如下
一个列表创建自反列表 例如 ip access-list extended filter-OUT permit ospf any any permit tcp any any reflect TELNET 注意关键词refect当由符合tcp any any 的数据流通过的时候,就会产生一个名字叫做TELNET的的自反列表,但是它仅仅是产生而已,还不能被使用,因为没与应用到接口上,我们采用另外一个扩展访问控制列表进行调用 ip access-list extended filter-IN permit ospf any any evaluate TELNET 在进来的访问列表里面,用关键字evaluate来调用已经产生的TELNET自反列表。 |
第四步:调用(注意方向)
ip access-list extended filter-OUT permit ospf any any permit tcp any any reflect TELNET //以上三行为当流量从internal到external时,产生TELNET的自反列表,所以这个列表要用在R2的F1/1接口的“出”方向上 ip access-list extended filter-IN permit ospf any any evaluate TELNET //以上三行为当上一个acl产生名为TELNET的自反列表时,调用到这个扩展列表上,所以这个列表要用到R2的F1/1接口上“进”方向上 R2(config-ext-nacl)#int f1/1 R2(config-if)#ip access-group filter-OUTout R2(config-if)#ip access-group filter-INin |
第五步:先看现象
R1#telnet 3.3.3.3 Trying 3.3.3.3 ... Open User Access Verification Username: % Username:timeout expired! R3#telnet 1.1.1.1 Trying 1.1.1.1 ... % Destination unreachable; gateway or host down |
现象成功,接下来我们看看R2上发生了什么?
R2#sh ip access-lists Reflexive IP access list TELNET permit tcp host 3.3.3.3 eq telnet host 12.0.0.1 eq 15504 (27 matches) (time left 295) Extended IP access list filter-IN 10 permit ospf any any (47 matches) 20 evaluate TELNET Extended IP access list filter-OUT 10 permit ospf any any 20 permit tcp any any reflect TELNET (43 matches) 解释: Reflexive IP access list TELNET permit tcp host 3.3.3.3 eq telnet host 12.0.0.1 eq 15504 (27 matches) (time left 295) 当流量从R1 F1/1流出时,匹配到filter-OUT列表,于是产生一个名为TELNET的自反列表,如下: permit tcp host 3.3.3.3 eq telnet host 12.0.0.1 eq 15504 //这是R1 telnet R3的反向流量, 于是当反向流量返回并经过R2的F1/1接口时被接口放行。 |
小小备注:访问控制列表只对经过流量匹配,不针对本地流量,要匹配本地流量,则还需要配置本地策略ip local policy XX,关于策略路由超出了自反ACL的教程,请自行查阅相关文档
小小总结:自反ACL只适合单通道的应用,比如说telnet,DNS等等,对于如FTP等多通道的应用,它无能为力,基于上下文的ACL可以解决,关于基于上下文的ACL后续上传……
一般情况下,自反ACL的特性比NAT破坏了,用处不大