外贸站服务器带宽跑满溯源异常爬虫流量

外贸站通常依赖稳定带宽来承接海外询盘和产品浏览,一旦带宽被异常爬虫跑满,轻则页面加载缓慢,重则直接超时断连。
本文从零开始,手把手教你定位是哪类爬虫在吃带宽、如何封堵,以及收尾后怎么确认问题已解决。

1. 先确认带宽到底被谁占用了

不要凭感觉猜,用实际数据说话。
登录你的服务器(或宝塔面板),执行以下步骤:

1.1 查看当前网络流量排行

如果你有宝塔面板,直接进入“实时监控” -> “网络”,可以看到当前上行/下行速率,以及各进程的流量占用。
如果没有面板,SSH 执行 nethogs 命令(需先安装:apt install nethogsyum install nethogs)。
它会按进程显示实时流量:

sudo nethogs

观察进程名,如果看到 nginxhttpd 占满带宽,说明流量进入了 Web 服务,大概率是爬虫或正常用户请求。
如果看到 sshd 异常占用,可能是被爆破或数据窃取。

1.2 使用 iftop 查看 IP 维度的流量

安装 iftopapt install iftop),运行:

sudo iftop -i eth0

(请将 eth0 替换为你的网卡名,可用 ip link 查看)

i 界面会显示与服务器通信的 IP 地址及各自的流量占比。
找到流量最高的几个 IP,记下来,下一步分析这些 IP 的请求详情。

2. 深入分析 Nginx 日志找出可疑请求

Nginx 访问日志通常存放在 /var/log/nginx/access.log(宝塔的日志路径在 /www/wwwlogs/ 下)。
先查看最近一段时间内哪个 IP 请求最多:

sudo awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -20

这条命令会统计访问次数最多的前 20 个 IP。
如果某个 IP 的请求数远超其他 IP(例如几千次/分钟),那它就是重点怀疑对象。

进一步查看该 IP 的请求详情,特别是 User-Agent 和请求路径:

sudo grep "122.x.x.x" /var/log/nginx/access.log | awk -F'\"' '{print $6}' | sort | uniq -c | sort -nr | head -10

将 IP 替换成实际可疑 IP。
输出的 User-Agent 常见有三类:

  • 正常的搜索引擎(如 Googlebot、Bingbot)—— 如果请求频率合理,可忽略;频率过高可以单独调低速率。
  • 恶意爬虫(如 python-requestscurlScrapyAhrefsBot 等)—— 这种就该封了。
  • 空白或伪造 User-Agent —— 典型爬虫特征。

3. 配置 Web 服务器或防火墙拦截异常爬虫

确认是异常爬虫后,根据你的环境选择以下方式之一进行屏蔽。

3.1 宝塔面板用户:使用「防火墙」或「Nginx 免费防火墙」

进入宝塔面板 -> 网站 -> 对应站点 -> 防火墙。
你可以:

  • 在“IP 规则”中直接添加禁止 IP。
  • 在“User-Agent 规则”中添加屏蔽的字符串,例如 python-requestscurl/(注意不要屏蔽你自己的 curl 测试)、AhrefsBot 等。

3.2 非宝塔环境:修改 Nginx 配置

编辑站点配置(通常在 /etc/nginx/sites-enabled/ 下),在 server 块或 location 块中加入:

if ($http_user_agent ~* (python-requests|curl|scrapy|ahrefsbot) ) {
    return 403;
}

保存后执行 nginx -t 检查语法,然后 systemctl reload nginx 重载。

3.3 使用 Fail2ban 动态拦截高频 IP

安装 Fail2ban:

sudo apt install fail2ban

创建一个针对 Nginx 的过滤配置 /etc/fail2ban/jail.local

[nginx-bot]
enabled = true
port = http,https
filter = nginx-bot
logpath = /var/log/nginx/access.log
maxretry = 50
findtime = 60
bantime = 3600

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

[Definition]
failregex =  - -.*"GET.*" (404|403|499) .*
ignoreregex =

(这个例子是封返回 404/403 过多的 IP,你可以根据实际调整。
)重启 Fail2ban:sudo systemctl restart fail2ban

4. 设置监控与告警,避免再次跑满

封堵只是临时的,建议开启带宽超阈值告警。

  • 宝塔面板:在“监控”中设置“带宽使用率”告警,超过 80% 时发邮件/短信。
  • 命令行用户:可用 vnstat 采集流量,配合脚本通过 curl 调用企业微信或钉钉机器人发送通知。

同时,建议定期检查 access.logerror.log,养成查看日志的习惯。

5. 常见踩坑点与验证方法

Q:屏蔽后网站正常访问受影响了怎么办?
A:先检查是否误杀了搜索引擎爬虫。如果是 Googlebot,应该使用 robots.txt 或按频率限流,不要直接封 IP。

Q:为什么封了 IP 带宽还是满?
A:可能是多个 IP 同时爬取,或者攻击来自代理池。建议配合 User-Agent 规则和请求频率限制,并升级到 CDN(如 Cloudflare)来隐藏源站 IP。

Q:如何验证问题已经解决?
A:重复第 1 步,使用 nethogsiftop 观察流量,看到峰值下降且请求数正常;同时检查网站访问速度是否恢复。也可以使用 curl -I 测试首页响应时间。

如果你按照上述步骤操作后,带宽仍然异常,建议检查是否有其他服务(如数据库、邮件发送)异常占用带宽,或联系你的云服务商申请流量分析报告。

延伸阅读:如果你想更系统性地加固外贸站安全,建议继续查看《外贸站服务器安全配置清单》系列文章。
分享到:
上一篇
跨境独立站灰度发布新版本流量调度配置全攻略
下一篇
家用住宅主机UPS断电自动备份关机脚本
1
系统公告

机房迁移升级通知

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