CSDN博客

img inject2006

自反(反向)访问控制列表学习笔记

发表于2008/9/29 17:27:00  1698人阅读

 在校学了访问控制列表(acl),都是一些简单的基本的,听老师讲的时候想到了一个问题,就是你能访问我,我不能访问你的问题,于是本文产生了,曾去百度搜索一下关于反向ACL的知识,可是讲解的不是很详细,在此我把学习该技术的经验分享一下,高手飘过哦。。。。

    先规划一个简单的拓扑图

                           S1/0                          S1/0        S1/1                                S1/0 

                    R2----------------------------------R1-------------------------------------R3

我用的是Dynamips模拟器做的 路由用的是7200 (发现很多别的低端路由做不了这个)

 

    先把这三台路由器配通,很简单,就不用写了吧,用的是OSPF协议,我把端口地址说下

        R1     S1/0   10.0.0.1 255.255.255.0

                  S1/1   10.0.1.1 255.255.255.0

        R2     S1/0   10.0.0.2  255.255.255.0

        R3     S1/0   10.0.1.2 255.255.255.0

 

好了 开始配ACL了 我们现在假设要让 R2 TELNET  R3 但是不让 R3 TELNET R2  ,

    我们现在主要在R1 的 S1/0口配ACL 

ip access-list extended refin                  //创建一个可扩展的命令访问列表,并定义进来所匹配的数据的条件

 permit ospf any any                       //允许所有的ospf协议通过

 permit icmp any any                       //允许Internet消息控制协议(ICMP)通过

permit tcp any host 10.0.1.2 eq telnet reflect ref  //允许所有的网络Telnet.10.0.1.2 reflect为反射语句,就是允许10.0.1.2反射数据,当与evaluate语句匹配时允许通过.

 ip access-list extended refout                  //创建一个可扩展的命名访问控制列表,并定义出去的数据所匹配的条件

 permit ospf any any                        //允许所有的ospf协议通过

 permit icmp any any                        //允许所有的Internet消息控制协议(ICMP)通过

  evaluate ref                       //反射语句,R1创建反射语法,当语法匹配时允许通过

 

然后我们分别把这两条ACL 应用到S1/0的 IN 和 OUT 方向上

在R2 上 SHOW RUNNING-CONFIG 可以看到这些内容

 

interface Serial1/0
 ip address 10.0.0.1 255.255.255.0
 ip access-group inref in
 ip access-group outref out
 serial restart-delay 0
 clock rate 64000
 no fair-queue

 

通俗一点解释: permit tcp any host 10.0.1.2 eq telnet reflect ref   其中的reflect关键字表明该条目可以用于捕捉建立反向的ACL条目所需要的信息。ref是reflect组的名字,具备相同reflect组名字的所有的ACL条目为一个reflect组,这个ref 是可以随便起的名字(就像建立扩展ACL我命名的refin一样)

evaluate ref  ,这一句的意思是
有符合ref这个reflect组中所定义的acl条目的流量发生时,在evaluate语句所在的当前位置动态生成一条反向的permit语句。(在本例中就相当于 在OUT方向自动又添加一条允许TELNET协议回应通过的语句),

    为什么要这么写呢?很多协议都是基于TCP的 所以免不了需要3次握手,所以当一方建立连接的时候,另一方必须给予回应(ACK)才可以正常通信,所在这个端口S1/0中,当R2 TELNET R3时,相当于在IN方向发送数据包到R3,这时候ACL起作用了,他会在IN方向检查数据包,他发现这是一个TELNET数据包,目的是R3(10.0.1.2) 查看自己的ACL列表,在INREF中有这么一条规则 permit tcp any host 10.0.1.2 eq telnet reflect ref 跟这个数据报有关 不看REFLECT后面,就看前面意思是允许 这个数据包通过,加上后面的REFLECT REF 意思就是在通过的同时告诉REF 这个REFLECT组的所有成员对其相对于这条数据包的回应数据包授予放行,而在这里REF 组成员就是   evaluate ref 这个语句 所以 这个语句在其相对位置上就会出现一条授予放行的语句,所以最终双方才可以正常通信。

    看一下实验结果:

    R2 TELNET R3:

    r2#telnet 10.0.1.2
Trying 10.0.1.2 ... Open


User Access Verification

Password:

成功

    R3 TELNET R2:

    r3#TELNET 10.0.0.2
Trying 10.0.0.2 ...
% Destination unreachable; gateway or host down

失败了

当R3 TELNET R2 的时候 数据包在经过S1/0时,在OUT方向 ACL 会检查数据包,查看自己的ACL列表,发现没有这么一条规则可以匹配他,所以按照默认规则,一律放弃,所以R3 TELNET R2 不会成功 ,即使那条存在于OUT 方向的 EVALUATE REF 可是他没有主ACL的激活,所以不会授予放行地。

 

    那么我们试一试用R1 TELNET R2

    

Trying 10.0.0.2 ...

 

从上面的显示看出,R1已经成功TELNET,但是R2不能回包给R1,不能正常的响应R1,原因是列表不能匹配本路由器所产生的数据包,需要手动配置一条指向本路由的控制列表.

 

R1(config-ext-nacl)# permit tcp host 10.0.0.2 eq telnet host 10.0.0.1 established //生成一条指向自己的控制列表,established语句只针对于TCP,指一个已经建立的连接,如果TCP数据包中的ACK,FIN,PSH,RST,SYN或者URG等控制位被设置,则匹配,如果是要求建立连接的初始数据报,则不匹配

 

 

ip access-list extended inref
 permit ospf any any
 permit icmp any any
 permit tcp any host 10.0.1.2 eq telnet reflect ref
 permit tcp host 10.0.0.2 eq telnet host 10.0.0.1 established
ip access-list extended outref
 permit ospf any any
 permit icmp any any
 evaluate ref

 

此时再在R1TELNET,已经成功TELNETR2

R1#telnet 10.0.0.2

Trying 10.0.0.2 ... Open

 

关于 established 参数 后面还可以接很多TCP相关的标志位,大家有兴趣可以参考相关资料。

0 0

相关博文

我的热门文章

img
取 消
img