CISCO访问控制列表 企业网络管理的必杀技

ACL(Access Control List,访问控制列表)
技术从来都是一把双刃剑,网络应用与互联网的普及在大幅提高企业的生产经营效率的同时,也带来了诸如数据的安全性,员工利用互联网做与工作不相干事等负面影响。如何将一个网络有效的管理起来,尽可能的降低网络所带来的负面影响就成了摆在网络管理员面前的一个重要课题。
  A公司的某位可怜的网管目前就面临了一堆这样的问题。A公司建设了一个企业网,并通过一台路由器接入到互联网。在网络核心使用一台基于IOS的多层交换机,所有的二层交换机也为可管理的基于IOS的交换机,在公司内部使用了VLAN技术,按照功能的不同分为了6个VLAN。分别是网络设备与网管(VLAN1,10.1.1.0/24)、内部服务器(VLAN2)、Internet连接(VLAN3)、财务部(VLAN4)、市场部(VLAN5)、研发部门(VLAN6),出口路由器上Fa0/0接公司内部网,通过s0/0连接到Internet。每个网段的三层设备(也就是客户机上的缺省网关)地址都从高位向下分配,所有的其它节点地址均从低位向上分配。该网络的拓朴如下图所示:


自从网络建成后麻烦就一直没断过,一会儿有人试图登录网络设备要捣乱;一会儿领导又在抱怨说互联网开通后,员工成天就知道泡网;一会儿财务的人又说研发部门的员工看了不该看的数据。这些抱怨都找这位可怜的网管,搞得他头都大了。那有什么办法能够解决这些问题呢?答案就是使用网络层的访问限制控制技术――访问控制列表(下文简称ACL)。
那么,什么是ACL呢?ACL是种什么样的技术,它能做什么,又存在一些什么样的局限性呢?
ACL的基本原理、功能与局限性
  网络中常说的ACL是Cisco IOS所提供的一种访问控制技术,初期仅在路由器上支持,近些年来已经扩展到三层交换机,部分最新的二层交换机如2950之类也开始提供ACL的支持。只不过支持的特性不是那么完善而已。在其它厂商的路由器或多层交换机上也提供类似的技术,不过名称和配置方式都可能有细微的差别。本文所有的配置实例均基于Cisco IOS的ACL进行编写。
基本原理:ACL使用包过滤技术,在路由器上读取第三层及第四层包头中的信息如源地址、目的地址、源端口、目的端口等,根据预先定义好的规则对包进行过滤,从而达到访问控制的目的。
功能:网络中的节点资源节点和用户节点两大类,其中资源节点提供服务或数据,用户节点访问资源节点所提供的服务与数据。ACL的主要功能就是一方面保护资源节点,阻止非法用户对资源节点的访问,另一方面限制特定的用户节点所能具备的访问权限。
配置ACL的基本原则:在实施ACL的过程中,应当遵循如下两个基本原则:
u 最小特权原则:只给受控对象完成任务所必须的最小的权限
u 最靠近受控对象原则:所有的网络层访问权限控制
局限性:由于ACL是使用包过滤技术来实现的,过滤的依据又仅仅只是第三层和第四层包头中的部分信息,这种技术具有一些固有的局限性,如无法识别到具体的人,无法识别到应用内部的权限级别等。因此,要达到end to end的权限控制目的,需要和系统级及应用级的访问权限控制结合使用。

