抓取日志里出现一批 User-Agent 写着 Googlebot、Bingbot 的请求,并不代表它们都是真的。User-Agent 只是请求头里的一段文本,任何脚本都能伪造。要判断来访者是不是搜索蜘蛛,通常需要把 User-Agent、反向 DNS、IP 段核对组合起来看。
只看 User-Agent 为什么不够
User-Agent 是最容易被模仿的信号。伪装爬虫可能用搜索引擎的 UA 来抓取内容、探测后台或消耗服务器资源。反过来,真蜘蛛偶尔也会因为代理、中间层或版本更新,让 UA 看起来和常见值略有差异。只凭 UA 放行或拦截,误判概率都不低。
反向 DNS 验证的常见做法
反向 DNS 是较常用的一层验证:先对来源 IP 做 PTR 查询,看它解析出的域名是否属于搜索引擎官方域;再把该域名做一次正向解析,确认它指回同一个 IP。只有正反一致,才能作为较强的证据。
- 拿到访问日志中的来源 IP。
- 查询 PTR 记录,得到候选主机名。
- 检查主机名后缀是否在官方域内,例如 googlebot.com、google.com、search.msn.com 等。
- 对候选主机名做正向解析,核对 IP 是否与来源 IP 相同。
注意,PTR 记录本身可以配置,所以不能只做反向查询就放行。正向核对这一步很关键。
IP 段核对与官方列表
主流搜索引擎会公布自己的抓取 IP 段,格式可能是 JSON 或文本列表。可以把这些段导入防火墙或应用层规则,作为辅助判断。要注意两点:一是官方列表会更新,需要定期同步;二是经过 CDN、反向代理或云服务转发的请求,源站看到的 IP 可能不是蜘蛛真实 IP,这时要结合转发头或边缘日志判断。
日志里怎么落地排查
建议在日志中保留来源 IP、User-Agent、反向解析结果、请求路径、状态码和响应时间。按小时或按路径聚合后,更容易看出异常:同一个 IP 在短时间内大量请求、反向解析与官方域不符、频繁访问后台或参数链接,都值得进一步核实。但不要只凭单一特征直接封禁,先做灰度观察。
误封真蜘蛛的代价
真蜘蛛被持续返回 403、429 或连接超时后,抓取频率可能下降,恢复也需要时间。对依赖搜索流量的站点来说,这会影响新 URL 的发现和旧页面的更新检查。如果只是怀疑,可以先用较低频率限制或验证码挑战,而不是一刀切拦截整个网段。
放行假爬虫的风险
假蜘蛛如果被当成真蜘蛛放行,可能大量消耗带宽和数据库资源,甚至抓取到本不该公开的页面。除了身份验证,还可以配合速率限制、访问路径规则和行为特征来区分:正常蜘蛛通常有较稳定的抓取节奏,不会集中请求登录页、支付页或漏洞探测路径。
配置白名单时的几个注意点
- 反向 DNS 结果可能被缓存,更新官方域后要留出生效时间。
- 使用 CDN 时,源站防火墙不要直接按来源 IP 判断,先确认真实 IP 的获取方式。
- 不要把规则写死到单个 IP,搜索引擎的抓取节点会变化。
- 定期核对官方 IP 段和反向 DNS 域列表,避免规则过期。
- 边缘层和应用层的验证逻辑尽量一致,否则会出现同一请求两处判断不同。
验证蜘蛛身份不是一次配置就结束。把日志观察、官方列表和反向 DNS 核对结合起来,定期复核,才能在减少误封的同时,降低伪装爬虫带来的干扰。