独立的安全调研公司 @stake [9] 最近对 Cisco Catalyst 2950 、 Catalyst 3550 、 Catalyst 4500 和 Catalyst 6500 系列交换机上采用的虚拟 LAN ( VLAN )技术进行了一次安全检查 [1] 。虽然此次检查没有暴露出严重的安全漏洞,但必须指出的是,如果交换机的配置不正确或不适当,则很有可能引发意外行为或发生安全问题。
去年,思科系统公司一直致力于在若干文档中制定安全网络配置的最佳实践准则,例如《 SAFE 蓝图》 [2] 或《 Catalyst 4500 、 5000 和 6500 系列交换机最佳实践经验》 [3] 。但是,迄今为止,思科还没有提供一本全面介绍与 VLAN 相关的所有最佳实践经验、可方便客户和现场工程师参考的文档。
本文的目的是全面介绍思科工程师多年积累的丰富经验和建议,帮助客户和现场工程师正确地在思科交换机上配置 VLAN 。除此以外,本文还将通过要点说明解释 @stake 测试的主要结果,阐述解决安全问题的方法。
基本安全准则
要想创建安全的交换网,必须先熟悉基本安全准则。需要特别注意的是, SAFE 最佳实践 [2] 中强调的基本准则是设计任何安全交换网的基石。
如果用户不希望任何设备受损,则必须严格控制对该设备的访问。不仅如此,所有网络管理员都应该使用思科平台上提供的所有实用安全工具,包括系统密码的基本配置、 IP 准入过滤器和登陆检查,以及 RADIUS 、 TACACS+ 、 Kerberos 、 SSH 、 SNMPv3 、 IDS 等更先进的工具(详情参见 [3] )。
必须使所有基本安全准则得到满足之后,再关注更先进的安全细节。在下面的章节中,我们将说明与 VLAN 相关的问题。
虚拟 LAN
第二层( L2 )交换机指能够将若干端口组成虚拟广播域,且各虚拟广播域之间相互隔离的设备。这些域一般称为虚拟 LAN ( VLAN )。
VLAN 的概念与网络领域中的其它概念相似,流量由标记或标签标识。标识对第二层设备非常重要,只有标识正确,才能隔离端口并正确转发接收到的流量。正如后面章节中将要介绍的那样,缺乏标识有时是引发安全问题的原因,因而需要避免。
如果设备中的所有分组与相应 VLAN 标记紧密结合,则能够可靠区分不同域的流量。这就是 VLAN 交换体系结构的基本前提。
值得注意的是,在物理链路(有时称为干线)上,思科设备使用的是 ISL 或 802.1Q 等常用的 VLAN 标记技术。与此同时,思科设备使用先进标记技术在内部保留 VLAN 信息,并用于流量转发。
此时,我们可以得出这样的结论:如果从源节点发送出去之后,分组的 VLAN 标识不能被修改,即保持端到端不变,则 VLAN 的可靠性应等价于物理安全性。
关于这个问题,我们还将在下面详细讨论。
控制面板
恶意用户特别希望能够访问网络设备的管理控制台,因为一旦成功,就能够容易地根据他们的需要修改网络配置。
在基于 VLAN 的交换机中,除与带外端口直接连接外,管理 CPU 还可以使用一个或多个 VLAN 执行带内管理。另外,它还可以使用一个或多个 VLAN 与其它网络设备交换协议流量。
基本物理安全准则要求网络设备位于可控(锁定)空间,主要 VLAN 安全准则则要求将带内管理和协议流量限制在可控环境中。这个要求可以通过以下工具和最佳实践经验实现:
?  流量和协议 ACL 或过滤器
?  QoS 标记和优先级划分(控制协议由相应的服务等级或 DSCP 值区分)
?  有选择地关闭不可信端口上的第二层协议(例如关闭接入端口上的 DTP )
?  只在专用 VLAN 上配置带内管理端口
?  避免使用 VLAN 1 传输任何数据流量

