3. ARP攻击与广播:从原理到防御
ARP协议,说白了就是网络世界的“户籍警”。它负责把IP地址翻译成MAC地址。没有它,数据包就找不到门牌号。但恰恰是这个基础协议,成了广播泛滥的重灾区。
我处理过不少网络卡顿的案例,十有八九跟ARP脱不了干系。今天咱们就把它彻底讲透。
3.1 ARP协议工作原理
ARP的工作流程其实很简单。主机A要找主机B,但只知道B的IP,不知道B的MAC。怎么办?它就在局域网里吼一嗓子:“谁是192.168.1.2?请把你的MAC告诉我!”
这个吼声,就是ARP请求。它是广播帧,目标MAC是全F。局域网里所有设备都能听到。只有IP匹配的那台设备会回应:“我是192.168.1.2,我的MAC是aa:bb:cc:dd:ee:ff”。
回应是单播,直接发给询问者。询问者收到后,把IP-MAC映射写进ARP缓存表。下次再找同一台设备,直接查表,不用再吼了。
ARP缓存表结构
| IP地址 | MAC地址 | 类型 | 老化时间 |
|---|---|---|---|
| 192.168.1.1 | 00:11:22:33:44:55 | 动态 | 120秒 |
| 192.168.1.2 | aa:bb:cc:dd:ee:ff | 动态 | 120秒 |
| 192.168.1.254 | 00:11:22:33:44:66 | 静态 | 永久 |
这里有个关键点:ARP是无状态的。它不验证请求的真伪,也不检查回应的合法性。谁回应,它就信谁。这就是漏洞所在。
3.2 ARP欺骗导致广播泛滥
ARP欺骗,就是攻击者冒充别人。攻击者C给主机A发一个ARP回应:“我是网关192.168.1.1,我的MAC是cc:cc:cc:cc:cc:cc”。主机A信了,把网关的MAC改成了C的MAC。
从此,主机A发往互联网的所有数据,都先到C手里。C可以抓包、篡改、甚至直接丢弃。这就是中间人攻击。
更可怕的是广播泛滥。攻击者可以伪造大量ARP请求,每秒发几千个。每个请求都是广播帧,交换机得把它复制到所有端口。网络瞬间被填满,正常业务根本跑不动。
我曾经遇到过一个案例:某公司早上9点网络瘫痪,所有电脑都ping不通网关。我赶到现场,抓包一看,ARP广播每秒超过5000个。顺着MAC地址找到一台办公电脑,里面中了ARP病毒。拔掉网线,网络立刻恢复。后来查监控,那台电脑凌晨3点就开始发ARP包了。
ARP欺骗的典型症状:
- 网络间歇性卡顿,丢包率忽高忽低
- 部分电脑能上网,部分不能
- ping网关有时通有时不通
- ARP缓存表里出现重复IP对应不同MAC
为什么会这样?因为攻击者不是一直发,而是间歇性发送伪造ARP。正常设备和攻击者轮流“抢答”,导致MAC地址来回跳变。数据包就像无头苍蝇,一会儿送到真网关,一会儿送到攻击者手里。
3.3 DAI动态ARP检测配置
对付ARP欺骗,最有效的办法是DAI(Dynamic ARP Inspection)。它的核心思想很简单:只信任DHCP Snooping绑定表里的IP-MAC映射。不在表里的ARP包,直接丢弃。
DAI的配置分三步走:
- 启用DHCP Snooping:让交换机监听DHCP交互,建立IP-MAC绑定表。
- 启用DAI:在VLAN上开启ARP检测。
- 设置信任端口:连接路由器、服务器的端口设为信任,不检测ARP。连接终端的端口设为不信任,严格检测。
下面是一个典型的Cisco交换机配置示例:
! 全局启用DHCP Snooping
ip dhcp snooping
ip dhcp snooping vlan 10
! 设置上行端口为信任
interface GigabitEthernet0/1
description Uplink to Core
ip dhcp snooping trust
! 设置下行端口为不信任(默认就是不信任)
interface GigabitEthernet0/2
description Access Port
no ip dhcp snooping trust
! 在VLAN 10上启用DAI
ip arp inspection vlan 10
! 可选:设置DAI验证项
ip arp inspection validate src-mac dst-mac ip
我个人习惯:在启用DAI之前,先确认DHCP Snooping绑定表是完整的。用show ip dhcp snooping binding查看。如果表里缺了关键设备,DAI会把它们的ARP包全丢掉,造成断网事故。
DAI的验证逻辑:
| ARP包类型 | 源IP-MAC是否在绑定表 | DAI动作 |
|---|---|---|
| 请求 | 是 | 放行 |
| 请求 | 否 | 丢弃并记录日志 |
| 回应 | 是 | 放行 |
| 回应 | 否 | 丢弃并记录日志 |
DAI还有一个杀手锏:速率限制。它可以限制每个端口每秒能通过的ARP包数量。超过阈值,端口会被err-disable。这能有效防止ARP广播风暴。
! 设置DAI速率限制
interface GigabitEthernet0/2
ip arp inspection limit rate 15 pps
! 设置err-disable恢复时间
errdisable recovery cause arp-inspection
errdisable recovery interval 300
嗯,这里要注意:速率限制的阈值不能设得太低。正常网络里,ARP包每秒也就几个到十几个。设成15pps已经够用。如果设成5pps,开机时大量ARP请求可能触发误封。
我曾经踩过这个坑:给一个300台电脑的办公区设了10pps的速率限制。结果早上8点半,大批员工同时开机,ARP请求瞬间超过阈值,几十个端口被err-disable。电话被打爆了。后来改成30pps,问题解决。
最后,咱们用一张图总结ARP攻击与防御的核心逻辑:
总结一下:ARP协议本身没有安全机制,这是设计缺陷。但我们可以通过DAI来弥补。配置DAI时,记得先确认DHCP Snooping绑定表完整,再设置合理的速率限制。这样既能防攻击,又不会误伤正常业务。