本文首先简要说明如何使用ACL保护VLAN,以及如何构建专用VLAN。然后,我们将继续描述两种保护VLAN Trunk的方法。
交换机具有逻辑上将单个VLAN划分为多个分区的功能。每个分区都可以彼此隔离,它们都共享一个公共IP子网和一个公共网关地址。专用VLAN可以为许多不同的客户或组织提供单个VLAN,而无需它们之间的任何交互。
VLANTrunk通常用于交换机之间的链路上,以承载来自多个VLAN的数据。如果所有交换机都处于同一管理控制之下,则很容易对Trunk线的安全性感到沾沾自喜。可以使用一些已知的攻击来访问通过Trunk链路承载的VLAN。因此,网络管理员应了解可以采取的防止任何攻击的步骤。
VLAN访问列表
访问列表可以管理或控制通过交换机的流量。每个ACL都根据流量的方向(入站或出站)应用于接口。然后可以在硬件中过滤数据包,而不会影响交换性能。但是,只能以这种方式过滤在VLAN之间传递的数据包。
留在同一VLAN中的数据包不会跨越VLAN或接口边界,并且没有与接口相关的方向。这些数据包也可能是非IP或完全桥接的。因此,它们永远不会通过多层交换机制。VLAN访问列表(VACL)是可直接影响VLAN中数据包处理方式的过滤器。
请注意,VACL全局应用于一个或多个列出的VLAN,而不应用于VLAN接口交换机虚拟接口(SVI)。回想一下,VLAN可以作为显式接口或固有的第2层实体存在于交换机中。
VLAN接口是数据包进入或离开VLAN的点,因此在此处应用VACL没有意义。而是,VACL需要在没有入站或出站方向的VLAN本身内运行。
例如,假设您需要过滤VLAN 100中的流量,以便不允许主机172.16.1.10与它的本地子网中的任何其他主机联系。创建扩展访问列表“ local-20”以标识此主机与其本地子网上的任何其他主机之间的流量。
如果“ local-20”访问列表与IP地址匹配(允许),则该数据包将被丢弃;否则,该数据包将被丢弃。否则,将转发该数据包。以下示例显示了触发此操作的Cisco命令。
Switch(config)# ip access-list extended local-20
Switch(config-acl)# permit ip host 172.16.1.10 172.16.1.0 0.0.0.255
Switch(config-acl)# exit
Switch(config)# vlan access-map block-20 10
Switch(config-access-map)# match ip address local-20
Switch(config-access-map)# action drop
Switch(config-access-map)# vlan access-map block-20 20
Switch(config-access-map)# action forward
Switch(config-access-map)# exit
Switch(config)# vlan filter block-20 vlan-list 100
私有VLAN
由于第2层交换的性质,从主机发送到另一主机的数据包通常只能由目标主机接收。但是,如果一台主机广播一个数据包,则VLAN上的所有主机都必须侦听。如果两者都连接到本地交换机,则可以使用VACL在VLAN中的源和目标之间过滤数据包。
有时,能够在单个VLAN内划分流量,而不必使用多个VLAN和一个路由器将是很好的选择。例如,在单个VLAN服务器场中,所有服务器都应该能够与路由器或网关进行通信,但是服务器不必必须侦听彼此的广播流量。
更进一步,假设每个服务器都属于一个单独的组织。现在,每个服务器都应与其他服务器隔离,但仍然能够访问网关以查找不在本地网络上的客户端。
主VLAN和辅助VLAN
一个正常的或主VLAN可以用特殊的单向的,或者在逻辑上相关联的次级,
VLAN中。与辅助VLAN关联的主机可以与主VLAN(例如,路由器)上的端口通信,但不能与另一个辅助VLAN进行通信。辅助VLAN配置为以下类型之一:
- 隔离Isolated:与隔离VLAN关联的任何交换机端口都可以到达主VLAN,但不能到达任何其他辅助VLAN。此外,与同一隔离VLAN关联的主机无法相互访问。实际上,它们与除主VLAN之外的所有隔离。
- 社区模式Community:与公共社区VLAN相关联的任何交换机端口都可以相互通信,并且可以与主VLAN进行通信,但不能与任何其他辅助VLAN进行通信。这为组织内的服务器场和工作组提供了基础,同时提供了组织之间的隔离。
所有辅助VLAN必须与一个主VLAN关联才能建立单向关系。使用常规VLAN的特殊情况配置专用VLAN。
您必须配置使用私有VLAN和VLAN关联的每个物理交换机端口。您还必须使用以下模式之一定义端口:
- 混杂:交换机端口连接到路由器,防火墙或其他公共网关
设备。该端口可以与连接到主VLAN或辅助VLAN的任何其他端口进行通信。换句话说,端口处于混杂模式,其中专用VLAN的规则被忽略。 - 主机:交换机端口连接到位于隔离VLAN或社区VLAN上的常规主机。该端口仅与
同一社区VLAN上的一个或多个混杂端口通信。
上图显示了基本的专用VLAN操作。计算机A和C连接到辅助
社区VLAN。团体VLAN与路由器连接的主VLAN关联。
路由器连接到主VLAN上的混杂端口。单个计算机(B)连接到辅助隔离VLAN,因此它只能与路由器的混杂端口通信。
保护VLAN trunk
由于Trunk链路通常限制在两个交换机之间,因此您可能会认为它们或多或少是安全的。Trunk线的每一端都连接到您控制下的设备,Trunk线上携带的VLAN保持隔离,依此类推。
可以利用某些攻击或漏洞利用来访问Trunk线或Trunk线上承载的VLAN。因此,您应该首先熟悉攻击的工作方式以及可以采取哪些步骤来防止它们。
交换机欺骗
在Cisco中,交换机可以通过交换动态Trunk协议(DTP)消息来动态协商其使用及其封装模式。尽管DTP可以使交换机管理更加容易,但是它也可以使交换机端口受到威胁。
假设将交换机端口保留为其默认配置,在该配置中,Trunk模式设置为自动。通常,交换机端口将等待自动或开启模式下的另一台交换机请求成为Trunk。
行为良好的最终用户根本不会使用DTP,因此该端口将以单访问VLAN进入访问模式。但是,恶意用户可能会利用DTP并尝试与交换机端口协商Trunk。这使PC看起来像是另一台交换机。实际上,
PC欺骗了交换机。
协商Trunk后,攻击者即可访问任何允许通过Trunk的VLAN。如果将交换机端口保留为其默认配置,则允许在交换机上配置的所有VLAN进入Trunk。
下图显示了这种情况。攻击者可以接收在任何VLAN上通过Trunk发送的任何流量。此外,他可以将流量发送到他选择的任何VLAN中。
解决此问题的方法是将每个交换机端口配置为具有预期的受控行为。例如,不要将最终用户交换机端口设置为在自动模式下使用DTP,而是将其配置为静态访问模式。
VLAN跳变
保护VLANTrunk时,还应考虑潜在的利用机会,称为VLAN跳跃。在这里,位于一个访问VLAN上的攻击者可以制作和发送带有欺骗性802.1Q标签的帧,从而使数据包有效载荷最终出现在完全不同的VLAN上,而无需使用路由器。
为了使此漏洞利用有效,网络配置中必须存在以下条件:
- 攻击者连接到访问交换机端口。
- 同一台交换机必须具有802.1QTrunk。
- Trunk必须具有攻击者的访问VLAN作为其本机VLAN。
下图显示了VLAN跳变的工作方式。位于VLAN 20上的攻击者发送被双重标记的帧,就像正在使用802.1QTrunk一样。自然,攻击者未连接到Trunk线。他欺骗了Trunk封装,以欺骗交换机使帧跳到另一个VLAN。
首先为常规帧(或在这种情况下为恶意有效负载)提供带有目标VLAN的VLAN ID的802.1Q标签。然后,再添加一个伪造的802.1Q标记以及攻击者的访问VLAN ID。
当本地交换机Switch A收到一个带有双重标记的帧时,它决定将其转发出Trunk接口。因为第一个(最外面的)标签具有与Trunk的本机VLAN相同的VLAN ID,所以在帧在Trunk上发送时,该标签将被删除。交换机认为应将本机VLAN取消标记。现在,第二个(最里面的)标签暴露在行李箱上。
交换机B收到帧后,将检查找到的所有802.1Q标签。找到了VLAN 20的欺骗标记,因此将其删除,并将帧转发到VLAN20。现在,攻击者成功地在VLAN 10上发送了一个帧,并将该帧注入到VLAN 20中,全部通过第2层交换。
显然,此类攻击的关键在于使用未标记的本机VLAN。因此,为防止VLAN跳频,请务必按照以下步骤仔细配置Trunk链路:
- 步骤1: 将Trunk的本机VLAN设置为伪造或未使用的VLAN ID。
- 步骤2: 从Trunk的两端修剪本地VLAN。