命令示例:
Catalyst 操作系统( CatOS )软件 Cisco IOS ò 软件
使用 VLAN 1 需注意的事项
VLAN 1 成为特殊 VLAN 的原因是,需要第二层设备才能由默认 VLAN 分配其端口,包括其管理端口。另外, CDP 、 PAgP 和 VTP 等许多第二层协议都需要发送到干线链路上的特定 VLAN 。基于这三个原因,最后选中了 VLAN 1 。
因此,如果裁剪不当, VLAN 1 有时会不明智地包含整个网络。当其直径达到一定程度时,不稳定性风险将迅速升高。不仅如此,如果使用几乎覆盖全网的 VLAN 执行管理任务,则将提高可信设备的风险,使其容易受到因误配置或意外接入而进入 VLAN 1 ,或者特意利用这种意外安全漏洞接入 VLAN 1 的不可信设备的***。
为挽回 VLAN 1 的声誉,可实施一个简单的通用安全准则:作为一项安全规定,网络管理员应该将任何 VLAN ,尤其是 VLAN 1 与并非绝对需要此 VLAN 的所有端口隔离开。
因此,对于 VLAN 1 ,上述准则可以转换成以下建议:
?  不使用 VLAN 1 传输带内管理流量,使用另一专用 VLAN ,将管理流量与用户数据和协议流量隔离开;
?  撤销 VLAN 1 中所有不需要的干线和接入端口(包括未连接端口和关闭端口)。
同样,上述规则也适用于管理 VLAN 读操作:
?  不在不需要的任何干线或接入端口上配置管理 VLAN (包括未连接端口和关闭端口);
?  为增强安全性,应尽可能不使用带内管理,转而使用带外管理(如果想详细了解带外管理基础设施,请参见 [3] )。
作为一项设计准则,必须“切掉”特定 VLAN 中不需要的流量。例如,为防止所有 telnet 连接,只运行 SSH 进程,通常会对管理 VLAN 中传输的流量应用 VLAN ACL 和 / 或 IP 过滤器。另外,也可以应用 QoS ACL ,以便限制呼叫流量的最高速率。
如果 VLAN 1 或者管理 VLAN 以外的 VLAN 出现安全问题,应使用自动或人工剪裁。需要注意的是,以透明或关闭方式配置 VTP 或者人工剪裁 VLAN 通常是增强对 VLAN 网络控制的最有效的方法。

命令示例:
CatOS Cisco IOS 软件
“完全信任或完全不信任所有人同样有害”——英国谚语
正确决定并实施 VLAN 1 之后,下一个逻辑步骤是将注意力转向安全环境中另一常用的、同等重要的最佳实践。这是个通用的安全准则:将不可信设备与不可信端口相连,将可信设备或可信端口相连,断开所有其他端口。这个准则可转变为以下通用建议:
?  如果某端口与“外部”设备相连,则不要与它进行任何通信,否则,很可能会中了某人的圈套,产生对自己不利的效果。在这些端口上,应关闭 CDP 、 DTP 、 PAgP 、 UDLD 及其它不必要的协议,并启用 portfast/BPDU 防护。我们可以这样想这个问题:为什么要冒险与不可信任的邻居交谈呢?
?  启用根防护特性,防止直接或间接连接的 STP 型设备影响根桥的位置。
?  如果想限制或防止意外协议与网络级 VLAN 配置交互,应对 VTP 域作相应的配置,或者全部关闭 VTP 。这种预防措施不但能限制或防止将管理员的错误传播到整个网络,还能限制或防止 VTP 版本较高的新交换机意外地覆盖掉整个域的 VLAN 配置。
?  默认状态下,只能相信那些确实“可信”的端口,所有其它端口则一律定为“不可信”端口,以防止连接的设备不适当地修改 QoS 值。
?  关闭未使用端口,将其放置在未使用 VLAN 中。如果不与未使用 VLAN 建立连接,或者不在未使用 VLAN 中添加设备,就可以通过基本的物理或逻辑障碍来防止非授权访问。

命令示例:
CatOS Cisco IOS 软个件
为什么首先担心第二层安全性?
为使不同层次能够独立操作(只了解其相互接口),我们建立了 OSI 模型。 OSI 的思想是:只要留有各层次之间的标准接口,某层协议的开发就不会影响到其它层次。
遗憾的是,这意味着,当某个层次遭袭时,由于其它层次意识不到问题的存在,因而会危及通信的安全性(如图 1 所示)。
1 OSI 模型的结构

