我的 API 代理被偷刷了 200 万 Token:5 道防线实战

上个月我发现我的 DeepSeek API 代理半夜一直在跑。早上打开 one-api 后台一看,有个 token 3 小时跑掉了 200 万 tokens。

是我一个朋友的 token。他在用 IDE 插件调 API,开了自动补全,忘了关。DeepSeek 虽然便宜——200 万 tokens 也就两块钱——但如果换成 GPT-4o,那就是 $5 左右的事情。万一哪天 key 被别人扫到呢?

当天晚上我加了以下五道防线。现在分享出来,花不了半小时。

1. 一人一把 Key

这是最基础的。在 one-api 后台的“令牌“页面,每个用你 API 的人发一个独立的 token。这样:

  • 谁用得最多,一眼能看到
  • 谁的 key 被泄露了,单独注销就好
  • 可以给不同的人设不同的额度

我现在的策略是:免费用户 100 万 tokens/月,熟人不限量但挂了监控。

2. 用量告警

one-api 不直接支持钉钉/飞书告警,但我用了个简单的脚本补上。每 5 分钟检查一次 token 用量,超过阈值就通知。

放到 crontab 里跑就行:

*/5 * * * * /usr/local/bin/check_usage.sh

check_usage.sh 的内容不复杂——调 one-api 的 API 拿统计数据,判断有没有超过阈值,超过了发一条飞书消息。你需要一个飞书机器人的 web­hook 地址。

3. Nginx 限流

one-api 自己有限流功能,但我习惯在 Nginx 层再加一层——双重保险:

# 在 Nginx 配置里加
limit_req_zone $binary_remote_addr zone=api:10m rate=30r/s;

location /v1/ {
    limit_req zone=api burst=10 nodelay;
    proxy_pass http://127.0.0.1:3000;
}

rate=30r/s 是最宽松的设置,正常用完全够。如果有人恶意刷,limit_req 会自动返回 503。

4. 防火墙白名单

如果你的 API 只给特定的人用(不是公开服务),最简单的办法是开白名单:

# 只允许你和你朋友的 IP 访问
ufw allow from 你的IP to any port 3000
ufw allow from 朋友的IP to any port 3000
ufw deny 3000

IP 变了?那就没办法了,得手动加。这个方案适合人少、IP 固定的场景。

5. 每个月看一眼账单

这是最容易被忽略的一步。DeepSeek 和 Ope­nAI 的账单藏在后台,我一般月初看一次。有时候看起来都不多,但加起来能让你吓一跳。

我现在的习惯是设置个日历提醒,每月 1 号早上看一眼。

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top