我的站近半年没有更新过一篇内容,却在这 30 天里接待了 626 个”访客”——全部被防护拦截。我把四层日志导出来做了一次全量交叉分析,并把这 626 个 IP 在 AbuseIPDB 上批量举报后回查了全球置信分。这篇文章只呈现数据和从中得到的客观结论,不作任何布道。
一、攻击类型:64% 是 SQL 注入,且漏洞平均”年龄”超过十年
WAF 层 30 天拦截 390 次攻击,类型分布高度集中。SQL 注入 252 次里,绝大多数打在 /、/index.php、/blog/ 这类通用路径上,而非任何具体业务接口——这是无差别扫描的典型特征,不是对站点做过功课的定向攻击。
WAF 拦截的攻击类型分布
表格视图
两个可量化的”低技术含量”证据:其一,代码执行类攻击的 payload 是 ThinkPHP invokefunction 远程调用——一个 2018 年的老漏洞,而目标根本不是 PHP 框架站;其二,代码注入类全部是 PHP-CGI 参数注入(%ADd 前缀,CVE-2012-1823 变体),甚至还在请求 php-cgi.exe 这个 Windows 路径。攻击载荷与站点实际技术栈完全脱节,扫描器不在乎你是什么站,它只是把十几年攒下的漏洞清单对每个 IP 撒一遍。
二、目标路径:WordPress 暴露面的精确画像
黑名单层 1,176 次拦截的目标路径,几乎就是 WordPress 站点暴露面的一份清单。前八名中五个是 WordPress 原生或插件接口:
被拦截请求的目标路径 Top 8
表格视图
逐项客观解读:/xmlrpc.php(59 次)同时具备爆破与 pingback 放大两种攻击价值;/wp-json/wp/v2/users 系列(约 60 次)是登录名枚举——REST API 未鉴权时会把作者登录名直接返回给请求方;/robots.txt(66 次)是扫描前的踩点动作,正常浏览器极少直接请求它;而 /wp-json/wp/v2/users/me 那 83 次里,有 84 次其实来自我本人(下一节详述)。信息泄露类攻击(WAF 层 64 次)的目标高度一致:/.git/config、/.env、/proc/self/environ、云厂商凭证路径——攻击者要的是源码仓库和密钥,不是内容。
三、时间结构:攻击以”波次”而非”背景噪音”到来
按天聚合后能看到清晰的波次结构。8 月 6 日黑名单拦截单日 502 次,是平日的 10-30 倍,由多个 IP 在数小时内协同完成——典型的分布式集中扫描。此外 7 月 30-31 日、8 月 10 日各有一波 WAF 攻击高峰。
每日拦截量
表格视图
一个值得注意的细节:两类拦截的波峰并不同步。WAF 高峰日(7/30、8/10)黑名单拦截量平平,黑名单高峰日(8/6)WAF 拦截为零——两波是不同来源、不同工具的独立行动,而非同一批攻击者换手法。
四、全量回查:626 个 IP 的全球”信用档案”
把 626 个 IP 提交 AbuseIPDB 后批量回查,每个 IP 拿到三项关键数据:置信分(0-100)、历史总举报数、举报者数量。分布如下:
626 个 IP 的全球置信分分布
表格视图
三个层面的客观结论:
- 本地拦截与全球判断高度一致:217 个 IP(34.7%)置信分 80+,190 个满分。我的四层规则拦下的东西,全球几百个站点也拦下了同样的东西。
- 头部惯犯的”作案广度”惊人:27 个 IP 全球总举报数 ≥ 500,其中 13 个被 ≥ 300 个不同站点举报过,最高的一个(荷兰某主机商)被 559 个站点举报 2,292 次。这些 IP 长期、稳定、大规模地扫描整个互联网。
- 举报者数量的中位数只有 10:一半以上的 IP 只有零星记录——大量扫描节点是”新面孔”,单靠黑名单情报无法覆盖,这也是为什么它们能穿透到我的第三、四层才被拦。
头部惯犯的全球举报广度
表格视图
五、81 个白名单:一次数据质量事故的完整解剖
回查发现了本次分析最重要的一件事:81 个我当作”恶意 IP”上报的地址,是 AbuseIPDB 官方白名单。构成如下:
81 个白名单 IP 构成
表格视图
其中 44 个 CDN 代理出口 IP 值得完整还原:我的应用层防火墙统计曾显示”德国、瑞典是攻击来源前几名”——回查后确认这些 IP 属于某 CDN 的共享出口段。也就是说,攻击者把自己的域名套上免费 CDN 反代再回源,我的日志记录的只是 CDN 边缘节点。这 44 个 IP 在应用层被拦截了 300+ 次,看起来像 44 个不同攻击者,实际背后是若干个借道者,而且我永远无法从日志里得知它们的真实地址。
客观事实是:站点挂在 CDN/代理后面时,若防护层取的是 TCP 连接 IP 而非 X-Forwarded-For 透传的真实客户端 IP,则日志、统计、封禁列表记录的都是代理影子。我在不知情的情况下,把 44 个影子当攻击者封了、上报了。剩余 37 个(SEO 爬虫与搜索引擎 bot)则是被应用层规则当攻击拦截的合法抓取——个人博客的高频爬虫流量本身属于正常互联网行为。
六、来源结构:数据中心占六成,大陆流量平均分仅 14.5
626 个 IP 的基础设施属性与地域分布,呈现出明确的二元结构:
IP 的基础设施类型
表格视图
中国大陆 IP vs 境外 IP
表格视图
- 380 个 IP(61%)来自数据中心/主机托管,229 个(37%)来自固定宽带——攻击主体是租来的服务器,而非个人电脑。固定宽带里则集中了几个被植入扫描脚本的家宽网段。
- 大陆 IP 与境外 IP 性质截然不同:204 个大陆 IP 平均置信分 14.5,其中 123 个为 0-4 分(基本无恶意记录);422 个境外 IP 平均 62.8 分。大陆拦截量高主要来自 CDN 边缘挑战层(106 次全部为大陆 IP),而穿透到 WAF 层的攻击 97% 来自境外。
- 满分 IP 的国家分布:美国 51、德国 24、新加坡 17、法国 13、荷兰 12——与全球数据中心分布基本重合。
七、网段聚类:攻击基础设施高度集中
按网段聚类后发现,626 个 IP 并非均匀散布,而是集中在少数几个来源。最大单一集群 62 个 IP 来自同一海外云服务商网段,平均置信分 97;第二集群 58 个 IP 来自华东某省运营商家宽段——这 58 个 IP 此前全球零举报,我的上报是首报,是一个新启用的扫描集群。
主要攻击网段聚类
表格视图
附带的独立事实:确认 6 个 Tor 出口节点(5 个置信分满分,单节点最高被举报 226 次);一家印尼大学的服务器(549 次举报/274 个举报站点)出现在扫描源里;多家对滥用投诉不作为的低价主机商合计贡献了约三分之一的惯犯 IP。
八、流量侧画像:”访客”的构成
CDN 层的 30 天流量统计(按流量字节)可以和拦截数据互为印证。这个近半年无更新的站,流量构成如下:
客户端操作系统构成(按流量)
表格视图
User-Agent 维度:流量第一的”Chrome 142 / Windows”占 8.1%——一个最新主版本号出现在无更新站点的流量榜首,且无对应的人类访问理由;空 UA(-,纯脚本直连)占 4.1%;声明为 curl 的占 1.7%;两家中文博客聚合爬虫合计约 8%。应用层防火墙拦截的 100 个”顶级 IP”里,回查确认 44 个是 CDN 共享出口、约 37 个是合法爬虫——应用层眼中的”攻击榜”与真实攻击者的重合度,比表面数字低得多。
九、数据汇总
四层防护拦截量对比
表格视图
| 指标 | 数值 |
|---|---|
| 拦截 IP 总数(去重、剔除本地) | 626 |
| 其中 AbuseIPDB 置信分 80+ | 217(34.7%) |
| 其中满分 100 | 190(30.4%) |
| 其中官方白名单(误报) | 81(12.9%) |
| 其中全球首报 IP | 58(华东家宽集群) |
| 数据中心来源占比 | 61% |
| 大陆 IP 平均置信分 / 境外 | 14.5 / 62.8 |
| 全球总举报 ≥500 次的惯犯 | 27 个 |
| Tor 出口节点 | 6 个(5 个满分) |
| 单波最高单日拦截 | 502 次(8 月 6 日) |
写在最后
把 30 天的数据摊开,得到的最核心的客观事实有三个。第一,攻击的绝对量与站点价值无关:一个半年无更新的个人站,30 天被 626 个 IP 光顾,其中三分之一是全球确认的惯犯——互联网上的扫描是全天候、无差别、按漏洞库存货循环的背景活动。第二,攻击质量与攻击数量严重不匹配:没有发现任何针对站点实际技术栈的攻击,全部是对着错误目标撒网的老漏洞。第三,观测数据本身会说谎:626 个”恶意 IP”里,81 个是白名单,44 个是代理影子——在修正取数方式之前,我的日志、统计与封禁决策都在与幻影作战。

攻击载荷跟站点技术栈完全脱节这条结论最扎实,等于说明99%的扫描就是无差别撒网,个人站主不用对着日志自己吓自己。波峰不同步那个观察也细,两拨人前后脚到、工具互不通气,这个画面感有点好。顺带问一句:xmlrpc.php 你最后是直接关了,还是留着 pingback?我自己的站也一直纠结要不要一刀切。
xmlrpc.php 我是在WAF中见他加入了黑名单,所以连带着pingback也一切了