在这个体系结构中,系统的安全性只相当于最薄弱链路的安全性。
数据链路层与其它层次一样脆弱,可能会遭受各种***,因此,交换机必须通过配置加以保护。
VLAN 网络可能会遇到哪类***?
第二层的多数***都将使设备失去***者跟踪能力,这样,***者就能够在转发路径上大肆执行恶意操作,先修改配置,然后***网络。
下面列出的是人们最常谈到的第二层***,无独有偶,这些也是 @stake 记录的***类型 [1] :
?  MAC 洪泛***
?  802.1Q 和 ISL 标记***
?  双封装 802.1Q/ 嵌套式 VLAN ***
?  ARP ***
?  专用 VLAN ***
?  组播暴力***
?  扩展树***
?  随机帧重压***
下面详细说明这些***。
MAC 洪泛***
从严格意义上讲,这种***不属于 “***”,因为它只是限制所有交换机和桥接器的工作路径。它们占用了用于保存所有接收分组的源地址的有限硬件学习表,当这些表充满后,由于无法再读到流量的地址,无法转发流量,因而会出现流量洪泛现象。但是,由于分组洪泛只局限在初始 VLAN 内,因而不允许 VLAN 跳转(如 @stake 的报告所示)。
恶意用户可以利用这种***将与其连接的交换机转变成哑伪集线器,搜索并查看所有洪泛流量。很多程序都可以用于执行此项任务,例如 macof ,它是 dsniff 套件的一部分 [4] 。恶意用户可以利用这个弱点发起实际***,例如 ARP 破坏***(欲知详情,请参见《 ARP ***》)。
非智能交换机无法抵御这种***,因为它不检查发送方的第二层标识,发送方只需发送伪分组就能假冒无限数量的设备。
思科的交换机支持多种特性,以便识别并控制所连设备的身份。这些交换机奉行的安全准则非常简单:认证和说明对所有不可信设备都至关重要。
需要强调的是,端口安全性、 802.1x 和动态 VLAN 这三个特性可用于根据用户的登陆 ID 和设备自身的 MAC 层标识限制设备连接。
例如,利用端口安全性,预防 MAC 洪泛***可以像限制每个端口可以使用的 MAC 地址数那么简单:设备流量的标识将直接与其原始端口相接。
802.1Q ISL 标记***
标记***属于恶意***,利用它,一个 VLAN 上的用户可以非法访问另一个 VLAN 。例如,如果将交换机端口配置成 DTP auto ,用于接收伪造 DTP 分组,那么,它将成为干线端口,并有可能接收通往任何 VLAN 的流量。因此,恶意用户可以通过受控制的端口与其它 VLAN 通信。
有时候,即使只是接收普通分组,交换机端口也可能违背自己的初衷,像全能干线端口那样操作(例如,从本地以外的其它 VLAN 接收分组)。这种现象通常称为“ VLAN 渗漏”(如果想阅读关于类似问题的报告,请参见 [5] )。
对于第一种***,只需将所有不可信端口(不符合信任条件)上的 DTP 设置为“关”,即可预防这种***的侵袭;要对付第二种***,可以按照下面介绍的简单配置步骤操作(例如下一节中介绍的步骤),也可以通过软件升级实现。幸运的是, Cisco Catalyst 2950 、 Catalyst 3550 、 Catalyst 4000 和 Catalyst 6000 系列交换机并不需要进行这种升级,因为其上运行的软件和硬件能够在所有端口上实施适当的流量分类和隔离(如 @stake 在 [1] 中说明的那样)。
那么,报告中为什么会提及本地 VLAN 呢 [5] ?我们将在下面的章节中提供答案 ......
双封装 802.1Q/ 嵌套式 VLAN ***
虽然在交换机内部,但 VLAN 数字和标识用特殊扩展格式表示,目的是使转发路径保持端到端 VLAN 独立,而且不会损失任何信息。在交换机外部,标记规则由 ISL 或 802.1Q 等标准规定。
ISL 属于思科专有技术,是设备中使用的扩展分组报头的紧凑形式:由于每个分组总会获得一个标记,没有标识丢失风险,因而可以提高安全性。
另一方面,制订了 802.1Q 的 IEEE 委员会决定,为实现向下兼容性,最好支持本地 VLAN ,即不与 802.1Q 链路上任何标记显式相关的 VLAN 。这种 VLAN 以隐含方式用于 802.1Q 型端口上接收到的所有无标记流量。
这种功能是用户所希望的,因为利用这个功能, 802.1Q 型端口可以通过收发无标记流量直接与老 802.3 端口对话。但是,在所有其它情况下,这种功能可能会非常有害,因为通过 802.1Q 链路传输时,与本地 VLAN 相关的分组将丢失其标记,例如其服务等级( 802.1p 位)。
但是基于这些原因——丢失识别途径和丢失分类信息,就应避免使用本地 VLAN ,更不要说还有其它原因,如图 2 所示。
2 双封装***

