交换机的端口有两种工作状态:一是Access状态,也就是我们用户主机接入时所需要的端口状态;二是Trunk状态,主要用于跨交换的相同VLAN_id之间的VLAN通讯。
Access状态一般被我们称之为正常状态,是主机的正常接入接口,当我们接入主机后,该接口能够发送和接收正常的数据帧,非正常的数据帧将会直接丢弃,因此这种接口的状态当***者***时,往往没有任何意义,能引起安全的问题很小。我们不在这里详细的描述了。
而另一种接口的状态Trunk则会引起较多的安全问题。我们知道干道技术(Trunking)是通过两个设备之间点对点的连接来承载多个VLAN数据的一种方法,也就是说我们需要将接口的工作模式设置成干道模式,让它来承载非标准的和标准的以太网帧的传递。
    注意:我们这里说的正常数据帧指的是没有添加VLAN id的帧,非正常数据帧指的是添加了VLAN id的帧。
我们在接口上实施Trunk时,有两种协议可以实现以太网干道连接
l  ISL(交换机间链路,Cisco私有协议)
l  802.1QIEEE组织制度,国际标准)
 802.1Q是在正常以太网帧中加入了一个标识并重新计算FCS值,这个标志为802.1Q802.1p协议共同采用,其结构有0x8100标志性字段,有12位表示VLAN号。
                        3-4
802.1Q同时也对网络中所有VLAN定义了共用的唯一的STP(生成树,关于STP的内容请查看第4章)例程,该例程运行在本征VLAN上,这就是单一生成树协议(MSTMono Spanning Tree)。而如果对网络中不同的VLAN定义各自的生成树例程,就是多VLAN多生成树协议(PVSTPer-Vlan Spanning-Tree),它需要ISL干道协议,但它比MST具有更好的灵活性。Cisco也开发了PVST+,利用隧道技术,使得即使是在802.1Q网络上也能运行多个STP例程。
PVST+支持802.1Q干道,也支持多个STP例程到802.1Q交换机单一STP例程的映射。PVST+架构区分三种区域:PVTS区域,PVST+区域和MST区域,每种区域由若干交换机组成,可通过ISL连接PVSTPVST+区域,同样可通过802.1Q连接PVST+MST区域。PVST+网络具有更多的优越性:
1、可以基于子网对转发路径加以控制
2、为流量管理提供更灵活的设计
3、提供了简单的技术来实现第二层冗余
ISLCisco的专用协议,用于交换机之间的互连,以此维护交换机之间来往数据的VLAN信息,它在维护VLAN信息的同时也保持了工作在全双工或半双工模式的快速以太链路上的道速性能。ISL工作在点对点环境下,如果是工作在全双工模式下会更加有效并极力建议这样使用。
ISL干道能使VLAN跨越一个交换网络骨干,用ASIC执行,效率高,对用户站点透明,用户不知道也看不到ISL头部信息,在交换机之间、路由器与交换机之间可以实现。Catalyst交换机所用的ISL帧标识技术是在单一物理路径上多路复用多VLAN数据的低时延机制,在交换机、路由器及使用支持ISL网卡的服务器之间的连接都可以实现ISL,为了支持ISL特性,每个连接设备必须配置成能支持ISL,配置ISL的路由器用于VLAN间的通信。如果ISL封装帧的头大小加上帧数据超过正常以太网帧的最大传输单元(MTU)大小(1500字节),则一个非ISL设备接到一个ISL封装以太网帧时,可能认为该帧是一个出错帧。而理解并且能解码ISL帧的设备将不会就这些帧格式大小产生任何问题。
 
                     3-5
ISL工作在OSI参考模型的第二层,与上层协议无关,ISL可支持任何上层协议。我们可以利用ISL在使用STP的并行链路上实现冗余链路和负载分担。
配置为ISL干道的接口,在将数据发送出接口前,会用一个26字节长的ISL头部信息和4字节长的新CRC值来重新封装正常以太网帧,因为采用了ASICs (Application-Specific Integrated Circuits)所以帧的标识过程可达道速。
ISL头部用10位表示VLAN的信息,可以表达出1024VLAN。尽管Catalyst 2950在干道上能支持1024个不同VLAN的信息,但只能支持前面64VLAN(编号为164)的生成树,可以在交换机上为编号大于64VLAN分配接口成员,但不支持该VLAN的生成树实例,这种情况可能会导致回路。
前文提到的802.1Q ISL 标记***,就是利用的Trunk在实施时,使用了这两个协议,利用这两个协议的缺陷来实现的。那么我们在进行Trunk的操作中,怎样做才能更有效的避免这个安全隐患呢?
我们已经知道,在实施Trunk时,我们可以不进行任何的命令操作,也可以完成在跨交换的相同VLAN-ID之间的通讯。这是因为我们有DTP(DYNAMIC TRUNK PROTCOL)。我们所有的接口上缺省使用了下面这条命令:
 
