交换机如何根治ARP欺骗?华为H3C实战配置详解
早上刚到工位群里就炸了楼下生产网大量终端同时掉线Ping网关一会儿通一会儿不通。等我把笔记本接到镜像口抓包一眼就看到了问题——通篇都是同一台设备在回答“我是网关”ARP表里网关的MAC已经变成了一台办公电脑的网卡地址。这就是很典型的ARP欺骗不用怀疑。很多刚接触网络的朋友会觉得ARP欺骗是个老话题病毒软件、杀毒软件都宣传“防ARP欺骗”有什么好讲的但真正到了交换机层面尤其是你手里管着一批华为、H3C的接入交换机、汇聚交换机你会发现终端上的所谓“防欺骗”大多是事后补救真正的防线应该在交换机上。一台交换机可以同时管几十甚至几百个端口它是在数据帧进入网络的入口处就能做拦截的唯一节点。这篇文章我就把这个事彻底说透ARP欺骗到底骗了什么、交换机为什么天然适合防它、华为和H3C的交换机上怎么落地配置以及配置完以后怎么验证效果。1. ARP欺骗到底“骗”的是什么1.1 ARP的工作方式决定了它天生容易被打先花两分钟把这层关系捋清楚。以太网里两台设备要通信二层靠的是MAC地址三层靠的是IP地址。数据包在普通局域网里传输最终必须要找到目的设备的MAC地址才能把帧从网卡发出去。ARP协议干的就是这件事已知对方的IP求对方的MAC。正常流程是这样的PC-A想访问网关192.168.1.1它先看自己的ARP缓存如果没有对应的MAC就向整个广播域发一条ARP请求“192.168.1.1是谁请把你的MAC告诉我。”这个请求是广播的网段里所有设备都能收到。正常情况下只有IP是192.168.1.1的那台设备网关会回应“我是192.168.1.1我的MAC是xxxx。”其他设备虽然收到了这个请求但发现自己IP不对就不回应。PC-A收到应答后把这条“IP---MAC”的映射关系放进自己的ARP缓存表里后续发往网关的帧就直接封装到这个MAC上。这个协议在设计时完全没有考虑“安全问题”。它在链路层默认了一个前提网络上所有设备都是诚实的你问谁谁就会如实回答。问题就出在这里——ARP应答报文不需要任何认证任何一台设备都可以主动发送“我是192.168.1.1”而且很多操作系统对收到的ARP应答是无条件信任的直接把表项更新掉。我经常用一个门禁卡来打比方小区门口保安问“你是几栋几零几的”这时走过来一个人说“我是3栋502的”。保安既不查登记表也不核对身份证就让这人进去了。真正的3栋502业主反而被拦在外面。ARP协议就是这样工作了几十年。1.2 交换机为什么会“帮”攻击者把流量带偏很多文章讲ARP欺骗都停在这层但真正能不能防住关键要看交换机的转发机制。交换机本身是个二层转发设备它不关心IP地址只认MAC表FDB表。当PC-A要把数据包发给网关时这个帧的目的MAC地址已经写好了是“网关的MAC”。交换机查自己的MAC表发现这个MAC对应的出接口是连到网关的那个口就会把帧从那个口转出去。这个逻辑在正常情况下没有任何问题。但如果有人发出伪造的ARP应答把网关的MAC改掉了事情就完全变了。攻击者的操作分两步第一步向整个网段发送大量ARP应答声称“192.168.1.1的MAC是 AA:BB:CC:DD:EE:FF”而这个MAC其实是他自己网卡的第二步所有收到这条应答的主机ARP缓存里的网关表项都会被他改掉。接下来PC-A再给网关发包时目的MAC就变成了攻击者的网卡MAC。交换机查MAC表——这个MAC对应的出接口是攻击者所在的那一口于是整个帧就鬼使神差地送到了攻击者的端上。这里有个关键点容易忽略攻击者不一定只改IP-MAC映射。他发送伪造ARP应答时如果把自己的源MAC也写成网关的MAC那么交换机的MAC表也会刷新——原本“网关MAC对应上联口”的表项会被学习成“网关MAC对应攻击者端口”。这种基于源MAC学习的机制是交换机转发平面的基本特性没有特殊防护时它对这种“移动”是毫无抵抗力的。顺便说一句在框式交换机、分布式转发架构里ARP学习可能是主控板上的CPU完成的而数据转发是各接口板上的转发芯片完成的。两条路径虽然分工不同但MAC表最终会被统一同步。攻击者只要让任何一个入口收到了伪造报文经过表项同步全网转发就会受影响。这也是为什么只要一台终端发起了ARP欺骗整片网络都会迅速“沦陷”。1.3 局域网里中招后的具体表现遭遇ARP欺骗的现场我把它归纳成三种典型症状方便大家对号入座。第一种是全网掉线或者叫“大面积丢包”。攻击者冒充的是网关所有终端发往网关的流量全被他截走了。如果他不开IP转发功能数据直接石沉大海表现就是全网断网如果他开了转发功能数据会被他转发出去但多了一道中间环节延迟剧增、掉包明显。第二种是点对点的监听。攻击者只冒充某台特定主机的IP比如冒充服务器。其他终端询问服务器MAC的时候得到的是攻击者的MAC于是发往服务器的流量都会经过攻击者。这种欺骗比冒充网关更隐蔽因为大部分人只盯着网关ARP表项看不会去检查服务器表项有没有变。第三种是ARP风暴。攻击者用工具不停发送变种的ARP报文导致交换机CPU处理不过来MAC表不断抖动。表现是内网速度奇慢交换机日志刷屏有的低端交换机甚至直接死机。华为、H3C交换机如果开启了对应的防攻击功能日志里会大量出现类似“Attack Source”的告警这种情况多半就是有人在扫网段或者网络里有环路冲突。2. 交换机侧防欺骗的底层逻辑2.1 从“无条件信任”到“确定性校验”理解了ARP欺骗的原理防它的思路就顺理成章了不能无条件信任网络上发来的ARP报文必须要有依据地验证“这个IP到底该不该由这个MAC来回答”。传统网络是默认信任所有用户终端的。接入交换机只管转发不管内容谁发ARP应答都信谁声明自己是网关就认谁。防欺骗的第一步就是打破这种“无条件信任”建立一套有据可查的校验机制。这里有个核心概念一定要理解交换机防ARP欺骗并不是靠“智能识别哪台设备是好人哪台是坏人”而是建立一张“白名单表”只允许报文符合表项中记录的IP-MAC-端口-VLAN关系不符合的直接丢弃。这张白名单表就是整个防御体系的基石。2.2 防欺骗方案的三根支柱要做这件事交换机上有三个功能分工不同配合起来才完整。第一根支柱是DHCP Snooping。它的字面意思是“DHCP窥探”它监听DHCP服务器和客户端之间的交互过程。当一台终端通过DHCP获取到IP地址时交换机就能学到一个关键绑定关系某台MAC地址的设备在某个物理端口上从DHCP服务器那里获得了某个IP地址。交换机把这个关系记录到一张表里叫做“DHCP Snooping绑定表”。这张表非常关键因为一个IP是由DHCP服务器正式分配的这个消息是“可信”的。后续所有防欺骗检查都拿这张表当参照物。第二根支柱是DAIDynamic ARP Inspection动态ARP检测。它利用DHCP Snooping建立起来的绑定表对收到的每一个ARP报文进行检查。校验的核心字段包括ARP报文里的源IP地址、源MAC地址是否与绑定表里记录的“IP-MAC-端口-VLAN”一致。只要有一个字段对不上这个报文就直接被丢弃。这一下就把“冒充网关”、“冒充服务器”的伪造报文挡在了端口之外。第三根支柱是静态IP-MAC绑定和端口安全。有些网络环境里没跑DHCP全部用静态IP这时候DHCP Snooping学不到绑定表。那就需要手动建立“某个IP允许由哪个MAC在哪台设备的哪个口上使用”形式和DHCP Snooping的表类似只是来源是手工配置。端口安全则限制了每个端口最多能学习几个MAC地址防止有人用一个端口接一堆设备变相绕过防欺骗。这三根支柱配合起来思路其实很简单先搞清楚网络里存在哪些合法关系绑定表再在入口处强制校验DAI最后用端口安全堵住物理接入层的漏洞。2.3 为什么防线必须建在交换机上同样一个问题在终端上装防火墙、装ARP防火墙软件也能解决一部分。但它们解决的问题是“我的ARP缓存不被篡改”这个动作的本质是保护单台终端。你现在管着全公司几百台电脑、几十台交换机指望每台终端都自觉安装软件是不现实的。交换机是二层数据进入网络的必经之路。数据帧无论是要去网关还是要找服务器第一个经过的设备必然是接入交换机。如果在这里做过滤相当于在园区门口查出入证。伪造的ARP应答在还没进到广播域之前就被拦掉了其他终端根本收不到恶意报文整片网络的ARP缓存都是干净的。这是成本最低、覆盖最全的思路。另外从我在机房里摸爬滚打的经验看交换机上做防ARP欺骗还有一个隐藏优势它独立于终端操作系统。Windows、Linux、Android不管终端装不装安全软件交换机这层不管照样拦截。这样运维抓手就在自己手里不至于有个别终端的杀毒软件和ARP防火墙冲突而搞得全网鸡飞狗跳。3. 实战在华为/H3C交换机上配置防ARP欺骗3.1 先搭一个典型场景纸上谈兵没意思我直接用一个我在项目里经常碰到的组网来演示。接入层是一台华为S5700或者H3C S5130这两个系列在中小型网络里太常见了下挂若干办公PC上联口接到核心交换机网关在核心上DHCP服务器也在核心侧所有终端通过DHCP动态获取IP。整个组网里终端处于同一广播域同一个VLAN假设VLAN 10网段192.168.10.0/24。注意我说的这个组网里DHCP服务器和网关都在上联方向这个细节非常重要。因为后面配置信任端口的时候凡是连接可信设备的端口——比如上联口、DHCP服务器接口——都要设置为信任端口。如果你用的是模拟器比如eNSP练习协议细节可能会和物理机有差异但配置思路是一致的。文中命令以华为VRP5平台和H3C常见的Comware平台为主不同版本具体命令名称略有差异我在步骤里会特别说明哪些是关键点哪些版本差异可以容忍。3.2 第一步开启DHCP Snooping建立绑定表所有防欺骗功能都是建立在绑定表之上的所以第一步一定先把DHCP Snooping跑起来。华为交换机上的配置如下# 全局开启DHCP功能如果之前关闭的话 dhcp enable # 全局开启DHCP Snooping功能 dhcp snooping enable # 进入需要保护的VLAN视图开启该VLAN的DHCP Snooping vlan 10 dhcp snooping enable这里还有一个特别关键的配置把上联口设置为信任端口。为什么要这么做因为DHCP Snooping开启后交换机会监听所有DHCP报文。默认情况下只有连接到合法DHCP服务器的接口才被允许发送DHCP OFFER和DHCP ACK报文其他接口发送的DHCP应答会被交换机视为攻击并丢弃。如果上联口不被标记为信任终端就收不到DHCP服务器的回应地址都获取不到。interface GigabitEthernet0/0/24 # 连接到核心/网关/DHCP服务器的上联口 dhcp snooping trusted配置完成后可以查看绑定表有没有生成display dhcp snooping user-bind看到类似下面这种输出就说明终端上线时表项记录成功了DHCP Dynamic Bind Info: IP Address MAC Address Interface VLAN 192.168.10.10 00e0-fc11-2233 GE0/0/1 10 192.168.10.11 00e0-fc11-4455 GE0/0/2 10这里我提醒一下如果你是在H3C设备上操作命令会是dhcp-snooping enable中间多了一个短横线信任端口命令是dhcp-snooping trust。两者功能一样别被华为的写法误导配置前记得敲display version看一眼平台或查对应手册。3.3 第二步开启DAI动态ARP检测绑定表有了接下来开启DAI。华为交换机上常见的命令我以S5700系列为例# 全局开启IP-MAC绑定检查 arp anti-attack check user-ip-and-mac check-item ip-address mac-address这条命令的含义是交换机对所有收到的ARP报文进行检测检查报文里的源IP地址和源MAC地址是否与DHCP Snooping绑定表一致。如果报文来源IP或MAC没有在绑定表里找到或者不一致就直接丢弃。H3C设备上的开启方式则是# 全局开启ARP检测功能 arp detection enable # 在需要被检测的VLAN上启用 arp detection enable vlan 10如果希望更灵活地管理可以进入端口视图把信任端口标记出来interface GigabitEthernet1/0/24 # 上联口是可信的此接口收到的ARP报文不做检测 arp detection trust这里有一个非常关键的顺序问题必须先让绑定表里有完整的合法项再开DAI。如果你先开了DAI但绑定表是空的交换机就会认为所有ARP报文都没上报过直接把全部ARP报文都丢掉结果就是整个VLAN直接瘫痪。现实中很多第一次配置的朋友就是栽在这上面。我建议的操作顺序是先开DHCP Snooping等终端地址全部获取稳定了检查绑定表完整无误再开DAI然后立刻用几台终端验证连通性。3.4 没有DHCP的场合静态绑定怎么配有些环境不用DHCP所有终端都是静态IP比如打印机、服务器、工控机。这些场景下DHCP Snooping根本学不到绑定表DAI也就没有参照物。这种情况下需要手工添加静态绑定表项。华为设备上可以这样配置单个绑定项# 在VLAN 10下为GE0/0/1口绑定一个静态IP-MAC dhcp snooping user-bind ip-address 192.168.10.50 mac-address 00e0-fc33-4455 interface GigabitEthernet0/0/1 vlan 10H3C设备对应的命令则是dhcp-snooping binding ip-address 192.168.10.50 mac-address 00e0-fc33-4455 interface GigabitEthernet1/0/1 vlan 10手工绑定这种方式最大的问题是维护量大。你每加一台终端、每换一块网卡都要去交换机上加一条表项端口一换也要同步修改。所以它只适合服务器、网络打印机这类长期固定位置的少数设备。办公区的PC机位经常变动还是建议统一走DHCP让交换机自动学习绑定表。3.5 华为与H3C命令差异速查为了方便对照我把两组命令整理成一张速查表功能华为VRP5系列H3C Comware平台全局开启DHCP Snoopingdhcp snooping enabledhcp-snooping enable接口配置信任口dhcp snooping trusteddhcp-snooping trust查看绑定表display dhcp snooping user-binddisplay dhcp-snooping开启ARP检测arp anti-attack check user-ip-and-macarp detection enable接口信任ARP检测一般与DHCP信任联动arp detection trust手工绑定表项dhcp snooping user-bind ...dhcp-snooping binding ...另外提一个实战中常见的问题如果你用的是华为CE系列交换机比如CE6850或者较新的VRP8版本命令格式可能更偏向“基于VLAN的业务策略”风格和S5700这种老写法不一样。配置前先看一遍设备手册别直接把网上的命令复制粘贴就往生产设备上怼。4. 配置完怎么验证与排障4.1 验证绑定表与丢弃计数配置完成后很多人觉得“没报故障就说明生效了”这个想法很危险。ARP欺骗是突发的、主动的攻击行为你不能等它来了再验证效果。正确做法是自己主动触发一次看完交换机的反应。首先是确认绑定表完整。每台在线终端的IP-MAC-VLAN-端口都能在表里找到遗漏任何一台它就可能成为漏洞。然后查看DAI的丢弃计数华为display arp anti-attack statisticsH3Cdisplay arp detection statistics如果没有攻击发生统计计数里应该只有微量的清零前的历史记录。这时候你可以手动构造一个伪造报文来测试。我之前常用的方法是用一台测试笔记本手动指定IP为网关地址然后用发包工具向交换机口上发送伪造的ARP应答报文源IP写成192.168.10.1源MAC写测试机的MAC。正常情况下这个报文会被交换机直接丢弃其他终端上的ARP表项完全不会被影响。验证收尾后再看一下丢弃计数有没有对应增加有增加就说明DAI确实在干活。4.2 常见问题速查我把这几年在配置防ARP欺骗时遇到的高频问题汇总成一个表每一类都附带排查方向问题现象可能原因排查方向开启DAI后整个VLAN无法上网网关口/上联口没有设置为信任端口检查上联口是否配置了DHCP Snooping trusted或ARP检测信任状态只有部分终端获取不到IP某台接入端口没有开启DHCP Snooping或该接口被当成数据中心口处理检查端口下的DHCP监听配置确认VLAN级Snooping覆盖范围静态IP的打印機、服务器掉线绑定表里没有对应静态绑定条目手工添加静态绑定表项或将对应上联口设为信任端口偶发掉线绑定表里没有异常终端的网卡MAC被修改或者端口上接了扩展设备核对终端物理MAC检查端口下的MAC学习情况DHCP列表明明正常但DAI丢弃计数疯狂涨有设备在发免费ARP或老化探测报文且来源无法匹配绑定表抓包看丢弃报文的源IP/MAC评估来源设备并决定是否加入白名单4.3 实际运维中容易踩的坑补充几个只有动手配过才会遇到的细节。第一别把“上联口”理解为“所有接服务器的口都信任”。上联口信任是因为它是网关和DHCP服务器所在方向。你要是随手把下联口也配成了信任口那就等于给攻击者开了后门——攻击者从那个口发来的ARP报文不检测前面防得再严也没意义。第二开DAI以后不光ARP报文被管了有些交换机还会顺带做IP报文检查比如检查IP源地址是否和绑定表一致。这本来是好事但如果你网络的某个业务使用了非常规的源地址比如VRRP虚拟IP、NAT后的内网地址映射有可能会被误杀。遇到奇怪的丢包先看下是否有IP Source Guard相关的日志。第三镜像口和监控口容易让人迷惑。你把流量镜像给审计设备时虚假的ARP报文同样会被镜像一份送出去。如果审计设备也开启了ARP欺骗检测它会整天告警“全网全是ARP欺骗”。这不代表你的防御失效反而说明镜像口在真实反映被交换机拒绝的攻击流量。这时候不要关镜像调好审计设备的告警阈值就行。5. 进阶防ARP欺骗之外的联动思路5.1 ARP欺骗为什么不能用ACL来防很多人问过我既然攻击者报文里有IP和MAC我直接在交换机上写一条ACL把网关IP以外的ARP应答全部deny掉不就行了吗答案是行不通。ACL在绝大多数交换芯片上匹配的是IP报文和TCP/UDP报文。ARP是二层协议以太网类型是0x0806它既不携带IP头请求和应答报文里虽然有IP地址但那只是载荷字段也不走三层转发。普通ACL根本没有能力对它进行过滤。这也是很多人折腾eNSP“ACL单向访问不管用”的根本原因。你要实现“A能访问B、B不能访问A”这种需求是靠三层ACL匹配IP实现的但如果你想限制的是一台设备在ARP层面模拟另一台设备二层ACL和三层ACL都帮不上忙必须走DAI这种专门针对ARP报文的检测机制。如果你确实有“限制某台终端只能访问指定服务器”的需求正确做法是在三层接口上使用ACL匹配源IP和目的IP或者在接入交换机上通过端口安全限制接入设备再配合DAI做底层防欺骗。各管一层不要混用。5.2 从接入层到网关的防欺骗协同接入交换机的DAI解决了“本广播域内谁在伪造ARP”但它只对收到报文的端口所在的VLAN有效。如果网络规模大划分了很多VLAN终端跨VLAN访问网关时核心交换机或网关路由器本身的ARP表项也面临同样风险。我在实际项目里见过一种情况接入交换机防得很好但核心交换机自己不设防攻击者从另一个方向直接打核心的ARP表照样把网关路由表项污染了。所以一个完整的防ARP欺骗方案应该是接入层靠DAI和端口安全汇聚/核心层靠设备自带的ARP防攻击能力和表项固化。比如华为设备上的“ARP表项固化”特性可以确保网关IP的MAC地址在首次学到后不再被任何后续ARP报文修改。这类能力专门保护设备自身的ARP缓存和接入层的DAI互补。把这条线串起来看防ARP欺骗不是某一个功能的单打独斗而是从接入端口、VLAN内转发、网关三层表项多个层面协同防护的一整套机制。理解了这一点再回看那些设备安全配置你就知道每一道防线分别挡住了哪一路攻击。我在实际操作中的体会是防ARP欺骗这活一次性配置到位不稀奇稀奇的是半年之后还能保持表项干净、统计计数不异常。我的习惯是每季度扫一遍绑定表剔除废弃的静态绑定同时抽查几个端口看MAC地址是不是和终端报修记录吻合。网络里没有绝对的安全但把能做的校验都做了至少能把百分之九十的“冒名顶替”挡在门外。