先剥离,再送回
***者 802.1q 帧 帧
VLAN A VLAN B 数据 包含本地 VLAN A 的干线 VLAN B 数据
注意: 只有干线所有的本地 VLAN 与***者相同,才会发生作用。
当双封装 802.1Q 分组从 VLAN 恰巧与干线的本地 VLAN 相同的设备进入网络时,这些分组的 VLAN 标识将无法端到端保留,因为 802.1Q 干线总会对分组进行修改,即剥离掉其外部标记。删除外部标记之后,内部标记将成为分组的惟一 VLAN 标识符。因此,如果用两个不同的标记对分组进行双封装,流量就可以在不同 VLAN 之间跳转。
这种情况将被视为误配置,因为 802.1Q 标准并不逼迫用户在这些情况下使用本地 VLAN 。事实上,应一贯使用的适当配置是从所有 802.1Q 干线清除本地 VLAN (将其设置为 802.1q-all-tagged 模式能够达到完全相同的效果)。在无法清除本地 VLAN 时, 应选择未使用的 VLAN 作为所有干线的本地 VLAN ,而且不能将该 VLAN 用于任何其它目的 。 STP 、 DTP 和 UDLD (参见 [3] )等协议应为本地 VLAN 的唯一合法用户,而且其流量应该与所有数据分组完全隔离开。
ARP ***
ARP 协议 [6] 是一项老技术。 ARP RFC 产生的时候,网络中的所有人都被视为“友好人士”,因而没有在 ARP 功能中考虑安全性。这样,任何人都可以声称自己是某个 IP 地址的所有者。更准确地说,任何人都可以声称其 MAC 地址与某个子网内的任何 IP 地址相关。这是完全可行的,因为 ARP 请求或答复中包含设备的第二层标识信息( MAC 地址)和第三层标识( IP 地址),而且没有核实机制,无法核查这些标识的准确性。
在另一个实例中,由于不能用准确、可靠的手段确认设备的身份,因而出现了严重的安全漏洞。这个例子同时表明,如果 OSI 模型中的较低层次遭到***,由于较高层意识不到问题的存在,因而将直接影响较高层的操作。( ARP 是一种独特的协议样本,它在第二层内运行,但从逻辑上,它位于 OSI 模型中数据链路层与网络层之间的边界上。)
@stake 发动的 ARP ***的目的是,通过发送包含伪造标识的 ARP 分组,欺骗某交换机将分组转发到另一个 VLAN 中的某台设备。但是,在所有思科设备中, VLAN 是正交的,因而不依赖于 MAC 地址。所以,只通过修改 ARP 分组中的设备标识,是不可能影响它与其它 VLAN 内设备的通信方式的。事实上,正如报告中所说,不可能进行任何 VLAN 跳转。
另一方面,在同一个 VLAN 内,利用 ARP 破坏或 ARP 欺诈*** [7] ,可以有效地欺骗终端站点或路由器识别伪造的设备标识,致使恶意用户能够以中间人的身份,发动中间人( MiM )***。
对于这种情况,一张图可对其进行最好的说明(见图 3 )。
3 ARP 破坏***