ACL配置技术详解
“说那么多废话做什么,赶快开始进行配置吧。”,A公司的网管说。呵呵,并不是我想说那么多废话,因为理解这些基础的概念与简单的原理对后续的配置和排错都是相当有用的。说说看,你的第一个需求是什么。
“做为一个网管,我不期望普通用户能telnet到网络设备”――ACL基础
“补充一点,要求能够从我现在的机器(研发VLAN的10.1.6.66)上telnet到网络设备上去。”。hamm,是个不错的主意,谁都不希望有人在自己的花园中撤野。让我们分析一下,在A公司的网络中,除出口路由器外,其它所有的网络设备段的是放在Vlan1中,那个我只需要在到VLAN 1的路由器接口上配置只允许源地址为10.1.6.66的包通过,其它的包通通过滤掉。这中只管源IP地址的ACL就叫做
标准IP ACL:
我们在SWA上进行如下的配置:
access-list 1 permit host 10.1.6.66
access-list 1 deny any
int vlan 1
ip access-group 1 out
这几条命令中的相应关键字的意义如下:
access-list:配置均ACL的关键字,所有的ACL均使用这个命令进行配置。
access-list后面的1:ACL号,ACL号相同的所有ACL形成一个组。在判断一个包时,使用同一组中的条目从上到下逐一进行判断,一遇到满足的条目就终止对该包的判断。1-99为标准的IP ACL号,标准IP ACL由于只读取IP包头的源地址部分,消耗资源少。
permit/deny:操作。Permit是允许通过,deny是丢弃包。
host 10.1.6.66/any:匹配条件,等同于10.1.6.66 0.0.0.0。刚才说过,标准的ACL只限制源地址。Host 10.1.6.66(10.1.6.66 0.0.0.0)的意思是只匹配源地址为10.1.6.66的包。0.0.0.0是wildcards,某位的wildcards为0表示IP地址的对应位必须符合,为1表示IP地址的对应位不管是什么都行。简单点说,就是255.255.255.255减去子网掩码后的值,0.0.0.0的wildcards就是意味着IP地址必须符合10.1.6.66,可以简称为host 10.1.6.66。any表示匹配所有地址。
注意:IOS中的ACL均使用wildcards,并且会用wildcards对IP地址进行严格的对齐,如你输入一条access-list 1 permit 10.1.1.129 0.0.0.31,在你show access-list看时,会变成access-list 1 permit 10.1.1.128 0.0.0.31,PIXOS中的ACL均使用subnet masks,并且不会进行对齐操作。更为详细的关于IP V4地址的资料可以参见拙著《IP v4基础知识》[url]http://www.ultratechnology.net/showarticle.php?s=&articleid=60[/url] 一文
int vlan1///ip access-group 1 out:这两句将access-list 1应用到vlan1接口的out方向。其中1是ACL号,和相应的ACL进行关联。Out是对路由器该接口上哪个方向的包进行过滤,可以有in和out两种选择。
注意:这里的in/out都是站在路由器或三层模块(以后简称R)上看的,in表示从该接口进入R的包,out表示从该接口出去的包。
好了,这就是一个最基本的ACL的配置方法。什么,你说普通用户还能telnet到RTA?那你在int vlan3上现加一个ip access-group 1 out吧。Hammmm,等等,你这样加上去普通用户就访问不了internet了。让我们把刚才的ACL去掉,重新写一个。
回忆一下,我们的目的是除了10.1.6.66能够进行telnet操作外,其它用户都不允许进行telnet操作。刚才我们说过,标准的IP ACL只能控制源IP地址,不能控制到端口。要控制到第四层的端口,就需要使用到:
扩展的IP ACL的配置
先看看配置实例吧。在SWA上进行如下配置:
int vlan 1
no ip access-group 1 out
exit
no access-list 1
access-list 101 permit tcp host 10.1.6.66 any eq telnet
access-list 101 deny tcp any any eq telnet
int vlan 1
ip access-group 101 out
int vlan 3
ip access-group 101 out
你应该注意到到这里的ACL有一些变化了,现在对变化的部分做一些说明:
access-list 101:注意这里的101,和刚才的标准ACL中的1一样,101是ACL号,表示这是一个扩展的IP ACL。扩展的IP ACL号范围是100-199,扩展的IP ACL可以控制源IP、目的IP、源端口、目的端口等,能实现相当精细的控制,扩展ACL不仅读取IP包头的源地址/目的地址,还要读取第四层包头中的源端口和目的端口,的IP在没有硬件ACL加速情况下,会消耗大量的CPU资源。
int vlan 1///no ip access-group 1 out///exit///no access-list 1:取消access-list 1,对于非命名的ACL,可以只需要这一句就可以全部取消。注意,在取消或修改一个ACL前,必须先在它所应用的接口上先把应用给no掉,否则会导致相当严重的后果。
tcp host 10.1.6.66 any eq telnet:匹配条件。完整格式为:协议 源地址 源wildcards [关系] [源端口] 目的地址 目的wildcards [关系] [目的端口]。其中协议可以是IP、TCP、UDP、EIGRP等,[]内为可选字段。仅在协议为tcp/udp等具备端口号的协议才有用。关系可以是eq(等于)、neq(不等于)、lt(大于)、range(范围)等。端口一般为数字的1-65535,对于周知端口,如23(服务名为telnet)等可以用服务名代替。源端口和目的端口不定义时表示所有端口。
把这个ACL应用上去后,用户们开始打电话来骂娘了,因为他们都访问不了Internet了,是哪里出了问题了呢?
注意:所有的ACL,缺省情况下,从安全角度考虑,最后都会隐含一句deny any(标准ACL)或deny ip any any(扩展IP ACL)。所以在不了解业务会使用到哪些端口的情况下,最好在ACL的最后加上一句permit ip any any,在这里就是access-list 101 permit ip any any。
现在用户倒是能够访问Internet了,但我们的可怜的网管却发现普通用户还是能够telnet到他的SWA上面,因为SWA上面有很多个网络接口,而且使用扩展的ACL会消耗很多的资源。有什么简单的办法能够控制用户对网络设备的Telnet访问,而又不消耗太多的资源呢?这就需要使用到:
对网络设备自身的访问如何进行控制的技术
让我们先把刚才配置的ACL都取掉(具体配置略,不然后读者会以为我在骗稿费了。),再在每台网络设备上均进行如下配置:
access-list 1 permit host 10.1.6.66
line vty 0 4(部分设备是15)
access-class 1 in
这样就行了,telnet都是访问的设备上的line vty,在line vty下面使用access-class与ACL组进行关联,in关键字表示控制进入的连接。
就这么简单?wk,你丫是不是在玩我们,为什么还要绕一大圈?臭鸡蛋和烂西红柿开始在70的脑袋上方狂飞。(5555555,偶也只是想向大家把ACL的基础知识讲的明白一些的嘛)。经过刚才的配置,我们可以理出一个简单的ACL配置步骤了:
u 分析需求,找清楚需求中要保护什么或控制什么;为方便配置,最好能以表格形式列出。在本文的后面会举例的。
u 分析符合条件的数据流的路径,寻找一个最适合进行控制的位置;
u 书写ACL,并将ACL应用到接口上;
u 测试并修改ACL。
当A公司的领导知道在网管能够控制普通用户对网络设备的访问后,我们的可怜的网管就收到了很多看起来很难的要求。领导要求网管:
“使用ACL技术对网络访问进行精细化控制”――ACL进阶配置
命名的IP ACL
由于最近服务器网段的机器老是被人用telnet、rsh等手段进行***,我们只对员工开放web服务器(10.1.2.20)所提供的http、FTP服务器(10.1.2.22)提供的FTP服务和数据库服务器(10.1.2.21:1521)。好吧,我们着手进行配置,可是我们的ACL刚写到一半,发现前面写的几句好像有问题,一个no命令输进去,整个ACL都没了,唉,一切都得重来,难道就没有一个变通的办法么?有,这里我就需要用到:
命名的IP acl提供的两个主要优点是:
l 解决ACL号码不足的问题。
l 可以自由的删除ACL中的一条语句,而不必删除整个ACL。
命名的ACL的主要不足之处在于无法实现在任意位置加入新的ACL条目。比如上面那个例子中,我们进行了如下的配置:
ip access-list extend server-protect
permit tcp 10.1.0.0 0.0.255.255 host 10.1.2.20 eq www
permit tcp 10.0.0.0 0.0.255.255 host 10.1.2.21 eq 1521
permit tcp 10.1.0.0 0.0.255.255 host 10.1.2.22 eq ftp
配置到这里,我们发现permit tcp 10.0.0.0 0.0.255.255 host 10.1.2.21 eq 1521这句配错了,我们得把它给取掉并重新配置,OK,我样可以简单的进行如下配置:
ip access-list extend server- protect
no permit tcp 10.0.0.0 0.0.255.255 host 10.1.2.21 eq 1521
permit tcp 10.1.0.0 0.0.0.255 host 10.1.2.21 eq 1521
exit
int vlan 2
ip access-group server- protect
就可以了。现在对命名的IP access-list的配置方法解释如下:
ip access-list extend server-access-limit:ip access-list相当于使用编号的access-list中的access-list段。extend表明是扩展的ACL(对应地,standard表示标准的ACL)。server-access-limit是access-list的名字,相当于基于编号的ACL中的编号字段。
permit tcp 10.1.6.0 0.0.0.255 host 10.1.2.21 eq 1521:这一段和使用编号的access-list的后半段的意义相同,都由操作和条件两段组成。
其实基于名字的IP ACL还有一个很好的优点就是可以为每个ACL取一个有意义的名字,便于日后的管理与维护。所以Ultra工作室强烈建议各位看官在实际工作中均使用命名的ACL。
进一步完善对服务器数据的保护――ACL执行顺序再探讨
在服务器网段中的数据库服务器中存放有大量的市场信息,市场部门的人员不希望研发部门访问到数据库服务器,经过协商,同意研发部门的领导的机器(IP地址为10.1.6.33)可以访问到数据库服务器。这样,我们的服务器网段的的访问权限部分如下表所示:
协议
源地址
源端口
目的地址
目的端口
操作

