搭建IP黑名单自动拦截恶意爬虫抓取,三套方案快速落地

核心答案:三招实现IP黑名单自动拦截恶意爬虫

搭建IP黑名单自动拦截恶意爬虫,最常见且对新手友好的方案有三种:使用Fail2ban动态封禁异常请求IP、在Nginx站点配置中直接deny已知恶意IP段、以及利用宝塔面板的防火墙插件进行IP黑名单管理。
本文用最简单的话讲清楚每种方案的准备、操作和验证,你不需要懂复杂原理,照着做就能跑起来。

第一步:搞清楚你面对的是哪种恶意爬虫

在动手之前,先花一分钟判断你要拦截的对象是什么。
恶意爬虫通常表现:短时间大量请求同一个页面、请求头缺少正常浏览器特征(如无User-Agent或User-Agent特别奇怪)、高频访问后台登录文件(如wp-login.php)。
如果只是偶尔的搜索蜘蛛(百度、谷歌),不需要拦截;
只有确定是恶意采数据或攻击的才加入黑名单。

方案一:用Fail2ban自动封禁异常访问IP(推荐Linux主机)

安装Fail2ban

以CentOS 7/8为例,执行:

yum install epel-release -y
yum install fail2ban -y
systemctl enable fail2ban
systemctl start fail2ban

配置针对Nginx的恶意爬虫规则

新建配置文件 /etc/fail2ban/jail.local,写入:

[DEFAULT]
ignoreip = 127.0.0.1
bantime = 3600
findtime = 600
maxretry = 30

[nginx-badbots]
enabled = true
filter = nginx-badbots
logpath = /var/log/nginx/access.log
action = iptables[name=BadBots, port=http, protocol=tcp]

然后创建过滤器文件 /etc/fail2ban/filter.d/nginx-badbots.conf

[Definition]
failregex = ^ -.*"(GET|POST).*HTTP/.*" 200 .*"-" "(Mozilla/5.0 (compatible; AhrefsBot|Mozilla/5.0 (compatible; SemrushBot|Mozilla/5.0 (compatible; Bytespider)"
ignoreregex =

上面是匹配特定爬虫头部的示例,你可以把实际需要拦截的User-Agent关键词加进去。
重启Fail2ban生效:systemctl restart fail2ban
之后可用 fail2ban-client status nginx-badbots 查看封禁IP列表。

方案二:在Nginx配置里直接deny已知恶意IP段(适合独立站点)

如果你手头有一份确认的恶意IP列表(比如从日志、公开黑名单获取),直接在站点server块或location块中添加:

location / {
    deny 192.168.1.100;   # 单个IP
    deny 10.0.0.0/24;     # IP段
    allow all;
    # ... 其他配置
}

修改后执行 nginx -t 检查语法,再 nginx -s reload 重载。
这种方式的优点是零依赖、无延迟,但需要手动维护名单。

方案三:宝塔面板防火墙一键添加黑名单(适合新手站长)

如果你使用的是宝塔面板(比如部署在泽御云云服务器上),操作更直观:登录宝塔后台 -> 左侧菜单“安全” -> 点击“防火墙” -> 在“IP黑名单”选项卡中输入要封禁的IP —— 支持单个或IP段,用逗号分隔。
点击“添加”即生效。
还可以勾选“永久封禁”或设置过期时间。
宝塔内置的Nginx防火墙(收费插件)还能自动识别恶意爬虫并临时黑名单。

避坑指南:拦截时别把正经爬虫和CDN IP封了

  • 在使用Fail2ban自动封禁时,记得在 ignoreip 中加入百度、谷歌爬虫的IP段(可搜最新段列表),以及自家CDN回源IP。
  • Nginx deny如果写错语法,整个站点会500;一定先 nginx -t
  • 宝塔防火墙添加黑名单后不会自动备份,建议定期导出列表。
  • 如果服务器本身性能极低(如1核1G),频繁写IP黑名单日志可能导致I/O压力,建议改用Fail2ban的bantime稍长(如2小时),减少反复检查。

效果验证与常见问题解答

怎么确认IP已被拦截?

  • Fail2ban:fail2ban-client status nginx-badbots 会显示被封IP列表。
  • Nginx deny:从另一台机器用curl测试该IP访问站点,应返回403。
  • 宝塔防火墙:在“安全”->“防火墙”页面的IP黑名单列表中可见。

怎么处理误封的正规爬虫?

先将该IP加入对应工具的忽略列表(Fail2ban的ignoreip、Nginx的allow配置、宝塔IP白名单),再手动解封。

频率设置多少合适?

对于纯爬虫采集,建议 maxretry=30 在10分钟内;
如果是CC攻击,可降低到5次/分钟。

这些方法对服务器资源有影响吗?

基本无影响。
Fail2ban在日志中实时匹配,占用很低;
Nginx deny是静态规则,几乎零开销;
宝塔防火墙走内核iptables或Nginx层,也不会拖慢。

总结

以上三种方法按你的环境选一种即可:Linux服务器首选Fail2ban,自动且灵活;
只有少量IP要屏蔽时走Nginx deny;
不熟悉命令行的站长推荐宝塔防火墙。
如果正在找稳定好用的云服务器来跑这些方案,可以考虑泽御云(资质齐全,IDC/ISP证号B1-20261342),售后支持也比较到位。
现在动手配一个黑名单,明天就能看到日志里的恶意请求少很多。

分享到:
上一篇
内存泄漏定位排查解决站点频繁OOM报错
下一篇
Linux用户登录日志审计筛查异常爆破账号
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意