将免费信息送至 0000.0000.000B :我的 IP 地址为 1.1.1.1 ,我的 MAC 地址为 000:00:00:00:00:0C
PC 1.1.1.2 的 ARP 表受到侵袭。所有外出流量都将通过 PC 1.1.1.3 ,然后将流量透明地转发至路由器。
发动 MiM ***的方法是,在发送至受袭设备的 ARP 包中假冒另一台设备(例如默认网关),由于接收方不检查这些分组,因而其 ARP 表将接收假冒信息。
预防这种***有两种方法,一种方法是阻挡***者和受***设备之间的第二层直接通信,另一种方法是在网络中嵌入更多智能,使之能够检查转发 ARP 分组的标识是否正确。第一种方法可以通过 Cisco Catalyst 专用 VLAN 或专用 VLAN 边缘特性实现。第二种方法可以利用称为 ARP 检查的新特性实现,这种特性首先在 Cisco Catalyst 6500 Supervisor Engine II 上的 CatOS 7.5 中推出,以后将在 Cisco Catalyst 交换机的 Cisco IOS 软件中提供。
专用 VLAN ***
“专用 VLAN ***”有点用词不当,因为它对应的不是安全漏洞,而是对特性的某种期望。专用 VLAN 属于第二层特性,因而应该只在第二层隔离流量。另一方面,路由器则属于第 3 层( L3 )设备,当它与专用 VLAN 混合端口相连时,即使目的地与始发地在同一个子网中,也应该将该端口上接收到的第三层流量转发到相应的目的地( @stake 将这种行为称为第二层代理)。
因此,虽然两个相互隔绝的 VLAN 中的两台主机应该通过第二层直接通信相互交流,但它们通常在相互交谈时将路由器作为分组中继。
上述现象如图 4 所示。
4 第二层代理

与常规路由流量相同,如果需要,可以利用转发设备上相应的 ACL 配置对通过第二层代理中继的分组进行过滤。
利用输出思科 IOS ACL 阻挡中继流量的示例如下:
deny subnet/mask subnet/mask
permit any subnet/mask
deny any any
如果想详细了解 VLAN ,请参见 [8] 。
组播暴力***
这种***试图利用交换机的潜在安全漏洞(读操作:缺陷)发起第二层组播帧风暴。 @stake 希望通过测试了解第二层交换机快速接收到大量第二层组播帧时将发生什么情况。正确的反应是将流量限制在原始 VLAN 中,错误的反应是将帧泄漏到其它 VLAN 中。
@stake 的结果显示,这种***对 Cisco Catalyst 交换机无效,因为所有帧都包含在相应的广播域中(这个结果毫不奇怪:毕竟,在所有 Catalyst 交换机中,广播只是组播的一个特殊部分)。
生成树协议
试图利用交换机弱点(例如缺陷)发动***的另一种***是 STP ***。 @stake 测试的所有 Cisco Catalyst 交换机都支持这种协议。默认状态下, STP 是打开的,而且交换机上的所有端口都可以收听 STP 消息。 @stake 试图测试,在某些情况下,思科 PVST (每 VLAN 生成树)是否将无法打开 1 多个 VLAN 。***包括窥探线路上的 STP 帧,以便获取端口 STP 的 ID 。接下来,***者将发出 STP 配置 / 拓扑变更认可 BPDU ,宣布它称为优先级较低的新根桥。
在此过程中,测试者输入广播流量,看是否有 VLAN 漏出,结果是没有出现这种现象。这说明,在思科交换机上实施的 STP 的功能十分强大。
随机帧重压***
这种***有很多形式,但主要特点是,它包含随机分布在多个分组域的暴力***,只保持源地址和目标地址不变。 @stake 工程师的多次测试表明,任何分组都无法成功地跳过 VLAN 。
专用 VLAN 可以更好地隔离第二层的主机,并防止它们受到不可信设备的意外恶意流量的***。使用时,可以建立互信任主机组,将第二层网络分成多个子域,只让友好设备相互交流。如果想详细了解专用 VLAN ,请参见 [8] 。
结论
实践表明, VLAN 技术的可靠性远远高于诽谤者的预期,只有用户误配置或特性误用才能突破其强大功能。
用户会犯的最严重的错误是,不重视高级交换网络体系结构中的数据链路层,尤其是 VLAN 。需要牢记的是, OSI 模型的安全性与其最薄弱链路的安全性相当。因此,必须同等地重视每一层次,才能保证整个结构的安全性。
?  设备或算法可能失败的一种方式,例如,当设备误操作、成为易受***的薄弱环节时。
基于 Cisco Catalyst 交换机的任何良好网络设备都应该包含本文介绍的最佳实践准则,这样才能有效保护网络的第二层安全体系结构免遭破坏。
虽然前面章节讨论的某些安全概念比较通用,但需要注意的是,本文针对的只是包含 Cisco Catalyst 交换机的网络,其它交换机厂商的实施方法可能大不相同,因而某些交换机可能更容易遭受本文介绍的各种***的侵袭