关键在于识别异常耗资源行为而非单纯检测爬虫,需综合IP、UA、路径、状态码四维分析,结合高频请求、空Referer、工具UA、规律性404等特征精准定位恶意流量。

直接从 Apache access.log 里识别恶意大流量爬虫,关键不是看“有没有爬虫”,而是看“谁在异常地耗资源”——高频、集中、无交互、低质量请求才是真信号。重点抓 IP + UA + 路径 + 状态码四维组合,而不是单看 User-Agent。
盯住真实行为模式,别只信 UA 字符串
很多恶意爬虫会伪造成 Chrome 或 Safari,单靠 UA 过滤容易漏掉或误杀。要结合日志中的实际行为交叉验证:
- 同一 IP 在 1 小时内请求超 500 次(尤其集中在 /api/、/wp-login.php、/admin/ 等路径)
- 大量请求状态码为 404,但路径有规律(如 /product?id=1、/product?id=2 连续递增)
- Referer 字段为 "-",且 Accept-Language、Accept-Encoding 等常见头缺失
- UA 含 python-requests/2.*、go-http-client/2.0、curl/7.*、masscan、sqlmap 等工具标识
- 短时间内切换多个 UA(如先 Firefox,再 Safari,再 dotnetcurl),基本可判定是脚本轮询
用一条命令快速筛出可疑 IP 和 UA 组合
在终端执行以下命令,能立刻暴露真实威胁(适用于 Combined Log Format):
awk '$9==200 || $9==404 {print $1, $12, $7, $9, $11}' /var/log/apache2/access.log | \
grep -E "(python-requests|go-http-client|masscan|sqlmap|dotnetcurl)" | \
awk '$1 != "-" && $5 == "-" {print $1}' | \
sort | uniq -c | sort -nr | head -15
这条命令做了四件事:筛选成功或失败的请求 → 过滤含扫描工具 UA 的行 → 排除空 IP 和非空 Referer 的干扰 → 统计并排序高频恶意 IP。结果中排在前面的 IP,大概率就是你要封的对象。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
识别伪装型爬虫:Chrome 外壳下的扫描器
有些爬虫把 UA 设成:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36
看起来很正规,但日志里它可能同时满足:
- Referer 是 "-"(真实用户几乎不会)
- 只访问 /xmlrpc.php、/wp-comments-post.php、/api/v1/user?id= 这类高危路径
- 每秒发起 3–5 次请求,且时间戳高度均匀(人工访问不可能这么稳)
- 响应体大小固定(比如总返回 234 字节),说明没真正渲染页面,只是探针
这种组合比 UA 更可靠。建议用 Python 脚本定时提取「空 Referer + 敏感路径 + 高频 IP」三元组,比单纯匹配字符串更准。
区分恶意爬虫和正常搜索引擎流量
不能一概而论封掉所有非浏览器 UA。Baiduspider、Googlebot、YandexBot 是合法流量,封错会影响收录。验证方式很简单:
- 查 UA 字符串是否含 Baiduspider/Googlebot/YandexBot/Bingbot/Sogou
- 再反向查该 IP 是否属于对应搜索引擎官方网段(例如百度 IP 段可通过 百度站长平台 查证)
- 观察其访问节奏:真实蜘蛛通常按 sitemap 逐步抓取,不会在 1 分钟内扫完全站
如果某 IP UA 是 Googlebot,但来自 192.168.x.x 或明显非谷歌 ASN,那基本是伪造 —— 这种要优先标记并人工复核。

















