网络通信 频道

实战秘籍:我和ACL的三次亲密接触(下)

  编者按:ACL网络访问控制是基本的网络命令,但如果深入应用,则可防止冲击波和振荡波等病毒,还能进行用户上网行为的管理,可谓是网管的致命武器。祥子对ACL由浅入深的应用感受,对大家极具参考价值。

  上篇:
  第一阶段:路由上用ACL来做NAT
  第二阶段:ACL也能防范冲击波和振荡波病毒?

  下篇:
  第三阶段:ACL限制非法用户接入:替代专业工具
  一、制作最简单的一个ACL
  二、两手都要抓的ACL
  三、允许、限制、再允许
  四、扩展的ACL
  五、以名字命名的ACL
  六、分时间段实行限制  第三阶段:
  ACL限制非法用户接入:替代专业工具

第三阶段:ACL限制非法用户接入:替代专业工具

  但是最近一段时间以来,祥子打算再好好的用一下ACL,为什么呢?因为祥子在单位中同时管理可以接入互联网的办公室(简称外网)和一个开展数字电视业务的业务网(简称内网),内网不同于外网,既要保持稳定性,还要防止网络的随意扩展,使网络始终处于可控和可管的状态,具体的说有两点,第一,限制交换机端口上允许通过的主机数量,只允许登记在册的主机通过,因为随意的主机接入会造成网络中病毒感染、数据损坏等种种不良后果,IP地址冲突还会造成服务器无法正常工作;第二,我们内网中有一台网络版杀毒软件的服务器,按照规定要求内网中每一台微机都要安装杀毒软件,所有没有安装杀毒软件的微机均不可接入内网,在杀毒软件服务器上我们可以看到每一台安装安装了客户端的软件的IP地址,那么没有安装的微机就不能接入内网,这也要在交换机上通过ACL来实现。

  这本来没有什么难度,但是祥子想借这个机会来好好学习一下在CISCO交换机上实现ACL的方法,下面是具体的学习,秉承着把别人教会是最好的学习方法的态度,祥子模拟了一个从易到难的学习过程,在外网的一台CISCO3550交换机上做了很多的实验,总算把ACL的应用大概摸清楚了。

  一、制作最简单的一个ACL

  先看一下我们实际的网络拓扑吧,如图1所示

  这就是我们本次的实验环境,由于是在一台外网的CISCO3550交换机上,所以PC1和PC2默认都是可以访问互联网,它们之间也是可以互相通讯的,PC1是接在交换机的第22端口上,PC2是接在交换机的第3端口上,本例要实现的功能是允许PC1以10.66.5.246这个地址上网,但是更换其它的IP地址都不可以上网,可以这样写访问控制列表:

  3550(config)#access-list 6 permit 10.66.5.246
  3550(config)#exit
  3550#show access-lists
  Standard IP access list 6
  permit 10.66.5.246
  3550#conf t
  Enter configuration commands, one per line.  End with CNTL/Z.
  3550(config)#inter fa0/22
  3550(config-if)#ip access-group 6 in

  将访问控制列表6应用到端口22以后,这个端口就可允许IP地址为10.66.5.246主机通过了,如果将PC1的IP地址改为10.66.6.246就肯定上不去网了,当这个实验做成了以后,祥子感觉到思路一下子被打通了,在数字电视内网中实现对相应主机的控制不就跟祥子以前在CISCO7507路由器上设置ACL实现哪些机器可以上网的方法一样吗?学东西什么叫通了,祥子的体会是在学习到的新知识和以前掌握的旧知识中能够建立起一个通道了,那就叫通了,现在方法已经找到,实现需求不是问题,那就趁热打铁把ACL再系统的学习一下吧。

 

  二、两手都要抓的ACL

  上例中我们写的ACL只是限制一个端口下连的网络中只有指定IP地址的主机可以上网,其实ACL还可以管的更宽,比如可以做到指定的主机只能与指定的目标网段的主机进行通讯,这需要用一个扩展的ACL来实现,写扩展的ACL祥子发现了一个规律,或者说是一个着眼点,那就是如何判断源地址和目标地址,其实祥子以前一直对这个事情很茫然,愚者千虑,并有一得,困惑了这么久,现在发现换个角度看这个问题就清楚了,那就是站在将要应用ACL的交换机的端口的角度上看源和目标,端口下面连接的网络(或主机)为源,对外的访问就是目标了,本例中这样写:

  3550(config)#access-list 106 permit ip any 192.168.1.0 0.0.0.255
  3550(config)#end
  3550#show access-lists
  Extended IP access list 106
  permit ip any 192.168.1.0 0.0.0.255
  3550#conf t
  Enter configuration commands, one per line.  End with CNTL/Z.
  3550(config)#inter fa0/22
  3550(config-if)#ip access-group 106 in

  将ACL106应用到端口22以后,PC1(22端口下所连的所有微机,因为我使用了一个“any”来代表所有的微机)就只能与位于端口3的PC2所在的网段(192.168.1/24)进行通讯了,我们也就通过扩展的ACL对于主机与外部网络的通讯作了更细化的限制。

  三、允许、限制、再允许

  我们可以假设一个在一个大办公室里,研发、客服、技术等几个部门在一块办公,当然也就是位于一个大的网段10.66/16这个网段里,在某一个特定的时期,研发部门的除了领导可以上网外(领导的IP为10.66.5.246,研发部的网段为10.66.5/24)其它员工都不能上网,但是客服和技术都可以上网,ACL就可以这样来写。
  3550(config)#access-list 2 permit 10.66.5.246
  3550(config)#access-list 2 deny 10.66.5.0 0.0.0.255
  3550(config)#access-list 2 permit 10.66.0.0 0.0.255.255
  3550(config)#inter fa0/22
  3550(config-if)#ip access-group 2 in
  有句话怎么来说的来,管而不死、活而不乱,这个ACL就是对这句话的很好的一个应用。

  四、扩展的ACL

  这个例子限制的就更细了,比如说PC2(192.168.1.249)上面运行着两个WWW服务,一个使用常规的80端口,另一个是使用的是8088端口,当然这两个端口发布的网页内容是不一样的,我们只希望PC1能够访问到PC2上面8088端口(也就是大于1023)的网页,还能够使用PC2上面运行的SMTP服务,并且为了保证在PC1不能使用其它服务的同时,PC1上还能够确认它的网络连接是正常的,我们允许它执行PING操作,ACL这样写:
  3550(config)#access-list 102 permit tcp any host 192.168.1.249 gt 1023
  3550(config)#access-list 102 permit tcp any host 192.168.1.249 eq 25
  3550(config)#access-list 102 permit icmp any any
  3550(config)#inter fa0/22
  3550(config-if)#ip access-group 102 in
  经过实验证明,效果确实如我们所设想的一样。
 

  五、以名字命名的ACL

  还记得以前祥子在管理ACL时,每一次要从ACL列表中删除一个IP地址时的紧张劲吗?其实利用以名字命令的ACL,我们可以方便的增加一个允许的操作,也可以方便的将其中的一个允许操作删除掉。比如我们下面的例子中,前期允许了10.66.5.246、10.66.6.246、10.66.7.246三台主机通过,但是由于某种原因,现在不允许10.66.7.246通过,我们来操作一下:
  3550(config)#ip access-list standard internet_filter
  3550(config-std-nacl)#permit 10.66.5.246
  3550(config-std-nacl)#permit 10.66.6.246
  3550(config-std-nacl)#permit 10.66.7.246
  3550(config-std-nacl)#end
  3550#show access-lists
  Standard IP access list internet_filter
  permit 10.66.6.246
  permit 10.66.7.246
  permit 10.66.5.246

  执行删除操作
  3550(config)#ip access-list standard internet_filter
  3550(config-std-nacl)#no permit 10.66.5.246
  3550(config-if)#end
  3550#show access-lists
  Standard IP access list internet_filter
  permit 10.66.6.246
  permit 10.66.7.246
  早知道ACL可以这样写,祥子当年就不会每次执行删除一个IP地址都会紧张的冒汗了。

  六、分时间段实行限制

  祥子的一位朋友在一家公司工作,和朋友聊天时了解到这家公司为了提高工作效率,防止员工过度使用互联网,用技术手段实现了早上10点至下午4点之间是不能访问互联网的,但是可以使用邮件,我一听觉得这个应用挺神奇,但是不知道是如何实现的,学习过ACL以后,发现通过ACL也可以使用这样的效果。我们的设想是fa0/22端口上所带的微机,0:00至10:00和16:00至23:59是可以浏览网页的,但是10:00至16:00之间(也就是主要的工作时间)是不允许浏览网页的,但是全天都是可以使用邮件的(也就是POP3和SMTP服务)。

  要求大概就是这样子的,但是祥子具体在做这个ACL的时侯却是一波三折的,这里又涉及到另外一个重要的问题,即作为网络管理员,在接到领导或用户对于网络管理的需求的进侯,一定要正确的将这个需求翻译成网络设备能够认可的语句,比如我们要实现办公用户在10:00至16:00这个时间段可以上网浏览网页,要做到第一,80端口要放开,我看到很多资料上都只写了这一条,但是只写这一条就可以了吗,真正应用后就会发现是上不去网的,只能通过输入网站的IP地址的方式才能上,为什么呢,因为上网还需要DNS(域名解析服务)啊,所以,第二,要开放DNS服务的53端口,第三,要知道DNS服务是UDP协议,第四,每一个permit语句以后都要跟time-range选项,这四项选一不可,而且,还要保证交换机上面时间的正确性(用show clock命令看一下时间,多半与现在的时间不符),结上所述,我们这个例子可以总结为交换机22端口下所带网络,只允许在工作日(星期一至五)的10:00至16:00访问网页,但是可以在0:00至23:59之间都可以使用邮件
  3550#show clock
  16:08:52.086 UTC Wed Sep 17 2008
  3550#conf t
  Enter configuration commands, one per line.  End with CNTL/Z.
  3550(config)#time-range allow-http
  3550(config-time-range)# periodic weekdays 16:00 to 23:59
  3550(config-time-range)# periodic weekdays 0:00 to 10:00
  3550(config-time-range)#end
  3550#conf t
  Enter configuration commands, one per line.  End with CNTL/Z.
  3550(config)#time-range allow-email
  3550(config-time-range)#periodic weekdays 0:00 to 23:59
  3550(config)#ip access-list extended strict
  3550(config-ext-nacl)#permit tcp any any eq smtp time-range allow-email
  3550(config-ext-nacl)#permit tcp any any eq pop3 time-range allow-email
  3550(config-ext-nacl)#permit tcp any any eq www time-range allow-http
  3550(config-ext-nacl)#permit udp any any eq domain time-range allow-http
  3550(config)#inter fa0/22
  3550(config-if)#ip access-group strict in
  3550#show access-list
  Extended IP access list strict
  permit tcp any any eq www time-range allow-http (active)
  permit udp any any eq domain time-range allow-http (active)
  permit tcp any any eq smtp time-range allow-email (active)
  permit tcp any any eq pop3 time-range allow-email (active)
  3550#show time-range
  time-range entry: allow-email (active)
  periodic weekdays 0:00 to 23:59
  used in: IP ACL entry
  used in: IP ACL entry
  time-range entry: allow-http (active)
  periodic weekdays 16:00 to 23:59
  periodic weekdays 0:00 to 10:00
  used in: IP ACL entry
  used in: IP ACL entry

  这个实验祥子是做了多次才成功的,当然失败一次就可以总结一次教训,为下一次的操作积累一些经验,当功夫下到的进侯,成功可能就不期而至了。作为网络管理员,面对复杂的网络环境,必须要勇于面对失败,同时要保持到成功的渴望,所谓从质变到量变,也可以理解为失败的次数必须累积到一定的程度,才可以达到成功的结果。
  当然在学习新知识的过程中也是有些小技巧的,祥子有次和同事聊天,说起自己学习CISOC设备配置命令的心得,好象都是看英文的文档学会的,同事说你的英语水平很高啊,其实祥子看那些英文文档时也是看得似懂非懂的,但是这种模糊感,为祥子对配置命令的理解留出了一定的空间。祥子学习新的配置命令的过程一般是这样的,先看电子版的文档,把与自己本次工作有关的章节选择,打印出来,再看一遍打印稿,然后拿一个铅笔,逐字逐行的进行翻译,就直接翻译到英文文档的空白处,当然很多地方翻译的不通顺,但是硬着头皮写,直到最后,然后再头到尾翻译,把前一次翻译的不通的地方修改一下,这个过程大概进行个两三遍,然后在新的稿纸上,根据自己实际的网络环境和网络设备,参照文档里面的例子设计自己的例子,当然设计的例子有成功的,有失败的,再多想想,或者参考一下中文文档或是上网查一下资料(这个过程因为有了前期的准备作为基础,可以做到以我为主,对于参考资料的学习就可以做到有的放矢),失败的例子可以下次再做时又成功了,通过这个过程,慢慢的就把新的配置命令学会了,而且还可以解决实际工作中的问题。

  七、为ACL作注释

  看着离一个完整的方案越来越近了,祥子心中感到一丝喜悦,但是觉得离一个完美的方案还缺点什么,那到底是什么呢?对了,是对ACL的注释,特别是对于对数字命名的ACL,即使是亲自写ACL的人,过一段时间也可能记不起来这个ACL是干什么的了,所以为ACL作注释是时常必要的,下面的ACL从功能上来说没什么特殊的地方,但是加上注释,一个是方便理解,二来是可以巩固我们对于ACL的认识。
  例一是允许10.66.5.246这台主机通过,但是拒绝10.66.6.246这台主机通过。
  3550#show run
  access-list 11 remark do not allow ywb6246 through
  access-list 11 deny   10.66.6.246
  access-list 11 remark permit only ywb5246 through
  access-list 11 permit 10.66.5.246

  这个例子当然很好验证了,但是朋友们也可能会问,那么没在ACL中出现的同一网段内的其它主机,它们是怎么样呢?是被允许通过,还是被拒绝通,还是靠实验来说话吧,实验的结果是没有在ACL中被“permit”的主机,一概被拒绝了,即隐含了一句deny any any。

  例二是不允许10.66.5/24这个网段向外telnet,但是允许10.66.7/24这个网段向外telnet。
  ip access-list extended telnetting
  remark do not allow 10.66.5/24 subnet to telnet out
  deny   tcp 10.66.5.0 0.0.0.255 any eq telnet
  permit tcp 10.66.7.0 0.0.0.255 any eq telnet

  好了,对于ACL的系统学习到这儿就基本结束,经过这一段时间的学习,祥子已经有能力,自己编写ACL来解决网络中的问题了,将学习的体会写出来供大家参考。
 

0
相关文章