爬虫抓取异常服务器防火墙整改清单
爬虫抓取异常?这份服务器防火墙整改清单请收好
如果你发现百度、谷歌等搜索引擎的爬虫无法正常抓取网站内容,而网站本身正常运行,很可能是服务器防火墙把爬虫的IP给拦截了。
本文为你整理了一份可直接照做的整改清单,从检查防火墙状态到放行爬虫IP,再到验证抓取是否成功,都按零基础的操作习惯来写。
检查服务器防火墙当前状态
无论你用的是 Linux 自带的 iptables、firewalld 还是宝塔面板的系统防火墙,先确认防火墙当前是开启还是关闭。
- 如果是 iptables(CentOS 6/7 以下常用),执行:
iptables -L -n --line-numbers
查看所有规则链。
重点关注 INPUT 链中是否有大量的 DROP 或 REJECT 规则。
- 如果是 firewalld(CentOS 7 以上默认),执行:
firewall-cmd --list-all
查看默认区域(public)下是否配置了源地址拒绝或服务限制。
- 如果你用的是宝塔面板(Linux 版),直接登录面板后台,点击左侧菜单“安全”,在“系统防火墙”选项卡下可以看到已添加的规则列表。如果之前开启了“Nginx防火墙”插件,也需要到该插件里查看是否有误拦截记录。
小提示:如果防火墙已关闭,而爬虫依然抓取异常,请直接跳到“验证抓取是否成功”章节,排除其他因素。
放行爬虫IP地址
确认防火墙开启后,需要把已知的爬虫 IP 段添加到白名单。
重点放行百度蜘蛛、谷歌 bot、必应蜘蛛等常用爬虫。
- 获取爬虫 IP 段:百度官方会定期公布蜘蛛 IP 列表,你可以访问
https://www.baidu.com/s?wd=baiduspider获取最新信息。谷歌和必应也有类似的文档。建议通过运维脚本定期更新。 - 添加 iptables 放行规则(以百度蜘蛛某个 IP 段 220.181.0.0/16 为例):
# 先插入到 INPUT 链顶部,确保优先通过
iptables -I INPUT -s 220.181.0.0/16 -j ACCEPT
如果你要放行整个爬虫常用的 IP 池,可以批量添加。
注意规则顺序:ACCEPT 要放在 DROP 规则之前。
- firewalld 用户 使用以下命令:
firewall-cmd --permanent --add-source=220.181.0.0/16
firewall-cmd --reload
- 宝塔面板 操作路径:
- 在“安全”->“系统防火墙”页面,点击“添加规则”,类型选“来源 IP”,填写 IP 或 IP 段,动作选“允许”。
- 如果使用了“Nginx防火墙”插件,进入“全局设置”->“IP白名单”,填入爬虫 IP,点保存。
踩坑提醒:不要一股脑把所有爬虫 IP 都按照网段放行,有些爬虫会使用动态 IP 段,建议按官方公布的最新列表操作。
另外,放行规则保存后务必测试。
保存防火墙规则并重启服务
行内用户常犯的错误是:添加完规则后直接用 reboot 重启服务器,或者忘记保存导致规则丢失。
- iptables 规则默认只临时生效,需要保存到文件:
service iptables save # CentOS 6
iptables-save > /etc/sysconfig/iptables # 通用方法
- firewalld 用户,如果之前加了
--permanent选项,reload 后规则已永久保存;如果没加,重新执行带--permanent的命令并 reload。 - 宝塔面板的系统防火墙添加规则后自动保存,但 Nginx 防火墙插件的 IP 白名单需要点击“保存”按钮。
验证爬虫抓取是否恢复正常
规则放行后,不要光靠感觉,要实实在在测试一下爬虫能否正常访问网站。
命令行测试方法(在服务器上或任一终端执行):
curl -I -A "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" https://你的域名.com/
如果返回 HTTP 状态码 200,表示爬虫可以正常访问。
如果返回 403、301 重定向(非预期)或连接超时,继续排查 CDN 配置或 waf 规则。
另外,前往网站日志(如 Nginx 访问日志 /var/log/nginx/access.log)搜索爬虫 User-Agent,查看最近是否有成功记录。
常见问题解答
Q:放行了爬虫 IP,但日志里还是看不到爬虫访问?
A:可能原因有三个:一是 CDN 加速后,源站接收到的 IP 是 CDN 节点 IP,需要在 CDN 控制台放行爬虫;二是网站启用了后端频率限制或验证码;三是爬虫尚未重新抓取,耐心等待几个小时。
Q:iptables 规则中 ACCEPT 和 DROP 的顺序怎么控制?
A:使用 -I(插入到最前面)或 -I INPUT 1 指定行号。建议把所有允许规则都放在拒绝规则之前。
Q:宝塔面板 Nginx 防火墙和系统防火墙有什么区别?
A:系统防火墙(iptables/firewalld)工作在 IP 层,Nginx 防火墙工作在应用层,可以识别 User-Agent 并拦截或放行。两者最好都配置好白名单,避免误杀。
总结
处理爬虫抓取异常,防火墙是最容易忽略但又最容易解决的一环。
下次遇到类似问题,先按这份清单检查:防火墙是否开启 → 是否屏蔽了爬虫 IP → 放行后规则是否保存 → 验证抓取状态。
如果问题依旧,再排查 CDN、robots.txt 或服务器资源限制。
希望这篇教程能帮你快速解决爬虫抓取异常的烦恼。