最近经常碰到有人问起
Cisco
交换机上如何实现
VLAN
之间的访问控制,一般我都会告诉对方,在三层交换机上直接把
ACL
应用到相应
VLAN
的虚端口就
OK
了,其实我自己也没有机会去真正实践过。眼下正巧有个项目涉及到这方面的需求,于是对如何实现
VLAN
之间的访问控制仔细研究了一番,这才发现
VLAN
访问控制列表(VACL)和
VLAN
之间的访问控制列表其实在实现方式上是有很大不同的,虽然从字面上看两者差不多。
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
我们常说的
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
交换机作为实例来详细描述一下两者之间不同的实现方式。
<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
网络拓扑图
网络基本情况是划分了三个
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 <?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />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
系列的交换机支持。
转载于:https://blog.51cto.com/intelboy/15131