网站访问日志分析,识别恶意爬虫IP段:网站访问日志分析

网站访问日志分析是服务器运维中排查异常流量的基础工作。
如果你发现网站响应变慢、带宽跑满,或者后台出现大量异常请求,通常意味着有恶意爬虫在抓取内容。
本文面向零基础用户,从日志格式确认开始,逐步讲解如何通过命令行统计高频IP、筛选异常User-Agent,最终定位并封禁恶意爬虫IP段。

确认日志文件位置与格式

开始分析前,先找到Nginx或Apache的访问日志路径。
默认情况下,宝塔面板的Nginx日志在 /www/wwwlogs/ 目录下,以站点域名命名的 .log 文件就是访问日志。
如果你使用的是原生Nginx,通常在 /var/log/nginx/access.log

tail 命令查看最后几行,确认日志格式:

tail -n 5 /www/wwwlogs/你的域名.log

典型的Nginx默认格式如下,第一段是访客IP,后面依次是时间、请求方法、URL、状态码和User-Agent:

192.168.1.100 - - [10/Oct/2023:14:22:01 +0800] "GET /article/123 HTTP/1.1" 200 3456 "-" "Mozilla/5.0 ..."

如果日志格式不同,后续的 awk 字段编号需要相应调整。默认格式下,IP在第1列,User-Agent在第12列(包含空格时可能需要特殊处理)。

统计高频访问IP并排序

恶意爬虫最明显的特征是短时间内产生大量请求。
用下面这条命令统计访问量最高的前20个IP:

awk '{print $1}' /www/wwwlogs/你的域名.log | sort | uniq -c | sort -nr | head -20

输出结果类似:

   4523 203.0.113.45
   3210 198.51.100.22
    890 192.0.2.10

正常访客的IP访问量通常是个位数或几十次,如果某个IP出现几千次,基本可以判定为爬虫。此时不要急着封禁,先结合请求的URL和User-Agent进一步确认。

结合User-Agent识别伪装爬虫

有些爬虫会伪造User-Agent,但大多数低成本爬虫会暴露特征。
统计访问量最高的User-Agent:

awk -F'"' '{print $6}' /www/wwwlogs/你的域名.log | sort | uniq -c | sort -nr | head -20

常见恶意爬虫的User-Agent包括 python-requestsScrapyGo-http-clientcurl 等。
如果某个IP的请求全部来自这些User-Agent,且请求频率极高,就可以确认是恶意爬虫。

另一种情况是爬虫完全不发送User-Agent,或者发送空值。
这时可以用 grep 筛选:

grep -E '""$|"-"' /www/wwwlogs/你的域名.log | awk '{print $1}' | sort | uniq -c | sort -nr | head -10

通过宝塔面板或防火墙封禁IP段

确认恶意IP后,如果它们来自同一个C段(例如 203.0.113.0/24),可以直接封禁整个IP段,避免逐个添加。

宝塔面板操作路径: 登录宝塔后台 → 安全 → IP规则 → 添加IP段黑名单,输入 203.0.113.0/24,备注写“恶意爬虫”,然后保存。

如果你习惯用命令行,在CentOS 7/8上可以使用 firewall-cmd

firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.0/24" reject'
firewall-cmd --reload

在Ubuntu/Debian上,使用 ufw 更简单:

ufw deny from 203.0.113.0/24

如果服务器前端有CDN或WAF,建议优先在CDN控制台配置IP黑名单,这样拦截更彻底,也不消耗源站资源。

验证封禁效果与持续监控

封禁后,用以下命令实时观察日志,确认恶意IP不再出现:

tail -f /www/wwwlogs/你的域名.log | awk '{print $1}'

如果之前的高频IP消失了,说明封禁生效。
但恶意爬虫可能会更换IP继续抓取,因此建议定期执行高频IP统计命令,或者配置日志分析工具(如GoAccess)做自动化监控。

避坑提醒: 不要直接封禁大范围IP段(如 /16),容易误伤正常用户;
封禁前先确认该IP段没有你的真实访客。
另外,部分搜索引擎的官方爬虫(如百度蜘蛛、Googlebot)也可能产生高频请求,但它们的User-Agent包含 BaiduspiderGooglebot,可以通过反向DNS验证真伪,不要误封。

常见问题

问:日志文件太大,awk 命令执行很慢怎么办?
可以先用 split 命令按天切割日志,或者只分析最近一天的日志:awk '{print $1}' /www/wwwlogs/你的域名.log | tail -10000 | sort | uniq -c | sort -nr | head -20

问:封禁IP后网站被CDN回源IP影响怎么办?
如果使用了CDN,源站日志里的IP是CDN节点IP,不是真实访客IP。此时需要查看Nginx的 X-Forwarded-For 头,或者在CDN控制台配置IP黑名单。

问:如何区分恶意爬虫和正常搜索引擎蜘蛛?
正常搜索引擎蜘蛛的User-Agent包含明确标识(如 BaiduspiderGooglebot),且请求频率相对稳定。你可以用 host 命令反向解析IP,验证是否属于搜索引擎官方IP段。

问:有没有自动化工具推荐?
GoAccess可以实时分析日志并生成HTML报告,安装后运行 goaccess /www/wwwlogs/你的域名.log --log-format=COMBINED -o report.html 即可。对于零基础用户,宝塔面板的“网站监控报表”插件也提供了可视化流量统计。

完成以上步骤后,你应该已经能够独立完成一次网站访问日志分析,并识别出恶意爬虫IP段。
建议每周检查一次日志,把封禁规则整理成脚本,后续维护会轻松很多。

分享到:
上一篇
网站后台密码策略,强密码定期更换规范:网站后台密码策略
下一篇
网站移动端跳转配置,手机自动跳转移动端页面
1
系统公告

泽御云中秋国庆双节活动上线:新购8折,拼团3.99元起

尊敬的用户:
泽御云“月满中秋·礼贺国庆”双节活动现已开启,活动时间为2026年9月23日至10月10日。 活动期间可享以下福利:
1. 常规云服务器新购使用优惠码“泽御中秋国庆同乐”,符合条件的订单享8折优惠。
2. 香港精品云服务器5人拼团低至3.99元,部分4核4G套餐3人拼团年付388元,续费同价。
3. 新用户购买年付云服务器,符合活动规则可赠送2个月使用时长。
4. 老用户续费季度赠15天,续费年度赠2个月;活动期间升级配置免收配置迁移手续费。
5. 推荐好友成功下单,符合条件的推荐人可获赠7天服务器使用时长。
6. 活动期间享宕机补偿标准翻倍、简单网站迁移协助及技术工单优先处理权益。
温馨提示:优惠码不适用于拼团套餐、活动轻量产品、年付订单及续费订单;拼团套餐为独立特价活动,不与赠时类福利叠加。赠送时长不可折现、退款或跨账户转移,具体规则以活动页面说明为准。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意