TCP
10.1/16
所有
10.1.2.20/32
80
允许访问

TCP
10.1/16
所有
10.1.2.22/32
21
允许访问

TCP
10.1/16
所有
10.1.2.21/32
1521
允许访问

TCP
10.1.6/24
所有
10.1.2.21/32
1521
禁止访问

TCP
10.1.6.33/32
所有
10.1.2.21/32
1521
允许访问

IP
10.1/16
N/A
所有
N/A
禁止访问
于是,网管就在server-protect后面顺序加了两条语句进去,整个ACL变成了如下形式:
ip access-list extend server-protect
permit tcp 10.1.0.0 0.0.255.255 host 10.1.2.20 eq www
permit tcp 10.1.0.0 0.0.255.255 host 10.1.2.21 eq 1521
permit tcp 10.1.0.0 0.0.255.255 host 10.1.2.22 eq ftp
deny tcp 10.1.6.0 0.0.0.255 host 10.1.2.21 eq 1521
permit tcp host 10.1.6.33 host 10.1.2.21 eq 1521
做完之后发现根本没起到应有的作用,研发部门的所有机器还是可以访问到数据库服务器。这是为什么呢?
前面我们提到过,ACL的执行顺序是从上往下执行,一个包只要遇到一条匹配的ACL语句后就会停止后续语句的执行,在我们的这个ACL中,因为前面已经有了一条permit tcp 10.1.0.0 0.0.255.255 host 10.1.2.21 eq 1521语句。内部网上所有访问10.1.2.21的1521端口的在这儿就全部通过了,跟本不会到后面两句去比较。所以导致达不到我们的目的。应该把server-protect这个ACL按如下形式进行修改才能满足我们的要求:
ip access-list extend server-protect
permit tcp host 10.1.6.33 host 10.1.2.21 eq 1521
deny tcp 10.1.6.0 0.0.0.255 host 10.1.2.21 eq 1521
permit tcp 10.1.0.0 0.0.255.255 host 10.1.2.21 eq 1521
permit tcp 10.1.0.0 0.0.255.255 host 10.1.2.20 eq www
permit tcp 10.1.0.0 0.0.255.255 host 10.1.2.22 eq ftp
这个例子告诉我们在写ACL时,一定要遵循最为精确匹配的ACL语句一定要写在最前面的原则,只有这样才能保证不会出现无用的ACL语句。
基于时间的ACL
在保证了服务器的数据安全性后,领导又准备对内部员工上网进行控制。要求在上班时间内(9:00-18:00)禁止内部员工浏览internet,禁止使用QQ、MSN。而且在2003年6月1号到2号的所有时间内都不允许进行上述操作。但在任何时间都可以允许以其它方式访问Internet。天哪,这可叫人怎么活呀,但领导既然这样安排,也只好按指示做了。
首先,让我们来分析一下这个需求,浏览internet现在基本上都是使用http或https进行访问,标准端口是TCP/80端口和TCP/443,MSN使用TCP/1863端口,QQ登录会使用到TCP/UDP8000这两个端口,还有可能使用到udp/4000进行通讯。而且这些软件都能支持代理服务器,目前的代理服务器主要布署在TCP 8080、TCP 3128(HTTP代理)和TCP1080(socks)这三个端口上。这个需求如下表所示:
应用
协议
源地址
源端口
目的地址
目的端口
操作

