许多安全管理员经常会忽略网络架构的第二层(即数据链路层,交换机所处的位置)的安全问题,同时这也是网络安全和可靠性方面最容易被人忽视的一个方面。在本文中,我会向你展示如何修正交换机配置以及架构方面最常见的错误。虽然我使用Cisco来作为我的例子,但是同样的策略和所讨论的教训一样适用于其他厂商。这些安全操作程序对任何数据网络来说都是必须的,特别是在部署了IP电话的时候。
启用 ssh 禁用Telnet
对于一台Cisco设备来说,最明显需要设置的就是口令和启用加密了。如果你让它保持空白的话,你的交换机就等于是在敞开大门,任何人都可以查看并攻击你的VLAN设置。如果你有多台交换机,以及多位系统管理员时,最好使用AAA认证模式,并使用一个本地用户数据库,集中的TACACS ,或者 RADIUS服务器来管理所有的交换机和系统管理员。使用TACACS 可能是更正确的选择,因为它可以记录下所有的事件,以便你有一个历史记录,可以记录下所有做出的修改,以及是谁在你的交换机和路由器架构中做出了修改。不过要记住,最重要的事情是,不惜任何代价禁止Telnet,并持续的对所有交换机部署ssh.即便你的交换机上并没有一个启用加密的软件镜像,所有的当前镜像也依然可以让你ssh进交换机。为每一个系统管理员都建立一个独一无二的用户名以及口令。然后,你应当启用ssh,并干掉Telnet.
在Cisco Native IOS上启用ssh,禁止Telnet | |
命令 |
解释 |
username admin1 privilege 15 password 0 Admin-Password |
建立一个叫做admin1的系统管理员,每一个管理都必须重复。 |
aaa new-model |
使用一个本地数据库,设置为AAA模式 |
aaa authentication login default local | |
aaa authorization exec default local | |
aaa authorization network default local | |
aaa session-id common | |
ip domain name MyDomain.com |
建立一个用于认证的名字 |
crypto key generate rsa |
建立数字证书。使用至少768位的Diffie-Hellman关键字 |
line vty 0 4 |
进入vty配置 |
transport input ssh |
仅允许ssh 登录 |
在 Cisco Catalyst OS上启用ssh,禁止Telnet | |
命令 |
解释 |
set crypto key rsa 1024 |
创建一个1024位的RSA密钥 |
set ip permit 10.0.10.0 255.255.255.0 ssh |
明确仅允许指定IP范围内的地址ssh |
set ip enable |
要注意,对Cisco Native IOS交换机来说,Native IOS命令同样可以工作在Cisco IOS路由器上。无法使用ssh可能会导致口令被窃,并让攻击者获得对交换架构完全的控制权。
关闭 VTP和 SNMP安全
这听起来很难令人相信,但是在我当顾问的日子里,我看到过大量的网络根本不曾在他们的Cisco交换机中配置VTP域口令。如果你把它以默认值丢在那里的话,那么你就相当于拱手交出了国门的钥匙,并将你的整个交换机架构公布在了网页上,任何人都可以看到它。在“configt”的全局配置模式中使用下述命令,或者在较老的Cisco软件镜像中使用“vlandata”的VLAN数据库模式,来锁闭你的VTP配置。务必确认使用你自己的字符串以及IP地址,来取代示例中的相关参数。
在 Cisco Native IOS上配置VTP | |
命令 |
解释 |
vtp domain My-VTP-name |
设置 VTP 名称 |
vtp password My-VTP-password |
设置 VTP 密码 |
vtp pruning |
开启 VTP pruning |
在Cisco Catalyst OS上配置VTP | |
命令 |
解释 |
set vtp domain My-VTP-name |
设置 VTP 名称 |
set vtp passwd My-VTP-password |
设置 VTP 密码 |
set vtp pruning enable |
开启 VTP pruning |
你同样也应当设置你的SNMP(SNMP版本3更合适)安全,这些是有效的口令。检查此文档,以获取对Cisco SNMP管理指南完整版。下面是个示例,用于演示如何使用正确的口令,在“config t”的全局配置模式下,配置一个SNMP只读及读写的服务器。
为Cisco Native IOS配置SNMP | |
命令 |
解释 |
snmp-server community MY-Read-Only-string ro 50 |
对来自ACL 50的SNMP请求设置只读字串 |
snmp-server community MY-Read-Write-string rw 51 |
对来自ACL 51的SNMP请求设置读写字串 |
access-list 50 permit IP-address-ro |
建立只读SNMP服务器ACL。允许多于一个。 |
access-list 51 permit IP-address-rw |
建立读写SNMP服务器ACL。允许多于一个。 |
为Cisco Catalyst OS配置SNMP | |
命令 |
解释 |
set snmp community read-only read-only-string |
设置只读字串 |
set snmp community read-write read-write-string |
设置读写字串 |
set snmp community read-write-all rwo-string |
设置全部读写字串 |
如果你根本不打算使用SNMP,你应当在Native IOS之中,在全局配置模式下,使用“no snmp-server”命令将其彻底关闭。这样你就可以跳过前述的所有SNMP命令,直接阅读下文。
关闭基本端口
交换机应当像安全领域中的其他事物一样,使用那种最低权限的理念。设置一个交换机的最好方法就是在部署时先关闭所有的端口,然后再一一打开自己需要的端口。除此以外,你应当将每一个端口都放入一个不曾使用的,无处可去,没有默认网关的VLAN之中。你可以建立一个名为 “unused(不曾使用)”的VLAN,并使用一个指定的数字,比如333,然后将所有的端口都放入这个VLAN之中。在下面的例子里,我们将使用一台基于传统CIscoIOS的48口交换机。
在Cisco Native IOS上的基础端口锁闭 | |
命令 |
解释 |
int range FastEthernet0/1 - 48 |
进入接口1 - 48 |
switchport access vlan 333 |
设置端口到VLAN 333 |
switchport mode access |
关闭自动VLAN中继 |
shut |
关闭端口 |
在Cisco Catalyst OS上的基础端口锁闭 | |
命令 |
解释 |
set vlan 333 1/1-2 |
设置sup卡端口到VLAN 333 |
set vlan 333 3/1-48 |
设置所有blade 3端口到VLAN 333 |
set trunk 1/1-2 off |
禁止所有SUP卡端口的中继 |
set trunk 3/1-48 off |
禁止在所有blade 3端口上的中继 |
set port disable 1/1-2 |
关闭所有Blade 1上的全部端口 |
set port disable 3/1-48 |
关闭所有Blade 3上的全部端口 |
对所有交换机上的blade以及端口都需要重复"set vlan/trunk/port"命令 |
你将需要为所有的交换机进行上述工作,具体则要根据机器的型号和操作系统类型来定。如果你是在使用某种堆叠,你将不得不为每个堆叠都坐上一次。然后,当你插入服务器时,你“不关上”该端口,并将其设置到正确的VLAN上,或者甚至将其转化成一个中继端口(如果的确需要的话)。当你将VLAN设置到服务器和工作站上是,永远也不要使用VLAN1,这是默认的交换机上的自然VLAN,也不要使用你人工指派的VLAN数字。不在服务器,工作站,或者其他设备上使用nativeVLAN将可以有效阻挡频繁的VLAN攻击。如果你不进行这个基础锁闭进程的话,那么在VLAN1上,所有的交换机端口默认都是打开的。而这正是许多人当前使用交换机的方式,多么恐怖的一个错误。
当你检查每一个端口,并连上新设备时,你应当在Cisco IOS中使用“description My-Port-Name”命令,来对每一个端口正确标示。Cisco Catalyst OS使用“set port name 3/43My-Port-Name”命令来标示端口。这一点在SNMP向类似Solarwinds或者HPOpenView这样的服务器报告时特别有用,因为在报告中将直接给出端口描述。这是最好的文档形式,因为它们的确有用。
那些不曾使用这个基本端口锁闭进程的人们,则相当于允许任何人闯入他们的交换机网络,并连上任何一个他们喜欢的VLAN.
关闭VLAN 中继
无论何时,当在任意端口上使用VLAN中继时,该中继端口应当最小化VLAN数目,仅保留那些需要穿越交换机的VLAN.在下述例子中,我们将配置一个中继端口,仅允许VLAN 12-14以及20-22.
Cisco Native IOS上的VLAN中继锁闭 | |
命令 |
Description |
interface GigabitEthernet1/0/2 |
在Cisco 3750上进入第二个gigabit端口 |
switchport mode trunk |
打开中继模式 |
Switchport trunk encapsulation dot1q |
设置中继类型为IEEE 802.1q |
switchport trunk allow 12-14, 20-22 |
仅允许Vlan 12-14以及20-22 |
Cisco Catalyst OS上的VLAN中继锁闭 | |
命令 |
Description |
Clear trunk 1/1-2 1-1005 |
设置sup 卡端口到VLAN 333 |
Clear trunk 3/1-48 1-1005 |
在所有SUP卡端口上禁止中继 |
为每一个blade以及每一个端口重复"clear trunk"命令 | |
Set trunk 1/2 12-14 |
设置端口1/2 允许vlan 12-14 |
Set trunk 1/2 20-22 |
设置端口1/2 允许vlan 20-22 |
要注意,在一个Catalystos上,清除默认允许的VLAN中继将意味着非常大量的工作,因为默认状态下,所有的 VLAN都是打开的。在这种情况下,事实上我们在Catalystos上所定义的VLAN12-14以及20-22将没有任何意义,因为它只不过是更大的 1-1005中的一部分,而后者默认全部是打开的。而在Cisco NativeIOS上,每一个VLAN默认都是被阻挡的,除非特别定义其打开。
如果在锁闭一个中继上允许的VLAN方面失败的话,将意味着所连接的设备可能会连上的VLAN数目,将会远远超过你的期望。
STP BPDU以及Root防护
通过发送BPDU通讯,黑客们可以玩出所有的下流把戏,而BPDU可以迫使VLANSTP(展开树协议)重新计算,至少花费30秒才可以清除。这样他们就可以不定期的发动DoS攻击(拒绝服务)。他们也可以装作是STProot而染指相关通讯。BPDU防护以及root防护可以阻止这种类型的攻击。
Cisco Native IOS上的STP BPDU以及Root防护 | |
命令 |
解释 |
spanning-tree portfast bpduguard |
在交换机上打开BPDU防护 |
spanning-tree guard root |
在交换机上开启“Root guard” |
spanning-tree rootguard |
某些IOS版本上使用的另一个root guard命令 |
Cisco Catalyst OS上的STP BPDU以及Root防护 | |
命令 |
解释 |
set spantree portfast bpdu-guard enable |
在交换机上开启BPDU防护 |
set spantree guard root 1/1-2 |
在blade 1开启root guard |
set spantree guard root 3/1-48 |
在blade 3开启root guard |
为每一台blade以及每一个端口重复"set spantree guard root"命令 |
注意,你必须禁止所有连接其他交换机的端口上的root防护以及BPDU防护。如果这个安全功能部署失败的话,将允许黑客们针对整个交换结构发动BPDU拒绝服务攻击,并可能截取交换机通讯。
阻止CAM表格以及DHCP耗尽
黑客们可以利用这样一个事实,那就是交换机和DHCP服务器所能保留的MAC地址或IP地址是有限的。黑客可以修改自己的 MAC地址,并从DHCP服务器上要求多个DHCP地址,直到用尽DHCP池中每一个单独IP地址。黑客也可以非常迅速的修改自己的MAC地址,从而快速的将任意以太网交换机的CAM表格占满。一旦一台以太网交换机的CAM表格被塞满,它事实上就变成了一个以太网集线器。不仅会导致性能的急剧降低,同时交换机将被迫的向每一个端口广播所有的网络通信,这让黑客可以偷听交换机上的每一台设备,看起来就像是在使用一台集线器一样。要阻止CAM表格攻击以及 DHCP耗尽攻击,你必须按照下属示例的方法对端口防护进行正确的配置。
Cisco Native IOS阻止CAM表格以及DHCP爆炸 | |
命令 |
解释 |
int range FastEthernet 0/1 - 48 |
进入接口1 - 48 |
switchport port-security |
打开端口防护 |
switchport port-security maximum 5 |
允许最高5个MAC地址 |
switchport port-security violation protect |
超过5个的MAC地址后的数据包全部丢弃 |
switchport port-security aging time 2 |
|
switchport port-security aging type inactivity |
|
对所有其他交换机上的所有其他端口重复上述步骤 |
防止Cisco Catalyst OS上的CAM表格以及DHCP爆炸 | |
命令 |
解释 |
set port security 1/1-2 enable |
在所有blade 1端口上启用端口防护 |
set port security 3/1-48 enable |
在所有blade 3端口上启用端口防护 |
set port security 1/1-2 port max 5 |
在blade 1上允许5个MAC地址 |
set port security 3/1-48 port max 5 |
在blade 3上允许5个MAC地址 |
set port security 1/1-2 violation protect |
超过5个的MAC地址后的数据包全部丢弃 |
set port security 3/1-48 violation protect |
超过5个的MAC地址后的数据包全部丢弃 |
set port security 1/1-2 age 2 |
|
set port security 3/1-48 age 2 |
|
set port security 1/1-2 timer-type inactivity |
|
set port security 3/1-48 timer-type inactivity |
|
对所有其他blade上的所有其他端口重复上述步骤 |
注意,你必须禁止那些连接其他交换机的端口的安全。
阻止DHCP,MAC,以及IP欺骗
ARP以及IP欺骗允许黑客佯装其他人,从而截取通讯。DHCP欺骗则允许一个黑客将一个信任客户端放入一个伪造IP范围的以太网段上,从而淹没攻击者达到网络的其他地方。所有这些方式都是为了截取网路通讯,以便攻击者可以嗅探内部局域网上的各种秘密。你可以通过部署 DHCP调查,动态ARP检查,以及IP源地址防护来阻止这些攻击。
在Cisco Native IOS阻止DHCP,MAC,以及IP欺骗 | |
全局命令 |
解释 |
ip dhcp snooping vlan 1-1000 |
为Vlan 1-1000打开DHCP调查 |
ip dhcp snooping |
打开DHCP调查 |
no ip dhcp snooping information option |
|
ip arp inspection vlan 1-1000 |
VLAN 1-1000上的ARP检查 |
ip arp inspection log-buffer entries 1024 |
|
ip arp inspection log-buffer logs 1024 interval 10 |
|
主机接口命令 |
解释 |
int range FastEthernet 0/1 - 48 |
进入接口1 - 48 |
no ip arp inspection trust |
锁闭ARP的主机端口 |
ip arp inspection limit rate 15 |
设置ARP pps检查速率 |
ip verify source vlan dhcp-snooping |
打开IP来源防护 |
DHCP 客户端接口命令 |
解释 |
no ip dhcp snooping trust |
不允许DHCP服务器 |
ip dhcp snooping limit rate 10 |
限制对DHCP的请求速率 |
仅在信任的DHCP端口以及连接其他信任交换机的端口上执行下述命令。下述部分命令将和上面的相反。在正当的互联交换机上以及DHCP服务器上执行下述命令失败,将会导致网络瘫痪以及DHCP瘫痪。 | |
DHCP 服务器接口命令 |
解释 |
ip dhcp snooping trust |
这个端口允许DHCP服务器 |
交换机接口命令 |
解释 |
ip arp inspection trust |
解锁用于连接信任交换机的端口 |
要注意,Cisco Catalyst OS不支持这些反欺骗功能,所以将你的大CAT OS迁移到Native OS上是一个很好的想法。这意味着你将不得不将你的MSFC路由器和CAT OS 交换机合并到一个单一的Native IOS镜像里。
对Layer 2的防护,以及强化交换机架构,应对内部局域网威胁而言,反欺骗绝对是一个非常重要的部件。内部威胁应当和外部威胁处于同等重要地位,因为一台简单的被恶意软件所侵害的工作站,加上rootkit工具,即可将一个外部威胁立刻转变成为内部威胁。
限制STP域大小
这也是在交换机架构方面常常为人忽视的一个方面。一个单一STP(展开树协议)域应当永远不允许长得太过巨大或者变成极度复杂。我曾在一个大学校园里,碰到一个个人用户,仅仅因为偶然插入一个小型桌面交换机,而后偶然的将CAT-5电缆接成自我回环,就瘫痪了整个校园的数千台电脑和IP电话。无论何时,一旦 STP域中发生BPDU请求而导致STP重新计算的话,那些同样含有校园网VLAN的网络就会神秘中断,每次都会锁定整个校园网长达30秒之久。数据网络的中断已经够惨了,但是它同时还会导致IP电话架构瘫痪。于是数以百计的人们根本无法工作,因为没有数据,同时也没有了电话。
要避免过大和过于复杂的STP拓扑结构,你必须路由通讯,而不是交换通讯。实际上,这意味着你必须使用layer 3兼容交换机来取代Layer2交换机,因为后者仅知道如何交换通讯,而不懂如何路由通讯。这也意味着VLAN将无法在那些不属于统一STP交换域的交换机之间展开。这种结构改变可能意味着整个校园局域网的基础架构重新设计,这可不是一件轻松的事情,但是在部署任何IP电话系统之前,这些问题必须被考虑。
维护交换机软件到最新的稳定版本
在网络安全方面,最大以及最常见的罪恶之一,就是人们假设交换机以及架构上的路由是和铅制造一样的,并且你永远不需要去碰它。但是如果你是在运行一台Cisco交换机或者路由器,而它的软件镜像是半年之前的话,那么在你的交换机或者路由器上就很可能存有某些漏洞。说起来很悲哀,但是我的确看到人们在他们的Cisco设备上,运行3年以前或者4年以前的软件镜像,而没有任何想法。
永远更新你的网络设备,就像你不断从硬件厂商那里获取稳定的软件来更新你的客户端以及服务器电脑一样,并始终对相关的更新保持留意。所有的网络和安全工程师都应当问自己一句“上一次我对网络设备软件升级是什么时候了?”。制定出一份行动计划,其中包括一个立即执行的计划,以及一个长期实行的计划,并将其用于管理之中。保持你的远见,提前消除事故,而不是去等待事故的发生。
总 结
Layer2安全是信息安全方面最被人忽视的一个方面,常常被安全审核错过,特别是当那些审核更多的聚焦在策略之上,而不是实际部署的时候。黑客们不关心策略,他们只会利用任何可用的安全漏洞。在获得网络中单台电脑的根用户权限后,他们第一时间要做的事情之一,就是实施 Layer 2攻击。Layer2攻击常常被忽视的另一个方面,就是那些部署基于VPN的无线网络安全的公司。一旦不可靠的匿名客户端被允许进入一个AP,而AP通常都会直接连上一台内部交换机,并由VLAN进行分段,而你可能就会忘记Layer安全。要限制来自AP的MAC地址数量非常困难。基于这个原因,高度建议基于VPN的无线局域网安全,应当避免使用基于802.1x的无线局域网安全。
越过这些锁闭进程之后,则是Layer2交换机安全的下一步,关于无线局域网802.1x安全的有线版。幸运的是,用于无线局域网认证的同一架构也适用于有线认证。基于端口的安全措施基本上说起来都是——即使你插入了一个端口,我们也不会让你进入我们的Layer2交换机架构的,除非你能证明你是谁,以及你是被许可进入网络的。尽管许多公司已经部署了802.1x无线局域网安全,但部署802.1x有线版的还是很少。 WindowsXP自动进行无线局域网802.1x配置,但是不会自动进行802.1x有线局域网配置。这一点会在Vista中进行改变,无论有线还是无线的802.1x局域网都会自动进行配置。
除了对802.1x的增强之外,Vista也增加了NAP(网络访问保护)客户端,也就是微软版本的NAC(网络访问控制)标准。NAP或者NAC使用了802.1x基于端口的安全理念,并更进一步,不仅在它们被允许连上网络之前,要求来自客户端的认证和许可,同时也核定客户端的健康状况。如果一个客户端可以证明自己是谁,并证明自己得到网络的认证,他们还依旧必须证明自己是足够健康的。NAC健康通常被定义为完全进行了安全补丁方面的更新,正确部署了防火墙,并使用了最新的防病毒库定义。如果一个认证的客户端电脑不能通过健康测试,他们将被放入网络上的一个受限隔离区,直到他们使用正确的更新将自己修正完毕为止。