正常访问 60 次后被限流,加一个 X-Forwarded-For: 1.2.3.4 的请求头,立刻就通过了,连续换 20 个假 IP 拿到 1200 次额度。网关日志里记录的客户端 IP 全是伪造值。乍看像缓存或者权限的锅,追下去往往不是。

curl -H 'X-Forwarded-For: 1.2.3.4' https://api.example.com/api/query
# 期望仍被限流 实际返回 200
curl -H 'X-Forwarded-For: 5.6.7.8' https://api.example.com/api/query

追下去是这么回事:限流取 XFF 的第一段作为客户端 IP,这个头由客户端自己拼,网关只是追加而不是覆盖。每换一个值就是一个新的限流 key。

碰到「XFF 伪造绕限流」这类问题,我习惯先把当前配置原样备份一份,改坏了立刻换回来,不用现场推。接口问题先分清是没发出去、发出去了没收到,还是收到了处理失败。

偶发问题先统计频率,一小时几次和一天一次,查法完全不同。改完顺手把文档补一句,省得下次自己重新推一遍。

具体做法是,只信任网关自己写入的那一段 取最后一个可信代理 IP;在入口统一覆盖 XFF 不要追加客户端给的值;限流 key 优先用登录用户 id IP 作为兜底。

验收就看一点,换 20 个伪造的 XFF 后仍然在第 61 次被限流,日志里的客户端 IP 都是同一个真实出口地址。

作者 9823189