你大概率遇到过这种诡异情况:办公室明明刚修好网络,第二天又断一片;杀毒软件、企业防火墙一件不少,可就是有人能把网关地址“顶”掉,让本该发往路由器的流量全部经过他手里。这就是 ARP 攻击,一个存在了三十多年的老问题,到了 2025 年依然是很多企业内网的心腹大患。
传统防火墙基本看不到这种二层报文,终端安全软件往往也要等攻击真实发生后才发出告警。想靠自己扛住,就得把防备位置下沉到局域网内部,用“静态绑定 + 接入层动态防御 + 持续监测”这三板斧把 ARP 的戏路彻底封死。
1. ARP攻击为什么总能穿透现有安全设备:先搞懂“无认证”这个病根
1.1 ARP“说话不验身份”,这就是一切漏洞的源头
ARP(Address Resolution Protocol)的核心作用很简单:在以太网环境里,发送方只知道目标 IP,需要通过广播询问对方 MAC 地址。整个过程像在小区楼下喊:“202 室是哪位?请把门牌号告诉我。”这时候如果有一个不是 202 室的人回答“我就是 202 室”,大家通常不会去核实。
传统 ARP 协议没有身份核验机制,主机会无条件相信收到的 ARP 回复,还会把这条记录放进 ARP 缓存表。攻击者想要的就是这个漏洞:只要伪造 IP 和 MAC 的对应关系,就能让受害者的网络流量改道。
网关地址是所有终端流量必须经过的“十字路口”,所以攻击者最爱冒充的就是网关。伪装成功后,受害者的上网请求会先到攻击机器,攻击者再开 IP 转发把包转出去。用户表面上看网络没有完全断,但所有明文流量已经在中间被完整“看”了一遍。
1.2 一个反常识的点:防火墙和EDR在这里基本“失灵”
很多非网安专业的同学会问:公司装了防火墙,怎么 ARP 攻击还能成功?这里有个协议层级认知问题。
防火墙通常部署在三层网络边界,依据 IP 地址和端口做访问控制。而 ARP 报文属于二层广播报文,它在同一个广播域内部就完成了交互,根本不会经过三层防火墙。除非防火墙运行在三层交换机上,并且开启针对二层攻击的检测功能,否则它对这个过程完全没有感知。
再说终端安全软件。现在不少 EDR 已经加入了 ARP 防护模块,可以拦截本机对外发送的伪造 ARP 报文,也可以在检测到网关 MAC 变化时弹窗告警。但它有一个天然的盲区:如果某台设备没有安装安全软件,或者攻击者直接伪造了打印机、智能摄像头这类 IoT 终端的 ARP 报文,安全软件同样管不到。终端越杂、越不受控,这个盲区就越大。
1.3 攻击不只是让你断网,真正的目的是流量和凭据
外行看 ARP 攻击,以为只是“有人搞破坏,让我上不了网”。现实中红队和攻击者眼里,ARP 攻击的价值远大于断网:
- 网关欺骗:把受害者的上网流量引到攻击机器,做中间人嗅探。HTTP 明文密码、内网 DNS 请求、未加密的 FTP/SMB 传输,都是可获取的信息。
- 双向欺骗:同时对受害主机和网关发伪造 ARP,让双方都以为攻击机器就是对方。这种模式下流量转发更稳定,用户几乎感觉不到异常。
- 手机/智能家居设备的厂商 App 或固件,常存在明文交互或弱加密接口。攻击者拿下网关后,连这些设备的控制权也能顺手接管。
所以在红队演练里,ARP 攻击常被用作横向移动的“第一双脚”。一个不设防的接入网口,可能就是整个内网沦陷的起点。
1.4 防御前先明确身份:你的网络更适合哪种姿势
不同网络规模,防御动作的优先级完全不一样:
| 网络形态 | 对 ARP 攻击的暴露程度 | 最合适的防御路线 |
|---|---|---|
| 家用/小工作室,一台普通路由器加几个设备 | 设备少但全局裸奔 | 静态网关绑定 + 固定 DHCP 地址,先解决最核心的欺骗面 |
| 中小公司,办公区几十到几百人,一台网管交换机 | 中大型攻击面,且无专人维护 | 静态绑定打底,再开启交换机 DHCP Snooping、DAI、端口安全 |
| 企业园区/多部门,多台接入汇聚设备 | 如果没有统一策略,交换网里到处是突破口 | 先搞清 VLAN 边界,再按接入交换机逐个部署动态防御,最后加监测闭环 |
先判断自己属于哪一类,再动手配置,不然很容易在错误的层次上浪费时间。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 动手防御前先花10分钟自查:确认攻击迹象,也找准信任边界
2.1 看ARP缓存、对比网关MAC,这是最直接的体检
先把攻击证据找出来,再谈防御。Windows 下打开命令提示符或 PowerShell,输入:
bat复制arp -a
查看网关 IP 对应的 MAC 地址。正常情况下,这个 MAC 应该是路由器或者三层交换机物理接口的 MAC,位置固定且相当长时间不变。如果系统里出现两个不同 MAC 对应同一个网关 IP,说明网络里已经有欺骗行为。
Linux/macOS 可以用:
bash复制ip neigh show | grep 192.168.1.1
把这条命令查到的 MAC 和路由器背面标签或交换机接口配置里的 MAC 对比。对不上,就基本可以确认网关 ARP 已经被污染。
想进一步验证,也可以抓包看重复响应,Wireshark 里用如下过滤条件观察:
text复制arp
arp.dup.flag == 1
Wireshark 如果发现同一个 IP 由多个 MAC 回复,会在 arp.dup.flag 字段打上标记。看到这个标记,就别再等它自己恢复了,后面要做的防御动作一个都少不了。
2.2 判断合法设备的“可信名单”和“信任端口”
防御 ARP 攻击,本质上是建立一套“谁可信、谁不可信”的名单。最理想的状态是:网络里每台合法设备都能被识别,每一条 ARP 报文都能被校验。但现实往往是设备类型杂乱,终端随插随拔,名单很难做到 100% 准确。
所以在动手前,先列清楚这几项:
- 合法 DHCP 服务器/网关接在交换机的哪个上联口;
- 哪些服务器、打印机、NAS 使用固定 IP;
- 办公终端主要通过 DHCP 动态获取还是手动指定;
- 是否存在访客 Wi-Fi、调试口、临时测试口这类未纳管网口。
把这些信息摸清楚以后,你才能决定哪里设 trusted,哪里设 untrusted,哪里可以放心绑定。
3. 关键防御步骤一:静态绑定关键网段,让存量欺骗先失效
3.1 静态绑定的本质:把原本“谁都能回答”的问题变成固定答案
操作系统对静态 ARP 条目的信任优先级非常高。只要在 ARP 缓存里写入了静态条目,系统就不太会接受后续动态报文对这条记录的改写。
这相当于给网关地址发了一张“专属身份证”,只有写着这个 MAC 的回复才会被接受,其他回复即使宣称自己是网关,也会被当成无效信息丢弃。
静态绑定治标的效果立竿见影,但它不适合无限扩大应用范围。要是一张网有几百台动态获取 IP 的电脑,你一条一条手工绑,会把自己维护进坑里。所以这一步只建议针对网关、核心服务器、打印机、NAS 这类数量有限且地址固定的重要设备。
3.2 路由器、交换机、终端三种环境的绑定参考
在 Cisco 风格的三层设备上,可以为静态 IP 设备绑定 ARP:
text复制Router(config)# arp 192.168.1.10 00e0.fc12.3456 ARPA
在华为/H3C 风格设备上,命令类似:
text复制system-view
arp static 192.168.1.10 00e0-fc12-3456
注意,不同厂商的接口关键词可能有差异,但思路是同一个:把固定 IP 和它真正的 MAC 地址锁定起来。配置完后记得保存配置,否则设备重启后静态表项就没了。
Windows 终端上绑定网关 MAC,使用管理员权限的 PowerShell:
powershell复制netsh interface ipv4 add neighbors "以太网" 192.168.1.1 00-0c-29-aa-bb-cc
Linux 终端上,可以这样配置永久静态邻居:
bash复制sudo ip neigh replace 192.168.1.1 dev eth0 lladdr 00:0c:29:aa:bb:cc nud permanent
其中 nud permanent 的意思是条目永久有效,不会被系统老化清掉。
3.3 最容易被忽略的坑:单向绑定等于没绑全
静态绑定最典型的翻车情况是只绑了一头。
在公司小型网络里,很多管理员只喜欢在路由器上绑定员工终端。这种做法能防止有人冒充终端欺骗路由器,但没法防止攻击者冒充网关欺骗终端。终端如果把网关识别成了攻击机器,照样会把上网流量往攻击者那边送。
正确的姿势是双向绑定:
- 设备侧:终端绑定网关 MAC,确认所有去往网关的流量只发给真实网关;
- 网关侧:网关绑定核心服务器或关键终端的 MAC,防止有人伪造成合法终端接收原本发给它的流量。
另外一个隐藏坑是 DHCP 租约漂移。假设你在网关侧静态绑定了某台服务器的 IP 和 MAC,但公司 DHCP 地址池里也包含这个 IP,后续这台服务器租约到期重新获取,可能拿不到原来那个 IP。静态绑定就相当于把一块地址“焊死”在某台设备上,必须先在 DHCP 服务器中为这些设备做固定租约或者保留地址,再配置静态 ARP,否则网络迟早出现地址冲突。
提示:静态绑定不是一劳永逸的方案。随着设备更换、网卡更换、IP 调整,绑定表需要同步更新。维护成本过高时,就应该用下一步的交换机动态防御来减少人工依赖。
4. 关键防御步骤二:用交换机自带的免费“动态防御”掐死增量攻击
4.1 DHCP Snooping、DAI、端口安全到底是怎么联动的
网管交换机上有一组出厂默认关闭,但使用成本极低的安全功能,组合起来几乎能根治绝大多数 ARP 欺骗:DHCP Snooping、DAI(Dynamic ARP Inspection) 和 端口安全。
三者的分工如下:
- DHCP Snooping 会监听 DHCP 交互过程,默默建立一张表,记录“哪些 IP 是哪个 MAC 在哪个接口、哪个 VLAN 下获取的”。这张表就是后续 ARP 报文检验的可信名单。
- DAI 会在交换机收到 ARP 报文时,把这个报文宣称的 IP、MAC 与 DHCP Snooping 表进行核对。对不上的报文直接丢弃,并记录日志。
- 端口安全则限制一个物理端口最多能学习几个 MAC 地址,并可以用 sticky 方式锁定首次学习到的 MAC,防止有人把攻击设备临时接入网口。
可以这样理解:DHCP Snooping 是“登记名册”,DAI 是“门卫查证”,端口安全是“限制同一房间只能住固定人数”。三件套组合使用,攻击者就算成功混进网线,也很难再靠伪造 ARP 报文建立中间人链路。
4.2 网管交换机上的配置顺序,错了容易全网断网
这里必须强调顺序问题。很多人真正上手时容易翻车,不是因为命令不会敲,而是把全局开启 DHCP Snooping 放在了设置信任端口之前。
如果你的合法 DHCP 服务器接在某个上联口,而交换机默认所有接口都是 untrusted,那么一旦全局开启 DHCP Snooping,DHCP OFFER 报文会被交换机当成非法报文丢掉,全网终端都可能拿不到地址。所以正确顺序是:先把合法 DHCP 服务器和网关的上联口设为 trusted,再全局开启相关功能。
以常见的 Cisco 风格交换机为例,参考配置逻辑如下:
text复制# 1. 选择 DHCP 服务器所在 VLAN,并开启 DHCP Snooping
ip dhcp snooping
ip dhcp snooping vlan 10
# 2. 把上联合法 DHCP 服务器/核心交换机的接口设为 trusted
interface GigabitEthernet0/24
ip dhcp snooping trust
ip arp inspection trust
# 3. 配置 DAI,并对 ARP 报文做更严格的校验
ip arp inspection vlan 10
ip arp inspection validate src-mac dst-mac ip
# 4. 在接入端口开启端口安全,锁定每个端口学习到的 MAC
interface range GigabitEthernet0/1 - 0/10
switchport port-security
switchport port-security maximum 1
switchport port-security mac-address sticky
华为/H3C 风格的交换机上,实现思路相同:
text复制# 开启功能
dhcp enable
dhcp snooping enable
dhcp snooping enable vlan 10
# 上联口设信任
interface GigabitEthernet0/0/24
dhcp snooping trusted
# 开启基于绑定表的 ARP 防攻击
arp anti-attack check user-bind enable
# 为固定 IP 服务器建立静态用户绑定
arp anti-attack check user-bind ip 192.168.1.10 mac 00e0-fc01-0001
不同厂商、不同型号之间,命令写法会有差异,但核心动作就是:开 DHCP Snooping、设信任口、开 DAI、配置端口安全。配置完用 show ip dhcp snooping binding(Cisco)或 display dhcp snooping user-binding(华为)查看绑定表是否正常生成。网里合法 DHCP 用户越多,这张表就越完整。
4.3 没有网管交换机怎么办:用路由器和终端能力做降级方案
预算不足、设备老旧,没有可管理的交换机,确实没法配置 DHCP Snooping 和 DAI。这种情况下,有一句实话必须说清楚:普通路由器挡不住二层 ARP 欺骗,因为路由器根本看不到二层报文。
你可以先从终端侧硬扛:给每台办公电脑写一个开机脚本,用 netsh interface ipv4 add neighbors 静态绑定网关 MAC。同时在 DHCP 服务器上把每个终端都分配固定租约,让一台设备始终对应一个固定 IP,降低静态绑定带来的冲突概率。
终端数量比较多时,还可以考虑物理隔离:把打印机、服务器放在一个单独的傻瓜交换机上,用户终端放在另一个傻瓜交换机上,中间用路由器/VLAN 隔离。访问关系尽可能从三层控制,减少二层广播域里可以被攻击的成员数量。
注意:这些降级方案只能缓解,不能根除 ARP 攻击。想在网络层面彻底掐断攻击,还是建议把核心接入设备逐步替换成支持 DHCP Snooping 和 DAI 的网管交换机。
5. 关键防御步骤三:轻量监测配合应急闭环,攻击来了也不慌
5.1 用轮询脚本实时盯住网关MAC,异常立刻告警
即使做了前面两步,也建议给网关加一道“盯梢”。因为攻击者可能会在你维护空档期里发起新的尝试,也可能绕过部分策略,让网关 ARP 出现短暂污染。一个每 3 秒比对一次网关 MAC 的轻量脚本,就能把这类异常暴露出来。
Windows 环境的 PowerShell 轮询脚本可以这么写:
powershell复制$gatewayIP = "192.168.1.1"
$expectedMAC = "00:0C:29:AA:BB:CC"
while ($true) {
$neighbor = Get-NetNeighbor -IPAddress $gatewayIP -AddressFamily IPv4 -ErrorAction SilentlyContinue
if ($neighbor) {
$currentMAC = ($neighbor.LinkLayerAddress -replace '-', ':').ToUpper()
if ($currentMAC -ne $expectedMAC) {
Write-Output ("ALERT " + (Get-Date).ToString() + " 网关MAC异常: " + $neighbor.LinkLayerAddress)
}
}
Start-Sleep -Seconds 3
}
把这个脚本放到一台长期在线的监控服务器或跳板机上运行,一旦网关 MAC 发生变化,输出日志里就会留下告警。再加上 Windows 计划任务或 Systemd 服务,就能做到无人值守。
Linux/macOS 环境也可以用类似逻辑,直接解析 ip neigh show 输出,或者用 Python 封装成一个小守护程序。脚本的价值不在技术含量,而在于它把你从“事后救火”变成了“事中发现问题”。
5.2 抓到攻击后的三件事:抓包、隔离、溯源
就算前面防御都做了,也不能保证攻击者一次都不成功。真正重要的是中招之后有没有一套标准动作。
第一步,立即抓包取证。在受害终端上用 Wireshark 打开抓包,过滤条件写:
text复制arp
重点观察是否有大量来自同一 MAC 的 ARP 响应,以及网关 IP 是否对应多个 MAC。保存好 pcap 文件,记录攻击起止时间,这是后续向相关安全人员汇报或报警的关键证据。
第二步,在交换机上隔离可疑端口。如果通过 DAI 日志或者 MAC 地址表定位到了攻击源 MAC,直接找到它对应的物理端口:
text复制show mac address-table address 00e0.fc66.7788
确认端口后,用 shutdown 把端口关闭,将攻击设备从网络中摘除。如果是无线环境,则从无线控制器或 AP 管理平台踢掉对应设备并加入黑名单。
第三步,顺着物理位置找人。MAC 地址的前 6 位是厂商 OUI,可以在网上查询到设备厂商信息,判断是一台电脑、手机还是其他终端。再结合交换机端口对应的信息点位置,去现场确认接入设备的归属。
5.3 从一次真实处置中总结出的经验:别急着关防御功能
有一次我们处理类似问题,最初怀疑是某台电脑中毒,但发现 DHCP Snooping 绑定表一直在更新,DAI 的丢弃计数却在持续上升。后来排查发现,是有人在自己工位下偷偷接了一个旧路由器,这个路由器开启了 DHCP 服务,导致大量非法 DHCP OFFER 报文被 DAI 拦截。
这种问题在落地上很常见:安全策略生效后,网络里持续出现异常丢弃,维护人员为了省事,直接把 DAI 关掉,问题看似消失,实则是把安全防线退回了零。遇到这种情况,应该追查丢弃计数的来源,把非法设备清出去,而不是关闭防御。
6. 红队视角复盘:蓝队防御最容易漏掉的三个环节
6.1 红队拿到一个网口后会怎么做
红队视角看 ARP 攻击时,通常会问三个问题:
- 这个网口所在的 VLAN 是否还属于同一个广播域?
- 接入交换机有没有开 DHCP Snooping 和 DAI?
- 如果伪造网关 MAC,终端会不会直接信任?
如果前两个问题都是“是”,最后一个问题也是“是”,那对红队来说,这个网口基本等于拿到了一把进入内网流量管道的钥匙。攻击者只需要用工具持续发送伪造 ARP 报文,把网管服务器的流量引到自己机器上,再用一个简单的转发工具把流量放行,用户几乎无感。
2025 年的攻击手法并不会变得花哨,大部分内网突破依然依赖这种老而弥坚的二层漏洞。熟练的蓝队不会轻视 ARP 这类基础攻击,因为真正的攻击链往往就是从这台“不起眼的打印机”开始的。
6.2 蓝队防御落地时最容易被绕过的三个细节
在实际攻防演练中,我发现很多防御失效并不是因为没有部署策略,而是部署时留下了三个容易被绕过的细节:
第一,只在核心交换机上做 DAI,接入交换机上没做。攻击者接入的是某台接入交换机,它上联到核心。如果核心开启了 DAI 而接入交换机没有,攻击者发出的 ARP 欺骗报文可能会被核心拦截,但同一个接入交换机下面连接的终端之间、以及终端到接入交换机的流量,依然可能遭受欺骗。DAI 必须部署在广播域入口,也就是接入层。
第二,把大量端口都设成 trusted。有的人配置时图省事,直接把所有端口设置为 DHCP Snooping trust,这样 DHCP Snooping 的绑定表形同虚设,DAI 也失去了检验依据。正确做法是只信任上联口和连接合法 DHCP 服务器的端口。
第三,固定 IP 设备没有加入静态绑定表。DAI 的原理是拿 ARP 报文和绑定表核对,但绑定表的数据来源主要是 DHCP Snooping。如果服务器没有通过 DHCP 获取地址,也没有手工配置静态绑定表项,它的合法 ARP 报文会被 DAI 当成非法报文丢弃,结果就是服务器莫名其妙无法通信。这时不能直接关闭 DAI,而要把这些固定 IP 设备的 IP-MAC 关系手动加入绑定表。
6.3 我推荐的落地顺序:先治标,再治本,最后形成闭环
如果只是看了一篇文章就想把公司内网防御全部拉满,大概率会被配置过程劝退。我更建议用一个稳一点顺序推进:
第一周先做静态绑定,重点覆盖网关、关键服务器、打印机,这一步不需要额外花钱,只需要花一个晚上整理资产清单。第二周再找机会给核心交换机和接入交换机开 DHCP Snooping、DAI 和端口安全,配置时先在测试 VLAN 验证,确认不影响正常业务后逐步扩大范围。第三周部署网关 MAC 监测脚本,把异常发现和处置流程写成文档,并明确由谁负责在收到告警后去排查端口。
这三步做完,再回头评估是否需要继续上准入认证(如 802.1X)等更重的手段。
从我个人实战体会来说,ARP 攻击防的不是“技术难度”,而是防的“运维惰性”。只要能把这套“静态绑定清存量、动态防御管增量、监测告警做闭环”的思路真正落到设备上,哪怕 2025 年再冒出新的内网攻击链路,你至少不会在最基础的二层环节被轻易打穿。
