KernelRanch
返回文章列表

攻击排查顺序:从 Ray ID 到处置的七步

2026-11-10 #Cloudflare

被打的时候最容易犯的错是马上开开关。Under Attack Mode 一开、规则一加,症状可能变了,但你不知道是哪一步起的作用,也就没法收尾。有效的排查是一条固定顺序:先确认请求停在哪一层,再判断是哪类攻击,然后按"降损—精确—改架构"的次序处置,最后留记录。

这条顺序与具体工具无关,换任何 CDN 都适用。下面的路径按 Cloudflare 的界面与字段走,涉及的手段分布在前几篇里:WAF 规则见 77-waf-basics-free-rules.md,限流见 78-rate-limiting.md,机器人见 79-bot-management.md,DDoS 见 84-ddos-protection.md。

第一步:收集六个要素

动手之前先要数据,否则后面全是猜:

要素从哪拿用途
时间窗用户反馈、监控告警时间对齐图表与事件
具体 URL用户截图、访问日志判断是单路径还是全站
HTTP 状态码用户端或 curl分流到不同排查路径
Ray ID错误页底部、响应头 cf-ray在事件与日志里精确定位
客户端 IP 与国家用户提供,或事件里的字段判断是个别还是面
是否可复现换网络、换设备试一次区分本地网络问题与服务端问题

Ray ID 是最有用的一项。它把控制台的 Security Events、wrangler tail 的输出、源站日志三处的同一条请求串起来,比"大概下午三点"精确得多。免费档没有工单支持,但排查自己的问题时它同样省时间。

第二步:定位请求停在哪一层

用 curl 看响应头,一次请求就能分出三种情况:

curl -s -D - -o /dev/null https://example.com/some/path

看三样东西:有没有 cf-ray 头、server 是不是 cloudflare、状态码是多少。

现象请求停在哪下一步
无 cf-ray,连接超时或 DNS 失败边缘之前(DNS / 网络)查 DNS 解析与本地网络
有 cf-ray,403 且响应体是挑战页或拦截页边缘(规则 / 挑战)查 Security Events
有 cf-ray,502/522/524边缘到源站之间查源站与回源配置
有 cf-ray,200 但内容异常已到源站,业务问题查应用日志

这一步能排掉一半的误判。"站点打不开"里相当一部分是 DNS 没生效、本地网络问题、或者自己的规则把自己拦了。灰云记录(仅 DNS)的请求不经过边缘,也没有 cf-ray,看起来像"Cloudflare 没起作用",实际是配置如此。

第三步:看整体曲线

Analytics → Traffic,选时间窗,看四个分布:请求量、状态码、来源国家、缓存命中率。

请求量垂直上升且来源集中在平时没有流量的国家,指向流量型攻击或代理池。请求量不变但源站负载暴涨,指向缓存失效或回源被打。状态码里 4xx 突增通常是扫描,5xx 突增是源站扛不住。

缓存命中率这一项常被忽略。命中率从 90% 掉到 40%,意味着同样 QPS 下源站压力翻了两倍多,可能不是攻击变强了,而是某次发布把缓存规则弄坏了。

第四步:看安全事件

Security → Events,按时间窗筛,重点看三列:Action(block / challenge / allow)、Service(哪个功能处理的,如 waf、rate limit、bot fight mode)、Path。

这里能回答两个问题:攻击有没有被挡住,以及是不是误伤。如果大量正常用户的请求出现在 block 列表里,先解决误伤再谈防护。判定方法:看被拦请求的 UA 与路径分布,如果集中在真实浏览器的 UA 与正常页面上,多半是规则写得太宽。

第五步:按类型选手段

类型特征处置
流量型 DDoS带宽跑满、请求数不一定高通常自动清洗,检查源站 IP 是否暴露
请求洪泛QPS 垂直上升,路径集中缓存 + 速率限制 + Under Attack Mode
扫描与爆破大量 404、集中在登录与已知漏洞路径WAF 规则拦路径,登录加 Turnstile
爬虫采集单 IP 慢速遍历列表页,UA 固定Bot 管理、速率限制、内容侧限流
应用层漏洞利用特定参数、报错信息、异常响应长度修应用 + 托管规则 + 虚拟补丁
账号滥用登录成功率高但行为异常应用侧风控,边缘只能限速

