本站真实攻击日志案例
翻看近期Nginx日志,发现一条很典型的恶意扫描行为,IP:88.151.32.188,短短1秒内,轮番切换多种正规爬虫UA访问站点:
- 伪装 ChatGPT-User AI爬虫
- 伪装 Amazonbot亚马逊爬虫
- 伪装 Google/Google-Extended谷歌爬虫
- 伪装 anthropic-ai(Claude)、CCBot归档爬虫
并且定向抓取 manifest.json、stats.json、.next配置文件,专门探测网站程序架构、主题源码、站点版本指纹,属于针对性漏洞探测。
之前配置的UA黑名单,可以拦截单一爬虫,但这类扫描器会批量轮换UA绕过规则,最优解法:直接封禁整恶意IP,从源头阻断访问。
区分:正常爬虫 VS 伪装扫描爬虫
很多新手分不清,容易误封正规爬虫,简单区分:
正规爬虫(可放行)
单一固定UA、访问间隔规整、IP固定官方网段、只抓取页面内容,不会批量探测配置文件。
恶意伪装扫描(必须封禁)
- 同一IP极短时间,切换十几种爬虫UA
- 专门抓取json、配置、源码类敏感文件
- 无视robots规则、高频批量请求、行为杂乱
- 境外IP居多,目的摸排站点漏洞,后期发起攻击
三种Nginx封禁IP方式(新手按需选择)
适配宝塔、原生Nginx,三种方案由简到优,互不冲突,直接复制使用。
方式1:站点单独封禁(最快,临时封禁首选)
直接写入网站conf的server{}区块内,即时生效,只针对当前网站生效。
# 封禁单个恶意扫描IP
deny 88.151.32.188;
方式2:全局黑名单封禁(推荐,全站统一管控)
适合恶意IP较多场景,单独建立IP黑名单文件,方便后期增删IP,不用改动网站配置。
- 新建黑名单文件
nano /etc/nginx/block_ip.conf
- 写入需要封禁IP,可批量添加
# 伪装爬虫扫描IP
deny 88.151.32.188;
# 可继续新增其他恶意IP
deny 66.132.195.113;
- 在nginx.conf全局引入黑名单文件
include /etc/nginx/block_ip.conf;
方式3:封禁整段IP段(批量拦截扫描网段)
如果该网段持续批量扫描,直接封禁整个网段,彻底阻断:
# 封禁整个IP网段写法
deny 88.151.0.0/16;
配置重载+效果核验命令
修改完规则,务必校验语法,避免网站宕机:
# 校验配置无误
nginx -t
# 平滑重载,不中断网站访问
systemctl reload nginx
# 查看该IP拦截日志,出现403即为封禁成功
grep 88.151.32.188 /var/log/nginx/access.log
双重防护搭配(防护拉满)
1、UA黑名单:拦截常规垃圾爬虫,适配固定特征爬虫
2、IP黑名单:拦截轮换UA、绕过规则的恶意扫描IP
二者配合,既能拦截批量爬虫,又能封堵伪装绕过的扫描器,适配WordPress博客长期防护。
常见疑问
1、封禁IP会不会误封正常访客?
不会。这类批量轮换爬虫UA的IP,全部为黑产扫描节点、境外代理IP,无真实普通访客,放心封禁。
2、和之前爬虫UA规则冲突吗?
完全不冲突。UA拦截防批量爬虫,IP拦截防绕过扫描,互补防护。
3、如何快速找出同类恶意扫描IP?
执行一键筛选命令,快速筛选一秒多次切换UA的异常IP:
grep -E "GPTBot|ChatGPT|anthropic" /var/log/nginx/access.log
最后
现在黑产扫描器越来越智能,不再固定单一爬虫UA,会随机伪装各类正规爬虫绕过拦截。
日常运维小技巧:看到同一IP短时间多UA访问、探测敏感配置文件,不用犹豫,直接封禁即可。不用等到网站被摸排漏洞、植入后门再处理,提前封禁,省心省力,减少服务器无效损耗。