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的过程中,应当遵循如下两个基本原则:
最小特权原则:只给受控对象完成任务所必须的最小的权限
最靠近受控对象原则:所有的网络层访问权限控制
局限性:由于ACL是使用包过滤技术来实现的,过滤的依据又仅仅只是第三层和第四层包头中的部分信息,这种技术具有一些固有的局限性,如无法识别到具体的人,无法识别到应用内部的权限级别等。因此,要达到end to end的权限控制目的,需要和系统级及应用级的 访问权限控制结合使用。
ACL基本配置
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,并且不会进行对齐操作。
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
router(config)#access-list permit|deny
router(config)#interface ;default:deny any router(config-if)#ip access-group in|out ;default:out 例1: router(config)#access-list 4 permit 10.8.1.1 router(config)#access-list 4 deny 10.8.1.0 0.0.0.255 router(config)#access-list 4 permit 10.8.0.0 0.0.255.255 router(config)#access-list 4 deny 10.0.0.0 0.255.255.255 router(config)#access-list 4 permit any router(config)#int f0/0 router(config-if)#ip access-group 4 in |
access-list permit|deny icmp <DESTINATIONIP wild>[type] access-list permit|deny tcp <DESTINATIONIP wild>[port] 例3: router(config)#access-list 101 deny icmp any 10.64.0.2 0.0.0.0 echo router(config)#access-list 101 permit ip any any router(config)#int s0/0 router(config-if)#ip access-group 101 in 例3: router(config)#access-list 102 deny tcp any 10.65.0.2 0.0.0.0 eq 80 router(config)#access-list 102 permit ip any any router(config)#interface s0/1 router(config-if)#ip access-group 102 out |
router(config-if)#no ip access-group 101 in
Router(config-if)#ip nat inside ;当前接口指定为内部接口 Router(config-if)#ip nat outside ;当前接口指定为外部接口 Router(config)#ip nat inside source static [p] <私有IP><公网IP> [port] Router(config)#ip nat inside source static 10.65.1.2 60.1.1.1 Router(config)#ip nat inside source static tcp 10.65.1.3 80 60.1.1.1 80 Router(config)#ip nat pool p1 60.1.1.1 60.1.1.20 255.255.255.0 Router(config)#ip nat inside source list 1 pool p1 Router(config)#ip nat inside destination list 2 pool p2 Router(config)#ip nat inside source list 2 interface s0/0 overload Router(config)#ip nat pool p2 10.65.1.2 10.65.1.4 255.255.255.0 type rotary Router#show ip nat translation rotary 参数是轮流的意思,地址池中的IP轮流与NAT分配的地址匹配。 overload参数用于PAT 将内部IP映射到一个公网IP不同的端口上。 |
routerA(config)#router bgp 100 routerA(config-router)#network 19.0.0.0 routerA(config-router)#neighbor 8.1.1.2 remote-as 200 |
RouterA(config)#username password RouterA(config)#int s0 RouterA(config-if)#ppp authentication {chap|pap} |
Pix525(config)#nameif ethernet0 outside security0 ;命名接口和级别
Pix525(config)#interface ethernet0 auto ;设置接口方式 Pix525(config)#interface ethernet1 100full ;设置接口方式 Pix525(config)#interface ethernet1 100full shutdown Pix525(config)#ip address inside 192.168.0.1 255.255.255.0 Pix525(config)#ip address outside 133.0.0.1 255.255.255.252 Pix525(config)#global (if_name) natid ip-ip ;定义公网IP区间
Pix525(config)#global (outside) 1 7.0.0.1-7.0.0.15 ;例句 Pix525(config)#global (outside) 1 133.0.0.1 ;例句 Pix525(config)#no global (outside) 1 133.0.0.1 ;去掉设置 Pix525(config)#nat (if_name) nat_id local_ip [netmark]
Pix525(config)#nat (inside) 1 0 0 内网所有主机(0代表0.0.0.0)可以访问global 1指定的外网。 Pix525(config)#nat (inside) 1 172.16.5.0 255.255.0.0 内网172.16.5.0/16网段的主机可以访问global 1指定的外网。 Pix525(config)#route if_name 0 0 gateway_ip [metric] ;命令格式
Pix525(config)#route outside 0 0 133.0.0.1 1 ;例句 Pix525(config)#route inside 10.1.0.0 255.255.0.0 10.8.0.1 1 ;例句 Pix525(config)#static (inside, outside) 133.0.0.1 192.168.0.8
表示内部ip地址192.168.0.8,访问外部时被翻译成133.0.0.1全局地址。 Pix525(config)#static (dmz, outside) 133.0.0.1 172.16.0.8 中间区域ip地址172.16.0.8,访问外部时被翻译成133.0.0.1全局地址。 |