IE
TCP
10.1/16
所有
所有
80
限制访问

IE
TCP
10.1/16
所有
所有
443
限制访问

MSN
TCP
10.1/16
所有
所有
1863
限制访问

QQ
TCP
10.1/16
所有
所有
8000
限制访问

QQ
UDP
10.1/16
所有
所有
8000
限制访问

QQ
UDP
10.1/16
所有
所有
4000
限制访问

HTTP代理
TCP
10.1/16
所有
所有
8080
限制访问

HTTP代理
TCP
10.1/16
所有
所有
3128
限制访问

Socks
TCP
10.1/16
所有
所有
1080
限制访问

All other
IP
10.1/16
N/A
所有
N/A
允许访问
然后,让我们看看ACL应该在哪个位置配置比较好呢?由于是对访问Internet进行控制,涉及到的是公司内部所有的网段,这们这次把ACL就放到公司的Internet出口处。在RTA上进行如下的配置,就能够满足领导的要求了:
time-range TR1
absolute start 00:00 1 June 2003 end 00:00 3 June 2003
periodic weekdays start 9:00 18:00
exit
ip access-list extend internet_limit
deny tcp 10.1.0.0 0.0.255.255 any eq 80 time-range TR1
deny tcp 10.1.0.0 0.0.255.255 any eq 443 time-range TR1
deny tcp 10.1.0.0 0.0.255.255 any eq 1863 time-range TR1
deny tcp 10.1.0.0 0.0.255.255 any eq 8000 time-range TR1
deny udp 10.1.0.0 0.0.255.255 any eq 8000 time-range TR1
deny udp 10.1.0.0 0.0.255.255 any eq 4000 time-range TR1
deny tcp 10.1.0.0 0.0.255.255 any eq 3128 time-range TR1
deny tcp 10.1.0.0 0.0.255.255 any eq 8080 time-range TR1
deny tcp 10.1.0.0 0.0.255.255 any eq 1080 time-range TR1
permit ip any any
int s0/0
ip access-group internet_limit out
或int fa0/0
ip access-group internet_limit in
或者将ACL配置在SWA上,并
int vlan 3
ip access-group internet_limit out
呵呵,现在让我们来看看在基于时间的访问列表中都有哪些新内容吧:
time-range TR1:定义一个新的时间范围,其中的TR1是为该时间范围取的一个名字。
absolute:为绝对时间。只使用一次。可以定义为1993-2035年内的任意一个时点。具体的用法请使用?命令查看。
Periodic:为周期性重复使用的时间范围的定义。完整格式为periodic 日期关键字 开始时间结束时间。其中日期关键字的定义如下所示:
Monday 星期一
Tuesday 星期二
Wednesday 星期三
Thursday 星期四
Friday 星期五
Saturday 星期六
Sunday 星期天
daily 每天
weekdays 周一至五
weekend 周末
access-list 101 deny ip 10.1.0.0 0.0.255.255 any time-range TR1:注意这一句最后的time-range TR1,使这条ACL语句与time-range TR1相关联,表明这条语句在time-range TR1所定义的时间范围内才起作用。
注意:给出三种配置位置是帮助大家深刻理解关于in/out的区别的。acl是对从一个接上流入(in)或流出(out)路由器的包进行过滤的。
网管发问了,“你是怎么找到这些应用的所使用的端口的?”。呵呵,在如下文件中可以找到大多数应用的端口的定义:
Win9x:%windir%\services
WinNT/2000/XP:%windir%\system32\drivers\etc\services
Linux:/etc/services
对于在services文件中找不到端口的应用,可以在运行程序的前后,运行netstat –ap来找出应用所使用的端口号。
使用IP ACL实现单向访问控制
A公司准备实行薪资的不透明化管理,由于目前的薪资收入数据还放在财务部门的Vlan中,所以公司不希望市场和研发部门能访问到财务部Vlan中的数据,另一方面,财务部门做为公司的核心管理部门,又希望能访问到市场和研发部门Vlan内的数据。我们的网管在接到这个需求后就在SWA上做了如下的配置:
ip access-list extend fi-access-limit
deny ip any 10.1.4.0 0.0.0.255
permit ip any any
int vlan 5
ip access-group fi-access-limit in
int vlan 6
ip access-group fi-access-limit in
配置做完后,测试了一下,市场和研发部门确实访问不到财务部了,刚准备休息一下,财务部打电话过来说为访问不到市场与研发部门的数据了。这是怎么回事呢?
让我们回忆一下,在两台主机A与B之间要实现通讯,需要些什么条件呢?答案是既需要A能向B发包,也需要B能向A发包,任何一个方向的包被阻断,通讯都不能成功,在我们的例子中就存在这样的问题,财务部访问市场或研发部门时,包到到市场或研发部门的主机,由这些主机返回的包在到达路由器SWA时,由于普通的ACL均不具备检测会话状态的能力,就被deny ip any 10.1.4.0 0.0.0.255这条ACL给阻断了,所以访问不能成功。
要想实现真正意义上的单向访问控制应该怎么办呢?我们希望在财务部门访问市场和研发部门时,能在市场和研发部门的ACL中临时生成一个反向的ACL条目,这样就能实现单向访问了。这里就需要使用到反向ACL技术。我们可以按照如下配置实例就可以满足刚才的那个单向访问需求:
ip access-list extend fi-main
permit tcp any 10.1.0.0 0.0.255.255 reflect r-main timeout 120
permit udp any 10.1.0.0 0.0.255.255 reflect r-main timeout 200
permit icmp any 10.1.0.0 0.0.255.255 reflect r-main timeout 10
permit ip any any
int vlan 4
ip access-group fi-main in
ip access-list extend fi-access-limit
uate r-main
deny ip any 10.1.4.0 0.0.0.255
permit ip any any
int vlan 5
ip access-group fi-access-limit in
int vlan 6
ip access-group fi-access-limit in
现在对反向ACL新增加的内容一一解释如下:
n 新增了一个ACL(fi-main)并应用在具备访问权限的接口下(财务部所在的vlan4)的in方向,使用该acl中具备reflect关键字的acl条目来捕捉建立反向ACL条目所需要的信息。我们将该ACL称为主ACL。
n reflect r-main timeout xxx:其中的reflect关键字表明该条目可以用于捕捉建立反向的ACL条目所需要的信息。r-main是reflect组的名字,具备相同reflect组名字的所有的ACL条目为一个reflect组。timeout xxx表明由这条ACL条目所建立起来的反向ACL条目在没有流量的情况下,多长时间后会消失(缺省值为300秒),单位为秒。
n uate r-main:我们注意到在fi-access-limit(我们把它称为反ACL)增加了这样一句,这一句的意思是有符合r-main这个reflect组中所定义的acl条目的流量发生时,在uate语句所在的当前位置动态生成一条反向的permit语句。
反向ACL的局限性:
n 必须使用命名的ACL,其实这不能叫局限性,应该算注意事项吧;
n 对多通道应用程序如h323之类无法提供支持。
好了,到现在我们从IP ACL的基础知识讲起,中间讲述了标准的IP ACL、扩展的IP ACL、基于名字的ACL、基于时间的ACL、反向ACL等诸多内容,这些ACL在ios的基本IP特性集中都能提供支持,在一般的企业网或校园网中也应该完全够用了。如果各位看官还需要了解更加深入的知识,如CBAC之类能够为多通道应用程序提供良好支持的配置技术的,请参考《Cisco IOS Security Configuration Guide,Part 3: Traffic Filtering and Firewalls》。
“站住!”,70正想开溜,只听那网管一声大吼,“有什么办法能知道ACL都过滤了从哪儿来,到哪儿去的流量??”。呵呵,刚才忘记说了,你只需要在需要记录的acl条目的最后加一个log关键字,这样在有符合该ACL条目数据包时,就会产生一条日志信息发到你的设备所定义的日志服务器上去。谢谢大家的捧场,本文到此为止

 

