按客户端 IP 限流有一个前提:你要确定这个 IP 是真的。项目的 Sentinel 配置只允许可信代理的 X-Forwarded-For 生效,否则直接使用
TCP 远端地址。
一、伪造风险
X-Forwarded-For 是普通请求头,客户端可以随便填。如果无脑取第一个值,攻击者可以在每次请求里换一个假 IP,轻松绕过单 IP 限流。
二、判断直连地址
逻辑分两步:
- 读取 TCP direct address。
- 只有 direct address 在
trusted-proxies里,才解析转发头。
本机回环地址默认可信,适配本机反向代理调试。
三、取第一个非 unknown 值
X-Forwarded-For 可能包含多跳代理:
client, proxy1, proxy2
项目取第一项作为候选客户端,并排除空白和 unknown。更复杂的多层代理需要明确每跳的追加规则。
四、可信代理列表要精确
不要为了方便填写整个网段。代理列表越宽,伪造面就越大;如果架构变化,也要同步维护这个列表。
五、经验总结
安全相关的请求头不能默认可信。来源识别的正确性,直接决定 IP 限流是否真的有意义。