自动拦截爬虫IP黑名单防恶意抓取
为什么需要自动拦截恶意爬虫IP
网站上每天都会遇到各种爬虫:搜索引擎蜘蛛、采集工具、扫描器。
正常的爬虫有助于收录,但恶意爬虫会大量消耗服务器资源、盗取内容、甚至拖慢网站访问速度。
手动去封禁IP不仅效率低,还容易漏封。
利用宝塔面板内置的 Nginx 防火墙,可以自动识别并加入黑名单,大幅降低人工维护成本。
开启宝塔防火墙并设置防护阈值
登录宝塔面板后台,左侧菜单找到“网站” -> 点击你的站点名称 -> 选择“防火墙”标签。
- 开启防火墙:如果显示“关闭”,点击“开启”按钮。首次使用会提示安装 Nginx 防火墙插件(免费版已内置)。
- 设置全局规则:在“防火墙设置”中,重点调整“请求频率限制”。
- 单IP每秒请求数:建议设为
10次/秒(根据站点实际访问量微调)。 - 单IP每分钟请求数:建议设为
200次/分钟。 - 触发后封禁时长:设为
60分钟(可自定)。
- 开启自动拉黑:勾选“自动拉黑恶意IP”,保存设置。
这样当某个IP在短时间内发送大量请求时,Nginx防火墙会自动将其加入黑名单,阻断后续访问。
添加自定义黑名单IP的两种方式
方式一:在防火墙列表手动添加
在“防火墙”页面底部找到“IP黑名单”,点击“添加”。
输入IP地址(支持单个IP或网段如 192.168.1.0/24),备注原因(如“恶意采集”),确认。
添加后该IP立即被拦截。
方式二:通过日志批量拉黑
当恶意爬虫已经产生大量日志时,可以借助命令行快速处理。
SSH登录服务器后,执行以下命令查看最近被频繁请求的IP:
awk '{print $1}' /www/wwwlogs/你的站点.log | sort | uniq -c | sort -rn | head -20
将明显异常的IP(请求量极大、来源不明)逐条添加到宝塔的IP黑名单中,或利用宝塔API自动录入(新手建议手动复制)。
如何避免误封百度谷歌蜘蛛
恶意爬虫和正常搜索引擎蜘蛛的UA(User-Agent)不同。
在宝塔防火墙的“UA白名单”中添加常见的搜索引擎UA:
Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)
重要: 不要简单地把“Baiduspider”全部放行,某些恶意爬虫会伪造UA。
建议结合IP反查DNS确认是否真的来自百度/谷歌。
另外,Nginx防火墙的“频率限制”对白名单IP会豁免,所以即使蜘蛛访问频繁也不会被错误封禁。
验证拦截效果与管理日志
查看拦截记录
在“网站”->“防火墙”页面,点击“拦截记录”,可以看到近期被拦截的IP、命中规则和时间。
如果发现正常用户被误拦,可以在“IP白名单”中永久放行该IP。
测试自己是否被拦截
使用手机4G网络访问网站(IP变化),或者用代理工具切换IP测试。
如果访问正常,说明规则未误伤。
定期清理黑名单
恶意IP如果已经不再活动,可以手动从黑名单中删除,避免黑名单列表过长影响效率。
宝塔面板每隔一定时间会自动清理过期的封禁IP(取决于你在防火墙中设置的封禁时长)。
高频问题解答
Q1:开启频率限制后网站访问变慢怎么办?
检查阈值是否过低。
先使用默认值观察1-2天,如果偶尔有用户报错“503 Service Temporarily Unavailable”,可适当提高每秒请求数,比如从10改为20。
Q2:如何确认某个IP是爬虫还是真实用户?
查看IP的UA和访问行为。
如果持续请求相同页面、间隔固定、没有JS/css等静态资源请求,大概率是爬虫。
如果还有疑问,可以临时将该IP放行,观察一段时间。
Q3:防火墙和CDN冲突吗?
如果网站使用了Cloudflare等CDN,需要在防火墙中开启“CDN模式”,否则拦截的将是CDN节点IP,而非真实客户端IP。
在宝塔防火墙设置中勾选“CDN模式”,并输入CDN的回源IP段。
---
如果你正在处理恶意爬虫骚扰问题,建议从开启防火墙阈值调整开始,再逐步添加自定义黑名单。
执行过程中遇到误封,优先检查UA白名单和CDN模式开关。
保持日志定期审计,能让黑名单机制更精准。
还想了解更高级的防采集技巧?
可以继续阅读本站关于“Nginx限流模块”和“WAF规则自定义”的相关教程。