访问控制列表 企业网络管理的必杀技(一)

大部分企业现在存在一种状况,就是网络访问无序的状态。如所有公司的员工都可以随意反问财务部门的电脑;如在开集团的视频会议的时候,其他员工下载电影或者游戏浪费了宝贵的带宽,导致视频会议不怎么连贯;如为了管理的方便,大开Telnet端口,对于这个威胁视若无睹,等等。其实,对于这些问题,都可以通过访问控制列表来实现。笔者将通过一系列的文章,来跟大家分享访问控制列表的使用方法与使用技巧,跟大家一起利用访问控制列表来提高网络的管理。

  我们在企业日常网络的管理中,经常会遇到一些进退两难的问题。如我们即要保障网络点畅通,同时,也必须设法拒绝那些不希望的网络连接。虽然,我们也可以通过其他的一些方式,如密码、权限、虚拟局域网等功能实现这些目的,但是,他们的管理往往是单一的,也就是说,只能实现一些独立的管理功能,或者缺乏管理的灵活性。而访问控制列表,则给我们网络管理员提供了一个网络控制的平台。他就好象一个连通两个国家的边关要地,我们可以根据各种需要,允许某些人通过,而其他人则不允许,或者说有些人可以自由无阻的在两个国家内通行,而有些人则必须凭证件才能够通行;如当道路繁忙时,我们可以设置哪些人具有优先通行权;如我们可以设置每天的通行数量,等等。

  这个访问控制列表是路由器上的一个服务,他结合路由器的基本功能,来实现对于访问流量的过滤与控制。实际上,访问控制列表就是一串连续的语句的集合,这些语句定义了哪些流量可以通过,哪些不可以通过;同时也定义了哪些流量具有优先性等等。

  具体的来说,访问控制列表可以起到如下作用:

  1、 可以限制员工对外部网络的有限访问

  若在企业内网与外网的接口处,部署路由器的访问控制列表的话,则可以决定哪种类型的通信流量杯转发、哪些类型的通信流量被禁止等等。例如,我们可以允许只有Email的通信流量被允许,而其他类型的通信流量都会被路由器所禁止。根据这个控制规则,则就可以限制用户内与外部网络的访问,只允许员工接收外部邮件,而不能进行其他的网络访问。通过类似的规则,还可以限制员工访问外部的WEB服务器(禁止浏览网页)、限制员工访问FTP服务器(不允许像外部的FTP服务器上传公司内部的资料,从而保护企业内部信息安全)、限制员工使用BT下载工具(BT工具由于其又是下载工具又是一个上载的服务器,会占用比较大的带宽,所以,应该禁止使用),等等。总之,若把带有访问控制列表的路由器部署在企业内网与外网的接口上,网络管理员就可以根据协议、端口、IP地址等等各种参数以及相互的结合来对员工的网络行为进行管理控制。

 