Switchconfig-if#switchport mode dynamic desirable
 
这条命令使我们所有的接口都处于了自适应的状态,会根据对方的接口状态来发生自适应的变化。对方是Access,就设置自己为Access;对方是Trunk,就设置自己为Trunk
除了desirable这个参数以外,还有一个和它功能比较相似的参数:Auto。这两个参数其实都有自适应的功能,稍微的一点不同在于是否是主动的发出DTP(DYNAMIC TRUNK PROTCOL)的包,也就是说是否主动的和对方进行端口状态的协商。Desirable能主动的发送和接收DTP包,去积极和对方进行端口的商讨,不会去考虑对方的接口是否是有效的工作接口,而Auto只能被动的接收DTP包,如果对方不能发送DTP消息,则永远不会完成数据通信。
说到这,大家肯定认为Auto这个参数安全系数要比Desirable参数高,其实这两个参数的实施所产生的安全隐患是一样的。大家想想,VLAN跳跃***往往是对方将自己的接口设为主动自适应状态,那么我们不管用哪个参数,其结果是完全一样的:都会因为对方接口状态而发生变化。
这样的两个参数本意是给我们减轻工作负担,加快VLAN的配置而产生的。但随着网络的不断发展,针对这个特性而引发的安全隐患(比如:VLAN的跳跃***就是利用了这个特性),越来越引起我们的关注。
想要解决这个安全隐患,需要进行以下操作。
步骤1:在交换机上所有接口上输入以下命令:
Switchconfig-if# switchport mode access
我们将交换机的所有接口都强制设为Access状态,这样做的目的是当***者设定自己的接口为Desirable状态时,怎么协商所得到的结果都是Accsee状态。使***者没法利用交换机上的空闲端口,伪装成Trunk端口,进行局域网***。
步骤2:在需要成为Trunk接口的上输入以下命令:
Switchconfig-if# switchport mode trunk
这条命令的功能,就是强制使端口的状态成为Trunk。不会去考虑对方接口状态,也就是说不管对方的接口是什么状态,我的接口都是Trunk。大家注意:这条命令仅仅在Trunk的真实接口上输入,这样使我们的接口在状态上是唯一的,可控性明显的增强了。
步骤3:在Trunk的接口上再输入下面这条命令:
Switchconfig-if#switchport trunk allowed vlan 10,20,30
这条命令定义了在这个Trunk的接口只允许VLAN10,20,30的数据从此通过。如果还有其他VLAN存在,他们的数据将不能通过这个Trunk接口通过。这样允许哪些VLAN通过,哪些不能通过,就很容易实施。我们就通过这种简单控制数据流向的方法而达到安全的目的。
在完成了上述用于提升我们的VLAN安全的三条命令后,我们的这些接口已经具备了较高的安全性。但读者肯定还有个疑问,那就是使用了这些命令后,DTP这些协议是否还在工作?回答是肯定的,DTP协议依旧在工作。
步骤4:最后需要大家在配制VLAN,一定要实施的命令:
Switchconfig-if#switchport nonegotiate
大家一看到这条命令,就知道它的功能了。Nonegotiate的意思就是不协商。所以上面这条命令就是帮助我们彻底的将发送和接收DTP包的功能完全关闭。在关闭的DTP协议后,该接口的状态将永远稳定成Trunk,使接口的状态达到了最大的稳定性,最大化避免了***者的各种试探努力。
另外,802.1QTrunk中还有一个相关的安全问题,那就是Native VLAN。众所周知,在CiscoCatalyst系列的交换机中,有几个缺省的VLAN。对于以太网用户而言,我们需要了解其中最重要的一个,那就是VLAN 1。缺省情况下,交换机的所有以太网接口都属于VLAN 1。而且我们在配置二层交换机上配置IP地址时,也是在VLAN 1这个接口下完成的。
802.1Q的干道协议中,每个802.1Q封装的接口都被作为干道使用,这种接口都有一个Native VLAN并被分配Native VLAN ID(缺省是VLAN 1)802.1Q不会标记属于Native VLAN的数据帧,而所有未被标记VLAN号的数据帧都被视为Native VLAN的数据。那么VLAN 1作为缺省的Native VLAN,在所有的交换机上都是相同。因此由Native VLAN引起的安全问题,在局域网中必须引起我们的重视。这个安全隐患的解决办法就是更改缺省Native VLAN,我们可以用一条命令
Switchconfig-if# switchport trunk native vlan 99
这条命令需要在一个封装了801.1Q的接口下输入,这条命令将缺省的Native VLAN更改为VLAN 99。执行这条命令后,Native VLAN不相同的交换机将无法通讯。增加了交换机在划分VLAN后的安全性。