分类之后手段就确定了。用错手段的典型例子:拿 Under Attack Mode 对付慢速爬虫——爬虫本来就不跑 JS,挑战会把它挡住,但正常用户与 API 也一起挂;正确做法是按路径与 UA 做规则。

第六步:按次序处置

先降损,再精确,最后改架构。

降损阶段只做可逆动作:提高缓存覆盖、给最贵的接口加速率限制、必要时开 Under Attack Mode 并在攻击回落后立刻关。这一步的目标是让站点可用,不是把攻击者找出来。

精确阶段做规则:按路径、UA、国家、ASN 组合,逐条加、逐条看事件。一次只加一条,加完观察五分钟,确认拦截量上升且误伤没有同步上升。

改架构阶段解决根因:把管理入口放到 Access 后面、把 API 拆到独立子域、把源站藏到 Tunnel 后面、给表单加 Turnstile。这些动作的生效周期是小时到天,不适合应急,但能避免下次再被打穿。

第七步:留记录

攻击结束后记四样东西:时间线(开始、峰值、回落)、峰值指标(QPS、带宽、源站负载)、生效的规则清单、以及是否有误伤。这份记录在下次遇到同类攻击时能省掉一半时间,也是判断"要不要升级套餐"的依据。

常见问题

用户报 403,是攻击还是误伤?

先看 Security Events 里这条请求的 Action 与 Service。如果 Service 是 waf 且规则是你自己写的,检查表达式是否过宽;如果 Service 是 bot fight mode,大概率是自动化客户端被当成机器人。定位到规则后,用 Skip 或调整表达式解决。

边缘显示正常,源站还是挂,怎么办?

说明请求已经穿过边缘。查三处:源站是否被直连打(防火墙是否只放行 Cloudflare 网段)、缓存是否失效导致回源放大、Worker 是否在循环调用上游。522 与 524 的区别见 82-ssl-tls-modes.md 里的报错对照。

要不要直接封攻击 IP?

对少量固定 IP 有效,对代理池无效,而且容易误伤共用出口的正常用户。优先按路径、UA、行为特征拦,IP 封禁只作为短时应急。封完之后记得设过期时间,别留下来变成半年后的神秘故障。

小结

排查的攻击性来自顺序,不是来自工具数量。先收集 Ray ID 与状态码,用一条 curl 定位请求停在哪一层,再看曲线与事件判断类型,最后按降损、精确、改架构三步处置。每一步都有可验证的产出,不会出现"改了一堆配置但不知道哪个起了作用"的局面。

日常更值得投入的是把可避免的部分提前做掉:登录加人机验证、贵的接口加限流、源站 IP 藏住、缓存命中率盯住。这四件事做完,多数攻击只是曲线上的一个尖峰。

数据来源与检索时间

检索时间 2026-11-10。

来源URL对应数据
WAF 概览https://developers.cloudflare.com/waf/Security Events 与规则的对应、免费档可用动作
速率限制规则https://developers.cloudflare.com/waf/rate-limiting-rules/免费档 1 条规则、按路径匹配的限制
Workers 限额https://developers.cloudflare.com/workers/platform/limits/请求额度与超限行为(判断攻击是否打穿到 Worker)
Cloudflare 定价页https://www.cloudflare.com/plans/免费档包含的防护项

核验说明

  • 页面为本机抓取(HTTP 200),状态码含义与免费档能力取自文档。
  • 未执行:无 Zone 权限,Security Events、Analytics 曲线、Under Attack Mode 均未在真实攻击中操作;curl -D - 判定命令只在自建 Worker 上验证过响应头里有 cf-ray 与 server: cloudflare,没有对真实故障站点执行。
  • 未验证:各类攻击的处置效果没有样本可复现;分类表与处置顺序是按文档与常见运维经验整理的,不是实测结论。