【IT168 技术】现在网络是越来越复杂,网络数据也呈现出多样化,作为网络管理员必须能够拒绝不良的访问,同时又要允许正常的访问。当然现在有很多技术都可以实现,我们今天来看在企业网络管理中怎么利用Cisco路由ACL来实现访问控制。
路由器为了过滤数据包,需要配置一系列的规则,以决定什么样的数据包能够通过,什么样的数据包不应该通过;这些规则就是通过ACL来定义的。
ACL全称是:Access Control List,中文就是访问控制列表。ACL是由permit或deny语句组成的一系统有顺序的规则组成,这些规则根据数据包的源地址、目标地址、端口号等来描述。ACL通过这些规则对数据包进行分类,并将规则应用到路由器的某个接口上,这样路由器就可以根据这些规则来判断哪些数据包可以接收,哪些数据包需要拒绝。从而实现网络的安全性,因此我们总结ACL主要目的很简单就是允许、拒绝数据包通过路由器;允许或拒绝Telnet会话的建立。
当然路由器上默认是没有ACL的也就是说默认情况下任何数据包都可以通过。就像如果你们单位没有保安,那么任何人的出入都不会受到限制。那么就会给单位的财产带来不安全的因素。因此,可以在单位门口设置一个保安部,那么这个保安就会看如果是本单位的人进入,直接通过,如果不是就要盘问一番,如果是“良民”就大大的放行,如果是“日军”,就统统的“八个牙路”那么同理我们也可以在路由器的某个接口上设置这么一个保安,检查通过该接口上的每一个数据包,符合某个条件的通过,或者是符合某个条件的不允许通过。从而实现对数据包过滤的作用。
我们所说的ACL分为两种:标准和扩展
标准ACL,如下图所示:
▲ 标准ACL
大家从图中可以看出,标准ACL只检查数据包中的源地址,至于数据帧头是HDLC,数据报头是TCP,标准ACL统统不管,就认一个源IP头,也就是说标准ACL只会检查IP数据包的源地址,然后根据是否满足条件来决定是允许还是拒绝整个协议集。
扩展ACL,如下图所示:
▲ 扩展ACL
扩展ACL比标准ACL检查的东西要多,检查源地址、目的地址、协议以及相应端口;即扩展ACL可以结合这四个参数来决定是允许还是拒绝某个特殊的协议如TCP,UDP,ICMP等等。所以扩展ACL的功能比标准ACL的功能要强!
那么如何定义标准或者是扩展ACL呢?
ACL的定义可以分为两类:1 使用数字号码范围来定义 2 使用名字来定义
1 使用数字号码范围定义:
标准ACL的范围是1-99 ,扩展范围1300-1999
扩展ACL范围是100-1999,扩展范围2000-2699
在此为什么使用扩展范围呢,主要是因为现在的网络规模和网络的复杂性都在增加,原来的号码范围可能已经不能满足需要,所以推出扩展范围。
2 使用名字来定义
我们前面所介绍的标准ACL还是扩展ACL有一个使用起来很不方便的地方,就是如果在设置ACL的时候,如果发现中间有某个设置的不正确,希望删除某一条,是做不到的,那么就可以使用命名ACL,可以为每个ACL定义一个形象的名字。好处是可以对ACL中的每一个具体的规则进行处理,但如果是使用数字的话,只能是删除全部规则,不能删除其中一个规则。这样的话在大型网络中就不是很方便,而使用命名ACL可以解决这个问题:语法也很简单:
(config)# ip access-list extended/standared dufei 注意:标准和扩展都可以创建命名ACL
然后在创建规则:如
Permit 10.10.10.10 0.0.0.0
Perimit 20.20.20.20. 0.0.0.0
Deny 30.30.30.30 0.0.0.0
那如果我们希望删除其中一个如 第一个,则使用 no permit 10.10.10.10 0.0.0.0即可,其他的仍然存在。
访问控制列表还涉及到一个进站和出站的问题,也就是数据包的流向是进方向还是出方向。当然是进还是出要看具体情况,有的时候可以应用在任何一个上面。有的时候就必须唯一确定。
我们看一下出站方向上的ACL应用,我们还是从一个图入手,如下图所示:
▲ ACL应用
分析:
1 数据包通过入站接口进入路由器,此时开始查找路由表中是否有匹配的路由条目,如果 没有,则直接将其丢弃。这一步和ACL还没有任何关系,只是没有相应路由,就无法转发数据包,所以在此也需要说明一点,ACL也必须在数据包能够被路由的基础之上才起作用。
2 如果路由表中有相应的路由条目才被路由到一个相应的接口上。
3 查看该接口是否有ACL的配置,如果没有则立即被转发,如果设置了ACL,则检查该数据包是否匹配ACL规则。如果匹配并规则中明确该数据包可以正常转发。否则丢弃!注意:如果ACL测试规则中没有明确指定数据包通过,则说明此数据包没有与相关的规则匹配,那么还有一个隐含的规则就是deny all,这一点和微软的ISA是一样的,安装好防火墙就有一个默认规则拒绝一切,可以说是“六亲不认”!
下面咱们就来细说一下ACL规则测试,如下图:
▲ ACL 规则
如图所示,在ACL中可以有多个规则。如图:假设在ACL中有三个明确规则,则数据包进入后首先匹配第一个规则,如果数据包匹配该规则并设置为permit,则数据包被转发,如果数据包也匹配该规则,但却被设置为deny,则数据包直接被丢弃。
如果第一个规则不匹配则该数据包继续向前走,此时再检查是否匹配第二个规则,如果匹配并设置为permit,则该数据包被转发,如果匹配但被设置为deny则被丢弃。
如果第二个规则也不匹配则继续向前走,此时遇到第三个规则,同时还是检查是否匹配,如果匹配并设置为permit,同样也可以被转发,如果被设置为deny,则被丢弃。如果第三个是规则是最后一个,该数据包都没有匹配,
注意:1 规则最后千万不要忘记还有一个隐含规则:Deny ALL!!!
2 在此还需要注意,Cisco的ACL规则完全是按照规则编写的顺序进行的。所以最精确的规则应当写在最上方,否则将被大范围的规则所覆盖而导致设置失效。如拒绝一台主机访问外网,必须先写拒绝这一台,然后再写运行所有,那如果顺序错了,运行所有在上面,拒绝一台在下面,系统会检查一个数据包,发现任何一个数据包都可以通过,就直接转发了,下面的一条就不起作用了!
3 必须先创建ACL,再应用到相应的接口上
4 ACL不能过滤路由器自己产生的数据。
ACL理论东西没有太多,也很简单,下面咱们来看一下标准控制列表的配置过程,其实不论是标准还是扩展ACL的配置主要就是两个命令
1 设置访问控制列表
Router(config)# access-list acl_number permit|deny {}
2 在接口上应用访问控制列表,
Ip access-group acl_number in|out
这里可以是某个接口,也可以是VTY,Qos等应用中。其中in代表是入站方向,out代表的是出站方向。
那么标准ACL就显得更简单了,如:
Access-list acl_number {permit|deny} source [mask]
其中 acl_number 指的是ACL编号范围:1-99或1300-1999
Permit 表示 通过
Deny 表示 拒绝
Source 代表的是源地址,可以是某一个主机或是一个网段
Mask 掩码,但需要注意的是ACL支持的是反掩码,所以在设置的时候一定要注意。
但我们有时候可能会在source前面加上host或是any,这又是什么用意呢?
Host不是必须的,但是当匹配一个特定的主机地址时是非常有用的。也就是使用host的时候是匹配的某一个具体的主机,是一个精确匹配,此时的反掩码则0.0.0.0
如:
1 Access-list 10 permit 10.10.10.0 0.0.0.255 表示的是一个网段10.10.10.0,表示匹配该网段的所有数据报文。
2 access-list 10 permit 10.10.10.10 0.0.0.0 表示匹配源地址是10.10.10.10这一个具体的主机,这个语句可以写成 access-list 10 permit host 10.10.10.10
Any 也不是必须的,但是如果是匹配所有报文时是非常有用的,表示匹配所有的地址,是0.0.0.0 255.255.255.255的简写
如:
Access-list 10 permit 0.0.0.0 255.255.255.255 表示所有数据包通过,此语句可以写成:
Access-list 10 permit any