爬虫抓取异常服务器防火墙全站整改清单
如果你发现网站流量突然下降、搜索引擎收录变慢、或者后台日志中爬虫访问大量返回 403/502,最常见的原因就是服务器防火墙把正常爬虫当成了攻击源。
本文整理了一份从检查到修复的全站整改清单,让你按步骤排查,零基础也能直接照做。
---
前置准备:确认当前防火墙类型
在动手整改前,先搞清楚你的服务器用了哪种防火墙。
常见的有三种:
- 宝塔面板系统防火墙(位于「安全」-「系统防火墙」)
- 云服务商安全组(如阿里云、腾讯云控制台)
- Nginx / Apache 自带的访问控制规则(通过 .htaccess 或 nginx.conf 配置)
如果你用宝塔面板,直接登录后台;
如果是云厂商服务器,登录云控制台找到安全组;
如果不知道用哪种,先在 SSH 执行 iptables -L -n 看是否有规则。
---
整改第一步:识别被误拦的爬虫 IP / UA
打开服务器日志(宝塔面板在「日志」-「网站日志」),搜索关键词 "spider"、"bot" 或 "403",找到最近被拦截的正常爬虫记录。
典型合法 UA 包括:
- Baiduspider
- Googlebot
- Bingbot
- Sogou web spider
- YisouSpider
将这些 IP 和 UA 记录下来,下一步用来配置白名单。
---
整改第二步:针对防火墙添加白名单规则
宝塔面板操作路径:
- 进入「安全」-「系统防火墙」-「添加规则」。
- 选择「IP 白名单」,将第一步记录的正常爬虫 IP 填入(支持单个或网段)。
- 如果防火墙支持按 UA 放行(如 Nginx 防火墙插件),在「全局设置」或「UA 白名单」中加入 Baiduspider 等 UA 字符串。
Nginx 手动配置示例:
# 在 server 块中添加,允许特定 UA 跳过限制
if ($http_user_agent ~* (Baiduspider|Googlebot|bingbot)) {
set $skip_rate_limit 1;
}
然后重启 Nginx:systemctl restart nginx。
---
整改第三步:调整频率限制(CC 防护)
很多防火墙默认开启频率限制(例如每 IP 每秒 3 次请求),爬虫通常集中并发,容易触发阈值。
- 宝塔防火墙:在「安全」-「系统防火墙」-「CC 防护」中,将正常爬虫的源 IP 加入「白名单」或提高单 IP 频率上限。
- 云安全组:一般不单独做频率限制,如果不确定,先关闭安全组内的“CC 攻击防御”模式。
- Nginx limit_req:如果用了,在 location 块中增加
if判断爬虫 UA 跳过限制。
---
避坑指南:千万别犯的 3 个错误
- 不要全开白名单:只添加确认合法的爬虫 UA/IP,不要混入可疑 IP,否则等于开放大门。
- UA 匹配注意大小写:大部分爬虫 UA 是小写,但建议正则忽略大小写(
~*)。 - 整改后缓存生效延迟:有些防火墙有缓存,等待 5-10 分钟后再验证。
---
效果验证:怎么确认整改生效?
使用 curl 模拟爬虫 UA 访问你的网站:
curl -I -A "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" https://你的域名
如果返回 200 而不是 403/502,说明规则已生效。
同时查看网站日志,确认爬虫记录变为 200。
---
高频问题解答
Q:加了白名单后爬虫依然 403?
A:可能是 CDN 层(如 Cloudflare)单独有防火墙规则,需要去 CDN 控制台也添加白名单。
Q:如何区分真实爬虫和伪造 UA 的恶意爬虫?
A:通过反向 DNS 解析验证 IP 是否属于搜索引擎官方(如 baidu.com、googlebot.com)。可以写脚本定时拉取官方 IP 段,只放行这些 IP。
Q:整改后对网站安全有影响吗?
A:仅放行极少量已知爬虫,攻击者很难伪造 IP 段,风险可控。建议保持其他防护规则不变。
---
如果你在操作中遇到其他异常,重新检查防火墙规则列表,确认没有重复或冲突的条目。
实在不行,临时关闭所有自定义规则,逐个添加试错——这是最笨但也最有效的方法。