最近经常碰到有人问起
Cisco
交换机上如何实现
VLAN
之间的访问控制,一般我都会告诉对方,在三层交换机上直接把
ACL
应用到相应
VLAN
的虚端口就
OK
了,其实我自己也没有机会去真正实践过。眼下正巧有个项目涉及到这方面的需求,于是对如何实现
VLAN
之间的访问控制仔细研究了一番,这才发现
VLAN
访问控制列表(VACL)和
VLAN
之间的访问控制列表其实在实现方式上是有很大不同的,虽然从字面上看两者差不多。
我们常说的
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 //
定义一个
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
系列的交换机支持。
本文转自 intelboy 51CTO博客,原文链接:http://blog.51cto.com/intelboy/15131,如需转载请自行联系原作者