扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
许多安全管理员多关注网络层和应用层的安全问题,经常会忽略Layer 2网络架构(数据链路层),同时这也是网络安全和可靠性方面最容易被人忽视的一个方面。在本文中,我会向你展示如何修正交换机配置以及架构方面最常见的错误。虽然我使用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 key |
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域口令。如果你把它以默认值丢在那里的话,那么你就相当于拱手交出了国门的钥匙,并将你的整个交换机架构公布在了网页上,任何人都可以看到它。在“config t”的全局配置模式中使用下述命令,或者在较老的Cisco软件镜像中使用“vlan data”的VLAN数据库模式,来锁闭你的VTP配置。务必确认使用你自己的字符串以及IP地址,来取代示例中的相关参数。
在 Cisco Native IOS上配置VTP | |
命令 |
描述 |
vtp domain My-VTP-name |
设置VTP名字 |
vtp password My-VTP-password |
设置VTP口令 |
vtp pruning |
打开VTP修剪 |
在Cisco Catalyst OS上配置VTP | |
命令 |
描述 |
set vtp domain My-VTP-name |
设置VTP名字 |
set vtp passwd My-VTP-password |
设置VTP口令 |
set vtp pruning enable |
打开VTP修剪 |
你同样也应当设置你的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之中。在下面的例子里,我们将使用一台基于传统CIsco IOS的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数字。不在服务器,工作站,或者其他设备上使用native VLAN将可以有效阻挡频繁的VLAN攻击。如果你不进行这个基础锁闭进程的话,那么在VLAN1上,所有的交换机端口默认都是打开的。而这正是许多人当前使用交换机的方式,多么恐怖的一个错误!
当你检查每一个端口,并连上新设备时,你应当在Cisco IOS中使用“description My-Port-Name”命令,来对每一个端口正确标示。Cisco Catalyst OS使用“set port name 3/43 My-Port-Name”命令来标示端口。这一点在SNMP向类似Solarwinds或者HP OpenView这样的服务器报告时特别有用,因为在报告中将直接给出端口描述。这是最好的文档形式,因为它们的确有用。
那些不曾使用这个基本端口锁闭进程的人们,则相当于允许任何人闯入他们的交换机网络,并连上任何一个他们喜欢的VLAN。
VLAN中继锁闭
无论何时,当在任意端口上使用VLAN中继时,该中继端口应当最小化VLAN数目,仅保留那些需要穿越交换机的VLAN。在下述例子中,我们将配置一个中继端口,仅允许VLAN 12-14以及20-22。
Cisco Native IOS上的VLAN中继锁闭 | |
命令 |
描述 |
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中继锁闭 | |
命令 |
描述 |
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 |
要注意,在一个Catalyst os上,清除默认允许的VLAN中继将意味着非常大量的工作,因为默认状态下,所有的VLAN都是打开的。在这种情况下,事实上我们在Catalyst os上所定义的VLAN 12-14以及20-22将没有任何意义,因为它只不过是更大的1-1005中的一部分,而后者默认全部是打开的。而在Cisco Native IOS上,每一个VLAN默认都是被阻挡的,除非特别定义其打开。
如果在锁闭一个中继上允许的VLAN方面失败的话,将意味着所连接的设备可能会连上的VLAN数目,将会远远超过你的期望。
STP BPDU以及Root防护
通过发送BPDU通讯,黑客们可以玩出所有的下流把戏,而BPDU可以迫使VLAN STP(展开树协议)重新计算,至少花费30秒才可以清除。这样他们就可以不定期的发动DoS攻击(拒绝服务)。他们也可以装作是STP root而染指相关通讯。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拒绝服务攻击,并可能截取交换机通讯。
(责任编辑:陈毅东)
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者