我见过不少机房的真实情况:防火墙、入侵检测买了一堆,策略也写得密密麻麻,但接入层交换机几乎裸奔。随便找根网线插到工位,就能收到整个广播域的DHCP请求、ARP报文,甚至能伪装成网关把全楼流量骗走。很多人觉得局域网攻击离自己很远,实际上只要有人能物理接触到内网接口,或者连上一个不干净的访客Wi-Fi,二层攻击的破坏力一点都不比外网入侵小。交换机安全配置,就是内网防线里投入产出比最高的一环——它不一定能挡住所有攻击,但能把你最常遇到的几种廉价攻击挡在门外。
这篇文章我会从攻击者的视角倒过来讲防御,把最典型的局域网攻击原理、交换机上的防护配置、我在现场踩过的坑一次说清楚。无论你是刚接手公司网络的IT,还是准备考网络认证的工程师,照着配置一遍,内网的安全底子就能结实不少。
1. 局域网攻击的真实面貌:不止是ARP欺骗
1.1 二层攻击为什么总被忽略
传统安全方案喜欢围绕“边界”做文章,防火墙、WAF、上网行为管理都堆在出口。但局域网攻击发生在OSI第二层,也就是数据链路层,这一层几乎是天然的信任区。交换机默认把所有端口都当成可以信任的接入点,只要插上网线、拿到IP,就能参与整个广播域的“讨论”。
很多攻击者把内网当成第二战场,一旦通过钓鱼Wi-Fi、乱插的U盘、前台待客电脑之类的方式进入内网,立刻就能用二层协议做手脚。这类攻击的特点是工具成熟、操作门槛低,一个脚本就能搞定,而且流量不经过边界防火墙,传统安全设备根本看不见。
更麻烦的是,二层协议在设计时就没怎么考虑认证和防伪。交换机靠MAC地址转发,靠ARP解析IP到MAC的映射,靠STP防止环路,但这些协议本身都是明文、无认证的。攻击者只要伪造报文,就能干扰交换机的转发行为,让别人把数据交到自己手里。
1.2 常见攻击类型与防护对照表
我按攻击目标把最常见的局域网攻击分了几类,每类都有对应的交换机会话或功能来做防御。先建立整体概念,后面再逐个配置。
| 攻击类型 | 攻击目标 | 典型后果 | 主要防护手段 |
|---|---|---|---|
| MAC泛洪 | 交换机CAM表 | 交换机退化为Hub,流量被嗅探 | 端口安全、限制MAC学习数量 |
| DHCP欺骗 | DHCP服务器 | 终端获取恶意网关/DNS,流量被劫持 | DHCP Snooping |
| ARP欺骗 | 网关与主机 | 双向ARP缓存投毒,中间人攻击 | DAI、IP-MAC绑定 |
| VLAN跳跃 | VLAN隔离 | 跨VLAN访问,隔离形同虚设 | 关闭动态Trunk、改Native VLAN |
| STP根桥欺骗 | 生成树 | 网络拓扑被改变,流量经攻击者转发 | BPDU Guard、Root Guard |
| 广播风暴 | 二层广播域 | 交换机CPU飙升,网络瘫痪 | storm-control、环路保护 |
这张表我建议保存下来,后面每一节都会对应展开。你会发现大多数防御配置并不复杂,复杂的是判断“该在哪些端口上开什么策略”,以及“开了之后会不会误伤正常业务”。
2. 第一道闸门:端口安全把MAC泛洪挡在外面
2.1 MAC泛洪的根本原因
交换机的二层转发依赖CAM表,也就是MAC地址表。CAM表存的是“MAC地址 + VLAN + 出接口”的对应关系,数据帧进来后,交换机查表决定从哪个端口发出去。问题在于CAM表容量是有限的,低端接入交换机一般只有几千到几万条。
攻击者用发包工具伪造大量不同源MAC地址的报文灌进一个端口,CAM表很快被占满。表满了以后,交换机对未知单播帧的处理策略是向同一VLAN内所有端口广播,整台设备就退化成了Hub。所有同事之间的通信都会被攻击者网卡收到,配合Wireshark直接就能抓流量、拆出账号密码。
很多朋友以为这种攻击只存在于教科书,实际上用现成的发包工具几秒钟就能把某宝几百块的小交换机打满。防护思路也很直接:限制每个端口能学习到的MAC地址数量,或者把这些地址固定下来,超出的帧一律丢弃或断开端口。
2.2 端口安全配置三步走
以思科IOS为例,端口安全的配置核心是switchport port-security这条命令。先看一个完整的接入端口配置:
interface GigabitEthernet0/1 switchport mode access switchport access vlan 10 switchport port-security switchport port-security maximum 2 switchport port-security mac-address sticky switchport port-security violation restrict spanning-tree portfast第一步,先把端口设成access模式并指定VLAN,这是接入层端口的常规动作。第二步,开启port-security,用maximum限制这个端口最多学习到的MAC数量。第三步,用mac-address sticky让交换机自动记住当前端口的MAC地址,生成一条绑定关系,下次设备再接入时直接读取配置,不用重新学习。
violation参数有三个选项:protect、restrict、shutdown。protect只是静默丢弃多余MAC的流量,不记日志;restrict同样丢弃流量,但会打日志、触发SNMP告警;shutdown直接把端口置为err-disable状态,彻底断开。
2.3 几个容易踩的坑
端口安全配置很简单,但上线后容易误伤正常业务。我在现场遇到过几类情况。
第一类,会议室、工位上经常换人换设备,maximum设成1就容易让第二台设备无法上网。办公网的接入端口建议设为2或3,或者开启sticky后观察一周,把实际设备数量统计出来再定阈值。
第二类,打印机、IP电话这类设备有自己的MAC,如果接在同一个端口,需要把maximum适当调高。有的IP电话和PC串接,一个端口至少要学2个MAC。
第三类,violation shutdown模式下端口被关闭后不会自动恢复,必须手动执行shutdown再no shutdown。对无人值守的弱电间来说,一个误触发可能让你跑一趟现场。建议配合errdisable recovery cause psecure-violation命令,让端口在指定时间后自动恢复:
errdisable recovery cause psecure-violation errdisable recovery interval 300这样即使违规触发,5分钟后端口能自动起来,至少不会因为一次误报就断了整个办公室的网络。
3. DHCP Snooping + DAI:把欺骗类攻击按在地上
3.1 DHCP欺骗和ARP欺骗是怎么链式发生的
DHCP欺骗的原理很粗暴:攻击者在接入层部署一个伪造的DHCP服务器,终端发DHCP Discover广播时,谁的应答先到终端就听谁的。攻击者可以返回一个指向自己的网关地址和DNS地址,终端上网流量全被引导到攻击者手里,这就是典型的中间人攻击。
ARP欺骗更直接。ARP协议本身没有认证机制,终端启动时会广播ARP请求“谁是这个IP”,攻击者直接回复一个伪造的ARP应答,说“我是网关”。之后终端的ARP缓存里就记录了“网关IP -> 攻击者MAC”,数据包全部往攻击者的网卡上送。
这两类攻击经常一起出现,数据链路一断或被劫持,什么HTTPS、加密邮件都保护不了你,因为攻击者可以直接做SSL剥离、DNS劫持。不过好消息是,交换机上有两位“门神”正好干这个:DHCP Snooping负责建立信任关系,DAI负责校验ARP报文。
3.2 DHCP Snooping的关键配置
DHCP Snooping的核心思想是区分信任端口和不信任端口。连接合法DHCP服务器的上行端口配置为信任端口,连接终端的接入端口是非信任端口。非信任端口只能接收DHCP服务器的Offer、ACK报文,不能主动对外提供DHCP服务。
思科交换机上的配置分三步。第一步全局开启:
ip dhcp snooping ip dhcp snooping vlan 10,20第二步,把连接合法DHCP服务器的上联口设置成信任端口:
interface GigabitEthernet0/24 ip dhcp snooping trust第三步,对非信任端口做速率限制,防止攻击者用大量DHCP报文打满CPU:
interface GigabitEthernet0/1 ip dhcp snooping limit rate 10limit rate后面的数字是每秒允许的DHCP报文数量。办公网一般设成10到15就够了,如果某台设备一次性大量请求IP,可以适当提高,但别设太高,否则限速就失去意义了。
DHCP Snooping开启后,交换机会自动维护一张绑定表,记录“MAC地址 + IP地址 + VLAN + 端口 + 租期”,这张表是后面DAI的基础。使用show ip dhcp snooping binding能看到当前绑定信息。
3.3 DAI的配置与依赖关系
DAI,全称Dynamic ARP Inspection,本质上是借助DHCP Snooping的绑定表来检查每一个ARP报文。如果ARP报文的源IP、源MAC和绑定表不匹配,就丢弃并记日志。
配置同样简单,但有个前提:必须提前开启DHCP Snooping,否则没有绑定表可用。开启方式如下:
ip arp inspection vlan 10,20 ip arp inspection validate src-mac dst-mac ipvalidate后面的参数表示同时检查ARP报文里的源MAC、目的MAC和IP地址是否与绑定表一致。这一步能拦掉大部分伪造ARP报文的尝试,但要注意,绑定表只覆盖通过DHCP获取地址的终端。如果网络里有静态IP的服务器,需要单独配置静态绑定,否则DAI会把正常流量误判为攻击:
arp access-list STATIC_HOSTS permit ip host 192.168.10.100 mac host 0050.7966.6a01 ip arp inspection filter STATIC_HOSTS vlan 10DAI开启后交换机会对每个ARP报文做查表操作,对CPU有损耗。接入终端数量大或者设备性能弱的情况下,建议先在监控VLAN试点,观察CPU使用率和误报情况再逐步推广。
4. 看不见的横向扩展:VLAN跳跃和STP攻击
4.1 双标签VLAN跳跃的原理
VLAN本意是做二层隔离,但配置不当就会被人钻空子。VLAN跳跃攻击最常见的形态是双标签攻击。攻击者接在Trunk口上,发送一个带两层802.1Q标签的数据帧,外层标签是Native VLAN,内层标签是目标VLAN。
当帧到达交换机时,交换机剥掉外层标签,看到Native VLAN,直接按VLAN内部的转发逻辑处理,内层标签被忽略,结果帧被“错误地”当作目标VLAN的数据来转发,实现了跨VLAN通信。这类攻击的触发条件比较苛刻:攻击者必须能连接到一个Trunk口,同时Native VLAN还得是VLAN 1。所以很多人以为它不好利用,但一旦满足条件,影响非常大。
4.2 防VLAN跳跃的配置清单
防御思路就三条:关掉不用的Trunk、改掉Native VLAN、关掉自动协商。以思科为例:
interface GigabitEthernet0/24 switchport trunk encapsulation dot1q switchport mode trunk switchport trunk native vlan 999 switchport nonegotiateswitchport nonegotiate表示不主动发送DTP协商帧,避免接口被动态协商成Trunk。所有接入端口一律switchport mode access,需要上联的口才配Trunk。把Native VLAN从默认的VLAN 1改成其他不用的VLAN,比如例子里的999,这样双标签攻击就失去了内层标签可用的条件。
华为设备上用port link-type trunk、port trunk allow-pass vlan和port trunk pvid vlan也能达到相同效果。关键原则是一致的:默认VLAN 1能不用于用户业务就不用于,所有用户VLAN都要在接入端口上显式放行,不给自动协商留机会。
4.3 BPDU和根桥选举攻击的防护
STP本来是为了防环路,但它的根桥选举机制也成了攻击入口。攻击者把自己的交换机接入网络,发送更高优先级的BPDU报文,欺骗根桥选举,让自己设备成为根桥。成为根桥后,攻击者可以影响整个二层网络的转发路径,把自己变成流量必经之地。
防御手段有两个,一个叫BPDU Guard,一个叫Root Guard。spanning-tree portfast让接入端口跳过STP的监听和学习状态,直接进入转发状态,加快终端上线速度。但PortFast端口理论上不应该收到BPDU,如果收到了,说明有陌生交换机接入。BPDU Guard的作用就是检测到BPDU后立刻把端口关掉:
interface range GigabitEthernet0/1 - 24 spanning-tree portfast spanning-tree bpduguard enableRoot Guard则用于保护不想被抢占的根桥位置。在核心交换机的所有上联口上开启Root Guard,如果某个端口收到优先级更高的BPDU,该端口会被置为阻塞状态,直到攻击者消失:
interface GigabitEthernet0/1 spanning-tree guard rootBPDU Guard和Root Guard区别很大,一个管“接入端口不该有BPDU”,一个管“骨干端口不该被抢根桥”,别混用。配置前先理清端口角色,否则容易误伤正常组网。
5. 别忽视基础的广播风暴和链路异常
5.1 广播风暴的形态
广播风暴大家都听过,但很多人觉得只会在环路故障时出现。其实恶意玩家也能主动制造广播风暴:通过一个接入端口向交换机灌入大量广播帧、组播帧或未知单播帧,交换机会把这些帧向VLAN内所有端口转发,瞬间打满带宽和CPU,正常业务直接卡死。
这类攻击不挑设备,越便宜的交换机越容易被打瘫。防御手段是风暴控制,也就是在端口上设置广播、组播、未知单播的速率阈值,超过阈值后交换机采取动作,比如丢弃超限流量或暂时关闭端口。
5.2 storm-control的配置
思科的storm-control配置如下:
interface GigabitEthernet0/1 storm-control broadcast level 20 storm-control multicast level 20 storm-control unicast level 20 storm-control action traplevel 20表示该端口的广播流量超过带宽的20%时,交换机开始丢弃超出的部分。这个百分比要根据实际业务调整,办公网里视频会议、网络广播软件多,阈值太低容易误杀正常业务。我习惯先用show interface观察一段时间的正常广播占比,再设定阈值。
华为设备上用broadcast-suppression或者storm suppression,原理一样,都是按百分比限速。需要提醒一句:风暴控制只对入方向流量生效,也就是从接入端口进入交换机的流量,出方向的广播还是依赖整网环路保护和VLAN设计。
5.3 链路单向故障和UDLD
还有一种比较隐蔽的二层故障叫单向链路,光纤一根断了或者收发异常,交换机以为链路是通的,但实际上只能收不能发。这种情况下STP可能检测不到故障,产生转发环路,网络时好时坏,特别难排查。
UDLD协议就是专门检测单向链路的。开启后交换机会在链路上周期发探测帧,如果一段时间内没收到对端回包,就判断链路为单向,把端口置为err-disable:
udld enable udld aggressive接入层交换机一般用udld enable就够了,骨干链路上建议用udld aggressive模式,响应更积极。配置了UDLD之后,光模块故障或光纤单芯断裂能被快速定位,不用再靠人工插拔光纤试探。
6. 排查与验证的实战套路
6.1 常用show命令与日志判断
光配置不看效果等于白配。我个人维护交换机时,有几条命令是每天必看的。
show port-security能查看所有开启了端口安全的接口状态,重点是SecurityViolation那一列的计数,不为0说明有人在尝试超额接入。
show ip dhcp snooping binding用于检查绑定表是否正常生成。如果某个VLAN的绑定表一直不增长,要怀疑DHCP Snooping的信任端口设错了,合法DHCP服务器的请求被当成非法报文丢了。
show ip arp inspection interfaces和show ip arp inspection statistics能查看DAI在端口上的丢弃统计和不匹配次数,是判断ARP欺骗是否真实发生的硬指标。
show spanning-tree inconsistentports能查看Root Guard阻塞的端口,一旦出现inconsistent状态,说明有人试图抢根桥。
日志方面,errdisable状态是判断交换机自动保护动作是否触发的关键。看到%PM-4-ERR_DISABLE: psecure-violation日志,基本可以断定端口安全拦截了非法设备。
6.2 一次内网异常排查实操
去年帮一家制造企业排查过网络卡顿问题,症状是每天上午十点左右,某个车间VLAN开始丢包,持续半小时后自动恢复。常规思路先查环路、查带宽占用,都没发现问题。
后来我去机房翻日志,发现一台接入交换机的某个端口在每天同一时间触发psecure-violation,又因为设置了errdisable recovery自动恢复,所以网络恢复了。但当时的配置只设了shutdown没写recovery,实际上端口并没有断。真正的异常是车间里一台贴标机在每天上午更新固件,MAC地址临时变化,触发了端口安全。
我把Maximum从2改成4,并观察了两天,丢包消失。这就是一个典型的“安全策略误伤业务”案例,排查思路也很直白:从日志找触发点,从触发点反推业务行为,而不是一上来就把安全功能全关掉。
6.3 验证攻击是否被挡住的方法
没有攻击者配合的时候,可以自己模拟一遍,验证配置确实生效。方法如下:
先记录当前show mac address-table的输出,然后用笔记本接在受控端口上,手动把网卡MAC改成另一个地址,反复改几次,看交换机端口是否进入err-disable或丢弃计数是否增加。
对于ARP欺骗,可以在笔记本上装发包工具,伪造一个与网关同IP的ARP应答。如果DAI配置正确,show ip arp inspection statistics里的ACL或DHCP Snooping丢弃计数会立刻上涨。用Wireshark抓包也会看到攻击报文被交换机丢弃,终端侧收到不到伪造应答。
验证完记得把测试端口清除违规状态,否则后面接真设备会莫名其妙上不了网。
提示:所有防护配置都不是独立生效的。DHCP Snooping的绑定表是DAI的基础,DAI的ACL又需要静态绑定来补充;BPDU Guard只对接入端口有意义,Root Guard只对骨干端口有意义。配置之前先画一遍端口角色和信任边界,比记一百条命令都管用。
说点我的个人体会。安全永远是平衡的艺术,交换机安全配置一定要结合业务场景来做,不要一上来就把所有功能全开。办公网里DHCP Snooping几乎可以无脑部署,但端口安全的violation模式要慎重选择;IDC机房对端口安全的需求远没有对STP防护强烈,但对DAI却可能因为静态IP过多而配置量巨大。我的建议是先挑一个VLAN做试点,跑两周,把日志、误报、性能开销都观察一遍,再逐步推全。二层安全没有银弹,但用好了每一招,都能让内网比默认状态结实得多。