一、VACL 简单介绍:
VACL又称为VLAN访问映射表,应用于VLAN中的所有通信流。VACL支持基于ETHERTYPE和MAC地址的过滤。与基于CISCO IOS的路由映射表一样,VACL中条目的顺序并非无关紧要。目前, CATALYST6500系列交换机支持多种VACL操作:转发,丢弃,重定向。
二、配置步骤: 1. 指定VLAN访问映射表的名称和序列号: vlan access-map map_name [seq#]2. 配置MATCH子句
match ip address................................ 3. 配置ACL操作 action .................................................... 4. 将VLAN 访问映射表应用于VLAN vlan filter map_map vlan_list list三、举个例子:
confit t
access-list 111 permit tcp any any eq ftp vlan access-map mm 100 match ip address 100 action drop exit vlan filter mm vlan-list 1有些刚接触ACL(Access Control Lists)的朋友听到VACL可能有些陌生,本文将对VACL在Cisco COS和IOS版本的交换机上的使用,进行一个比较全面的描述。
VACL(VLAN ACL)和定时访问列表、动态访问列表、自反访问列表一样都属于ACL扩展应用的一部分,它定义了基于三层以上的信息流量,而所对应的参数则用于两层的VLAN。VACL多是针对硬件中应用,比传统的路由器访问列表处理速度明显快得多。目前,Cisco 6000(Policy Feature Card,策略特性卡,如图1)、3750、3650、3550和2950G系列的交换机都支持VACL。基于COS VACL的配置
VACL与普通的ACL相同,列表也是按照顺序进行匹配的。ACL号相同的所有ACL形成一个组,在判断一个数据帧时,使用同一组中的条目从上到下逐一进行判断,一遇到满足的条目就终止对该数据帧的判断。基本的配置方法如下: 1.配置ACL Set security acl ip {acl_name} {permit |deny |redirect mod/port} {protocol} {sourceaddress mask} [op] [srcport] {dest mask} [op] [destport] [before editbuffer_index |modify editbuffer_index] [log] Set security acl ip命令后面指定IP ACL的名字,后面是协议的说明和采取的措施。Permit|deny分别对应为:Permit是允许通过,deny是丢弃包。如果加上Redirect选项就代表不使用CAM(Content Addressable Memory),而把流量发送到交换机上一个指定的mod/port对应的端口上。对于COS的交换机来说,ACL直到被提交之前都首先写入一个特殊的缓冲区,并不作为交换机当前运行的条目,before和modify参数是指将配置的acl条目放到某条列表之前或者修改其参数。 2.写入到TCAM 在配置完ACL之后,它只在编辑缓冲区里面,我们必须通过commit security acl命令将配置写入到TCAM(ternary content addressable memory)。完整的命令参数如下: commit security acl {name | all } name 选项为只提交指定的名称列表(可以使用show security acl ip name editbuffer 查看编辑缓冲区内未被提交到内容的控制条目),all选项指提交所有未写入的VACL。 3.映射到VLAN VACL与ACL都需要在提交之后把它们对应到作用对象上,如interface vlan1///ip access-group 101 out:这两句将access-list 101应用到vlan1接口的out方向。其中101是ACL号,和相应的ACL进行关联。out是对路由器该接口上哪个方向的包进行过滤,可以有in和out两种选择。COS VACL的配置同上面的道理一样,具体体现在:一个VLAN只能有一个VACL映射对其起作用,但一个VACL可以同时被多个VLAN同时调用。命令参数如下: Set security acl map acl_name vlan基于IOS VACL的配置
对于中小企业和校园网的用户来说,3750、3550和2950的交换机的数量相对较多,前面基于COS系统的VACL的配置并不具备普遍性。那么,我们将着重讲解基于IOS系统的交换机上VACL配置的方法。 配置不同的访问列表 1.基于编号的访问列表 标准IP访问控制列表:一个标准IP访问控制列表匹配IP包中的源地址或源地址中的一部分,可对匹配的数据包采取“拒绝”或“允许”两个操作。编号范围为1~99的访问控制列表是标准IP访问控制列表。命令格式: router(config)#access-list [list number][permit | deny | remark][host/any][source address][wildcard-mask][log] list number表示编号范围:1~99;permit/deny用来表示满足访问表项的报文是允许通过接口,还是要过滤掉;source address源地址;host/any表示为主机匹配地址,host表示一种精确的匹配,其屏蔽码为0.0.0.0,any表示任何主机。 扩展访问列表:扩展访问列表主要增加报文过滤能力,一个扩展的IP访问表允许用户根据内容过滤报文的源和目的地址的协议、端口以及特定报文字段。协议项定义了需要被过滤的协议,例如IP、TCP、UDP、ICMP等,协议选项是区别标准访问列表的特征之一。除此之外, 扩展的列表标号从100~199、2000~2699。语法如下: router(config)#access-list Access-List-Number [ permit | deny ] [ Protocol | Protocol-Number ] source source-wildcard [ Source-Port ] destination destination-wildcard [ Destination-Port ] [ established ] 2.基于名称的访问列表 基于名称的访问列表遵守和编号IP访问控制列表一样的逻辑,名字可以更加容易地记住访问控制列表的功能,命名的列表允许使用超过99个标准控制列表和100个扩展控制列表。优于编号的控制列表的特点是可以删除特定的一条语句,而编号访问控制列表只能删除整个访问控制。语法如下: router(config)#ip access-list {standard | extended} name ip access-list {standard | extended} name表示要进入的name所指定的列表配置模式,所有的permit和deny操作都是进入到这个模式下进行配置的。 创建VLAN映射 VACL主要区别于标准ACL的作用方式,就是将已经创建好的ACL映射到一个VLAN上。创建映射分为三步: (global) vlan access-map name [number] (vlan-map) match ip address {aclname | aclnumber} (vlan-map) action {drop | forward} 第一步vlan access-map后面的名字定义的时候最好有针对性或者提示性,而后续设置的子句都使用number选项。如果在这里进行了分组的设置,每一个子句都要经过匹配检测,直到没有发现匹配语句才丢弃分组。 执行完第一步实际上是进入了访问映射的配置模式。match ip address后面的参数是您在前面配置ACL的名称或编号。 第三步,交换机根据匹配ACL确定的匹配,action命令后面的参数才是代表流量是允许(forward)还是丢弃(drop)。 应用到交换机 之前的配置完成以后,最后需要用vlan filter命令把访问列表应用到交换机。格式如下: (global) vlan filter mapname vlan-list list Mapname参数对应的是vlan access-map命令创建的映射名称,list是vlan的序号。都配置完成以后可以利用show命令进行检查: show ip access-lists [number | name] show vlan access-map [mapname] show vlan filter [access-map name | vlan vlan-id] show ip interface type number我们常说的VLAN之间的访问控制,它的实现方式是将ACL直接应用到VLAN的虚端口上,与应用到物理端口的ACL实现方式是一样的。而VLAN访问控制(VACL),也称为VLAN访问映射表,它的实现方式与前者完全不同。它应用于VLAN中的所有通信流,支持基于ETHERTYPE和MAC地址的过滤,可以防止未经授权的数据流进入VLAN。目前支持的VACL操作有三种:转发(forward),丢弃(drop),重定向(redirect)。
VACL很少用到,在配置时要注意以下几点: 1) 最后一条隐藏规则是deny ip any any,与ACL相同。 2) VACL没有inbound和outbound之分,区别于ACL。 3) 若ACL列表中是permit,而VACL中为drop,则数据流执行drop。 4) VACL规则应用在NAT之前。 5) 一个VACL可以用于多个VLAN中;但一个VLAN只能与一个VACL关联。 6) VACL只有在VLAN的端口被激活后才会启用,否则状态为inactive。 下面,我以Cisco3550交换机作为实例来详细描述一下两者之间不同的实现方式。 网络拓扑图 网络基本情况是划分了三个vlan:vlan10、vlan20和vlan30,vlan虚端口的IP地址分别为192.168.10.1/24、192.168.20.1/24和192.168.30.1/24。 访问控制要求:vlan10和vlan20之间不能访问,但都能访问vlan30。 (一) 通过VLAN之间ACL方式实现 ******** 配置VLAN ******** Switch(config)# vlan 10 // 创建vlan 10 Switch(config-vlan)# vlan 20 Switch(config-vlan)# vlan 30 Switch(config-vlan)# int vlan 10 Switch(config-if)# ip address 192.168.10.1 255.255.255.0 // 配置vlan10虚端口IP Switch(config-if)# int vlan 20 Switch(config-if)# ip address 192.168.20.1 255.255.255.0 Switch(config-if)# int vlan 30 Switch(config-if)# ip address 192.168.30.1 255.255.255.0 ******** 配置ACL ******** Switch(config)# access-list 101 permit ip 192.168.10.0 0.0.0.255 192.168.30.0 0.0.0.255 Switch(config)# access-list 102 permit ip 192.168.20.0 0.0.0.255 192.168.30.0 0.0.0.255 ******** 应用ACL至VLAN端口 ******** Switch(config)# int vlan 10 Switch(config-if)# ip access-group 101 in Switch(config)# int vlan 20 Switch(config-if)# ip access-group 102 in ******** 完毕 ******** (二) 通过VACL方式实现 ******** 配置VLAN ******** (同上) ******** 配置ACL ******** Switch(config)# access-list 101 permit ip 192.168.10.0 0.0.0.255 192.168.30.0 0.0.0.255 Switch(config)# access-list 101 permit ip 192.168.30.0 0.0.0.255 192.168.10.0 0.0.0.255 (不同之处:因为VACL对数据流没有inbound和outbound之分,所以要把允许通过某vlan的IP数据流都permit才行。VLAN10允许与VLAN30通讯,而数据流又是双向的,所以要在ACL中增加VLAN30的网段) Switch(config)# access-list 102 permit ip 192.168.20.0 0.0.0.255 192.168.30.0 0.0.0.255 Switch(config)# access-list 102 permit ip 192.168.30.0 0.0.0.255 192.168.20.0 0.0.0.255 ******** 配置VACL ******** 第一步:配置vlan access map Switch(config)# vlan access-map test1 10 //定义一个vlan access map,取名为test1 (10为序号,一般从10开始) Switch(config-vlan-access)# match ip address 101 // 设置匹配规则为acl 101 Switch(config-vlan-access)# action forward // 匹配后,设置数据流转发(forward)或是 丢弃(drep) Switch(config)# vlan access-map test2 10 //定义一个vlan access map,取名为test2 (10为序号,一般从10开始) Switch(config-vlan-access)# match ip address 102 // 设置匹配规则为acl 102 Switch(config-vlan-access)# action forward // 匹配后,设置数据流转发(forward)或是 丢弃(drep) 第二步:应用VACL Switch(config)# vlan filter test1 vlan-list 10 //将上面配置的test1应用到vlan10中 Switch(config)# vlan filter test2 vlan-list 20 //将上面配置的test1应用到vlan20中 ******** 完毕 ******** 以上就是关于VLAN之间ACL和VACL的简单配置实例。我个人认为一般情况下,通过VLAN之间ACL实现访问控制比较方便,但是当VLAN的端口比较分散时,采用VACL相对而言就要简单很多。不过使用VACL的前提是交换机支持此功能,目前可能只有Cisco 3550、4500和6500系列的交换机支持。VACL很少用到,在配置时要注意以下几点:
1) 最后一条隐藏规则是deny ip any any,与ACL相同。
2) VACL没有inbound和outbound之分,区别于ACL.
3) 若ACL列表中是permit,而VACL中为drop,则数据流执行drop.
4) VACL规则应用在NAT之前。
5) 一个VACL可以用于多个VLAN中;但一个VLAN只能与一个VACL关联。
6) VACL只有在VLAN的端口被激活后才会启用,否则状态为inactive.
下面,我以Cisco3550交换机作为实例来详细描述一下两者之间不同的实现方式。
网络基本情况是划分了三个vlan:vlan10、vlan20和vlan30,vlan虚端口的IP地址分别为192.168.10.1/24、192.168.20.1/24和192.168.30.1/24.
访问控制要求:vlan10和vlan20之间不能访问,但都能访问vlan30.
(一) 通过VLAN之间ACL方式实现
******** 配置VLAN ********
Switch(config)# vlan 10 // 创建vlan 10 Switch(config-vlan)# vlan 20 Switch(config-vlan)# vlan 30 Switch(config-vlan)# int vlan 10 Switch(config-if)# ip address 192.168.10.1 255.255.255.0 // 配置vlan10虚端口IP Switch(config-if)# int vlan 20 Switch(config-if)# ip address 192.168.20.1 255.255.255.0 Switch(config-if)# int vlan 30 Switch(config-if)# ip address 192.168.30.1 255.255.255.0******** 配置ACL ********
Switch(config)# access-list 101 permit ip 192.168.10.0 0.0.0.255 192.168.30.0 0.0.0.255 Switch(config)# access-list 102 permit ip 192.168.20.0 0.0.0.255 192.168.30.0 0.0.0.255******** 应用ACL至VLAN端口 ********
Switch(config)# int vlan 10 Switch(config-if)# ip access-group 101 in Switch(config)# int vlan 20 Switch(config-if)# ip access-group 102 in******** 完毕 ********
(二) 通过VACL方式实现
******** 配置VLAN ********
(同上)
******** 配置ACL ********
Switch(config)# access-list 101 permit ip 192.168.10.0 0.0.0.255 192.168.30.0 0.0.0.255 Switch(config)# access-list 101 permit ip 192.168.30.0 0.0.0.255 192.168.10.0 0.0.0.255 (不同之处:因为VACL对数据流没有inbound和outbound之分,所以要把允许通过某vlan的IP数据流都permit才行。VLAN10允许与VLAN30通讯,而数据流又是双向的,所以要在ACL中增加VLAN30的网段) Switch(config)# access-list 102 permit ip 192.168.20.0 0.0.0.255 192.168.30.0 0.0.0.255 Switch(config)# access-list 102 permit ip 192.168.30.0 0.0.0.255 192.168.20.0 0.0.0.255******** 配置VACL ********
第一步:配置vlan access map
Switch(config)# vlan access-map test1 //定义一个vlan access map,取名为test1 Switch(config-vlan-access)# match ip address 101 // 设置匹配规则为acl 101 Switch(config-vlan-access)# action forward // 匹配后,设置数据流转发(forward) Switch(config)# vlan access-map test2 //定义一个vlan access map,取名为test2 Switch(config-vlan-access)# match ip address 102 // 设置匹配规则为acl 102 Switch(config-vlan-access)# action forward // 匹配后,设置数据流转发(forward)第二步:应用VACL
Switch(config)# vlan filter test1 vlan-list 10 //将上面配置的test1应用到vlan10中 Switch(config)# vlan filter test2 vlan-list 20 //将上面配置的test1应用到vlan20中******** 完毕 ********
以上就是关于VLAN之间ACL和VACL的简单配置实例。我个人认为一般情况下,通过VLAN之间ACL实现访问控制比较方便,但是当VLAN的端口比较分散时,采用VACL相对而言就要简单很多。不过使用VACL的前提是交换机支持此功能,目前可能只有Cisco 3550、4500和6500系列的交换机支持。
VLAN访问控制列表(VACL)的配置方法
同普通的访问控制列表不同,VACL是用在VLAN内对数据进行过滤的,而前者是用在第三层接口对出入的数据包进行过滤,例如:在同一个VLAN内部,我们可能不允许其他主机对另一台主机进行访问,此时我们可以使用VLAN来实现,其配置方法如下: 1.创建VACL(是以映射表方式配置的) Switch(config)#vlan access-map map-name [seq-number] 2.配置匹配条件 Switch(config-access-map)#match ip address {acl-num | acl-name} 3.定义行为 Switch(config-access-map)#action {drop | forward | redirect type mode/num} 4.应用VACL到VLAN Switch(config)#vlan filter map-name vlan-list vlan-list 5.例如:在VLAN 2内禁止主机192.168.0.1访问VLAN内的其他主机 Switch(config)#access-list 101 permit ip host 192.168.0.1 192.168.0.0 0.0.0.255 Switch(config)#vlan access-map denyhost1 10 Switch(config-access-map)#match ip address 101 Switch(config-access-map)#action drop Switch(config-access-map)#vlan access-map denyhost1 20 Switch(config-access-map)#action forward Switch(config-access-map)#exit Switch(config)#vlan filter denyhost1 vlan-list 2 同普通访问列表一样,VACL后面也有一条默认拒绝的语句,所以必须配置允许其他数据流(第五,六语句)