访问控制列表 企业网络管理的必杀技(二)

案例一:拒绝某个IP地址访问互联网

  现在某个企业的网络拓扑结构大致如下:

   

图2


    
    公司的网络结构比较简单,一台路由器连接交换机,然后再连接终端电脑,路由器作为企业内网与外网连接的通信口。现在的问题是,企业在网络管理员,可能需要限制某些IP地址,他们不能够访问互联网。但是,他们可以访问连接在路由器上的服务器。针对企业的这种需求,访问控制列表该如何实现呢?下面我们就以拒绝一个IP地址为例,谈谈该如何设置访问控制列表,多个IP地址也是类似的道理。假设用户电脑的IP地址为192.168.0.10,我们现在需要拒绝这个IP地址访问互联网。

  首先,我们来看看访问控制列表的设置。

  Access-list 1 deny host 192.168.0.10 0.0.0.0

  Access-list 1 permit 0.0.0.0 255.255.255.255

  只要在路由器上配置这两条简单的访问控制列表语句,就可以达到限制192.168.0.10这个IP地址访问互联网。然后把这个访问控制列表关联到互联网的出站端口即可。

  在写以上的访问控制列表语句的时候,我们需要注意以下几点:

  1、要注意语句的顺序。我们在上篇文章中,谈到过访问控制列表其实就是各种允许或者拒绝语句的集合。不过,其还有一个特点,就是其是根据从上到下的语句来判断的。当第一个条件满足时,就不会去判断第二条语句。如现在有一个来自于192.168.0.10的数据包,他要发送到互联网上。则在路由器进行检查的时候,他从数据包中获得IP地址,然后根据这个IP地址来核对访问控制列表。当他看到访问控制列表中,第一条语句就是拒绝192.168.0.10这个IP地址访问互联网的话,则其就不会去判断第二条语句/。假设我们现在把第一条语句跟第二条语句进行对换的话,又会有什么结果发生呢?当路由器接到192.168.0.10发来的数据包,然后核对访问控制列表中的语句。而“Access-list 1 permit 0.0.0.0 255.255.255.255”这条语句的意思则是允许所有的IP地址从这个端口转发出去。也就是说,也允许来自于192.168.0.10的数据包从这个端口出去。而这一条语句满足的时候,第二条语句“Access-list 1 deny host 192.168.0.10 0.0.0.0”就不会被执行。此时,主机192.168.0.10就可以光明正大的访问互联网。这就达不到企业所期望的控制要求。所以,若访问控制列表中的语句顺序出现颠倒的话,则最后出现的结果可能是跟用户预先期待的会大相径庭。

  2、访问控制列表的名字是用数字来表示的。如上面语句中的1,就表示这是一号访问控制列表。把访问控制列表关联到具体的路由器端口时,也是利用这个数字进行关联。不过这里要注意一个潜规则。一般访问控制列表分为两类,一是标准访问控制列表,二是扩展的访问控制列表。为了管理的方便,一般1-99之间的数字用来表示是标准的访问控制列表。而100到199之间,就表示路由器将用扩展的访问控制列表条件来进行判断。一般在定义访问控制列表的时候,最好大家都要遵守这个规则。因为有时会,可能不仅一个网络管理员来管理路由器。

  3、访问控制列表配置四步走。虽然在官方的文档上,一般把访问控制列表的配置分成两步,不过,在实际工作中,笔者还是喜欢把他分为四个步骤,如此的话,可以减少错误的发生。第一步就是书写需求。从上面我们可以看出,访问控制列表就是一条条条件语句的集合,而且对于条件的顺序非常敏感。为此,我们在做访问控制列表之前,需要先对用户的需求进行整理,先在纸上对于各条判断语句做出顺序的调整。第二步先在路由器模拟器上进行测试。因为路由器的改动会影响整个网络的运行,所以,在对路由器进行任何调整之前,笔者的建议是现在路由器的模拟器上进行测试。像CISCO就提供了一些很好的路由模拟器,企业可以在这些模拟器上测试自己配置的准确性。第三步在路由器上写访问控制列表语句。当测试没有问题的时候,就把访问控制列表语句移植到路由器上。第四步把访问控制列表语句关联到特定的端口。在访问控制列表语句中,没有指定这个访问控制列表用于哪个端口。只有等访问控制列表完成后,把这个访问控制列表关联到特定的路由器端口,这个访问控制列表才会起作用。

