织梦如何排查恶意蜘蛛抓取
除了百度、谷歌等正规蜘蛛,站点常被各种采集器、镜像站、SEO 工具蜘蛛骚扰。它们伪装成浏览器 UA,高频抓取带宽却不对收录有贡献。本文给出从日志识别到封禁的完整排查流程。
一、什么是恶意蜘蛛
常见特征:
- UA 中不含主流搜索引擎标识,或伪装成浏览器但行为异常;
- 单 IP 高频请求,远超正常用户;
- 只抓取文章正文,不抓 CSS/JS/图片;
- 抓取深度异常,按 id 顺序 1.html、2.html、3.html 递增。
典型恶意 UA:AhrefsBot、SemrushBot、MJ12bot、DotBot、PetalBot、Bytespider、YisouSpider(看是否需要其流量)。
二、日志分析定位
站点访问日志 /www/wwwlogs/yourdomain.com.log。先统计所有蜘蛛抓取量:
# 按抓取次数排序
awk -F'"' '{print $6}' /www/wwwlogs/yourdomain.com.log \
| grep -oiE '(bot|spider|crawler|slurp|scan)' \
| sort | uniq -c | sort -rn | head -20
再按 IP 统计访问频次:
awk '{print $1}' /www/wwwlogs/yourdomain.com.log | sort | uniq -c | sort -rn | head -30
单 IP 日访问超过 1000 次且 UA 不是主流蜘蛛,基本可判定为恶意抓取。
三、识别伪装蜘蛛
有些采集器 UA 伪装成 Chrome,但行为是机器。验证方法:
# 取出可疑 IP 的 UA
grep "^1.2.3.4 " /www/wwwlogs/yourdomain.com.log | awk -F'"' '{print $2}' | head -5
如果 UA 是 Mozilla/5.0...Chrome/... 但:
- 不接受图片/CSS 请求;
- 请求间隔精确到毫秒级;
- Referer 全为空;
基本可判定为伪装蜘蛛。可进一步用反查 IP 归属,正规搜索引擎 IP 段可在百度/谷歌官方文档查到。
四、百度蜘蛛真伪验证
百度官方提供反查方法,对自称 Baiduspider 的 IP 做 DNS 反查:
host 220.181.108.75
# 输出类似:75.108.181.220.in-addr.arpa domain name pointer baiduspider-220-181-108-75.crawl.baidu.com.
反查域名包含 .baidu.com. 或 .googlebot.com. 才是真蜘蛛,否则是冒充。
五、封禁方法
1. robots.txt 屏蔽(友好但可被忽略)
User-agent: AhrefsBot
Disallow: /
User-agent: SemrushBot
Disallow: /
User-agent: MJ12bot
Disallow: /
User-agent: DotBot
Disallow: /
恶意蜘蛛通常不遵守 robots.txt,必须配合 Nginx 层封禁。
2. Nginx UA 屏蔽
if ($http_user_agent ~* (AhrefsBot|SemrushBot|MJ12bot|DotBot|PetalBot|Bytespider)) {
return 403;
}
3. Nginx IP 屏蔽
deny 1.2.3.4;
deny 5.6.7.0/24;
4. 宝塔防火墙
宝塔“网站防火墙 - UA 过滤”与“IP 黑名单”可视化配置,支持按频次自动拉黑。
六、频次限制
对未知 UA 做限速,避免漏网之鱼拖垮服务器:
limit_req_zone $binary_remote_addr zone=general:10m rate=20r/s;
server {
limit_req zone=general burst=30 nodelay;
}
正常用户与正规蜘蛛不会触发,恶意抓取会被限流。
七、监控告警
写一个简单的告警脚本,每分钟统计单 IP 访问次数:
#!/bin/bash
THRESHOLD=500
LOG=/www/wwwlogs/yourdomain.com.log
awk '{print $1}' $LOG | sort | uniq -c | sort -rn | \
while read count ip; do
if [ $count -gt $THRESHOLD ]; then
echo "$(date) - $ip accessed $count times" >> /var/log/spider_alert.log
fi
done
加入宝塔计划任务每 10 分钟执行一次,结合企业微信/钉钉机器人推送告警。
八、注意事项
- 封禁前务必确认 IP 不是百度/谷歌官方蜘蛛,避免误伤收录;
- UA 屏蔽规则要定期更新,恶意蜘蛛会换 UA;
- 限速规则不要过严,正常蜘蛛抓取也会有突发流量;
- CDN 接入后要在 CDN 控制台配置 UA/IP 黑名单,否则源站封不到。
恶意蜘蛛治理是长期工作,建议把“日志周报 + 黑名单维护 + 频次告警”作为固定运维动作。把带宽与抓取配额留给真正能带来收录与流量的正规蜘蛛,让站点资源始终服务于有价值的访问者。