4、访问控制列表建立之后,如果需要更改访问控制列表,该怎么办呢?如我们现在想让192.168.0.10这个Ip地址访问互联网,而是想禁止102.168.0.60这个IP地址。一般来说,用户是不能直接更改这个访问控制列表的,即使更改了也没有作用。而是必须先用命令删除整个访问控制列表,然后再重新建立并进行端口的关联。另外需要注意的是,没一条新建的条件语句都被安置在访问控制列表的最后面。还有就是,访问控制列表建立之后,若想通过行序号删除访问控制列表中的某条语句,也是不可以的。如在上面这个访问控制列表中,如果现在网络管理员加入“Access-list 1 deny host 192.168.0.60 0.0.0.0”这条条件语句。网络管理员原来的设想是同时拒绝192.168.0.10与192.168.0.60两台主机访问互联网络,可是,若在原有的访问控制列表中,加入语句的话,则会变为:

  Access-list 1 deny host 192.168.0.10 0.0.0.0

  Access-list 1 permit 0.0.0.0 255.255.255.255

  Access-list 1 deny host 192.168.0.60 0.0.0.0

  而根据我们上面所讲的访问控制列表时按先后顺序进行条件语句判断的,由于第二条语句是允许所有的IP地址访问互联网络,所以,第三条判断语句永远不会被执行。如此的话,就不能达到用户的目的。

  如果现在网络管理员想删除第二条语句,然后建一条“Access-list 1 permit 0.0.0.0 255.255.255.255”语句,如此,顺序不是对了吗?这个设想是好的,但是,访问控制列表时不能够通过行序号来删除某个行的条件语句。所以,如果用户需要新加条件语句时,一般只有删除原先的所有条件语句,然后重新建立。

  基于这个原因,所以,笔者不建议直接在路由器上编辑访问控制列表。而是现在网络管理的终端电脑上,利用记事本先编辑好访问控制列表,然后再利用TFTP(简单文本传输协议),把这访问控制列表移植到路由器上。如此的话,就可以提高访问控制列表编辑的效率,而且,通过简单的复制、粘贴还可以减少错误的发生。

  5、若有多台主机需要拒绝访问互联网,该如何处理呢?在企业网络的实际管理中,往往不是一台或者几台电脑不能访问互联网或者某个应用,而是某几个部门的电脑不能访问,如不能使用QQ等。遇到这种情况,若一个个的区制定IP地址,那显然会非常的麻烦。此时,我们可以考虑,把这些不能够访问互联网的电脑,对他们的IP地址尽心规划,划分成一个子网。然后再访问控制列表中,对子网进行过滤,而不是对IP地址进行过滤。如现在网络管理员希望对于192.168.4.0的子网进行管理,不允许他们访问互联网,但是访问内部网络是没有限制的。此时,我们就可以按照如下的规则书写访问控制列表。

  Access-list 1 deny host 192.168.4.0 0.0.0.255

  Access-list 1 permit 0.0.0.0 255.255.255.255

  如此的话,只要数据包的IP地址属于这个子网的,则路由器就会拒绝这些数据包通过其互联网接口进行转发。现在利用子网来进行过滤的话,我们只用了一条条件语句;而我们若利用单个IP地址来过滤的话,则这个子网内有多少主机就需要书写多少条条件语句。而且,灵活性也很差。如以后我们还需要指定某些IP地址不能访问互联网的话,还必须对访问控制列表进行调整。而我们若通过子网的形式进行过滤的话,以后遇到这种需求,只需要把用户的电脑归入到这个子网内,如此的话,在不调整原有访问控制列表的情况下,也可以实现企业的网路管理需求。这明显比按单个IP地址来进行过滤,要方便的多。

  上面笔者讲述的是按IP地址或者子网来进行网络过滤。不过,这有一个比较大的缺陷,这个过滤是“一棒子打死”的过滤方法。也就是说,根据IP地址过滤的话,则会过滤所有的网络流量。被访问控制列表列入黑名单的IP地址,不仅不能够使用QQ等被禁止的网络聊天工具,而且,也不能访问互联网的邮件等等。也就是说,不能根据协议的类型来管理网络流量。而后面笔者要举的扩展访问控制列表的例子,就可以满足企业根据协议对网络流量进行管理的需求。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章