Skip to content

真实客户端 IP 与 X-Forwarded-For 配置 ​

当客户端经过 CDN、WAF 或反向代理后,负载均衡的网络对端地址可能是代理地址。配置前先区分:网络连接来自谁、平台按哪个地址做访问判断、后端收到什么头部。

三个配置分别做什么 ​

配置位置作用
是否解析客户端 X-Forwarded-For虚拟服务的“可信IP”区域从收到的 XFF 地址链中提取客户端地址,用于相关访问判断和日志
可信 IP 集合同一区域指定从 XFF 链右侧向左查找时需要跳过的代理地址
设置 X-Forwarded-For七层 HTTP 策略控制向后端传递 XFF 头部,不等于开启入站地址解析

SNAT 改变的是连接后端时的网络源地址,XFF 是 HTTP 头部。需要后端网络回程配置时,参见 SNAT 与后端回程配置。

第一步:明确代理链与入口范围 ​

例如业务链路为“客户端 → WAF → 负载均衡”。应知道 WAF 使用哪些出口地址、如何清理和写入 XFF,并确认业务入口是否允许客户端绕过 WAF 直连。

可信 IP 集合用于解析地址链,不能代替入口访问控制,也不代表 XFF 已经过身份认证。客户端可以自行构造 HTTP 头部,只有代理链来源受控时,提取出的地址才适合用于业务访问控制。

第二步:创建可信 IP 集合 ​

在【负载流量管理 → IP集合管理】中创建集合,填写实际代理地址或网段。只加入确实需要跳过的代理地址,不要为了让请求通过而将所有地址都设为可信。

若配置黑白名单,应另外创建对应集合,区分“需要跳过的代理”与“允许或禁止访问的客户端”。

第三步:在虚拟服务中开启解析 ​

打开目标 HTTP/HTTPS 虚拟服务,向下滚动到“可信IP”区域,开启“是否解析客户端X-Forwarded-For”,选择可信 IP 集合。

虚拟服务的 XFF 解析开关位置

上图展示开关入口;开启后再选择前一步创建的可信 IP 集合。

当前解析方式为:从 XFF 的最右侧向左查找,跳过可信集合内的地址,取遇到的第一个非可信地址。未收到 XFF 时使用连接对端地址;配置了 PROXY Protocol 时还需核对相应对端地址来源。不要直接把 XFF 最左边一项当成所有情况下的结果。

第四步:关联访问策略并执行变更 ​

如果需要按提取出的地址限制访问,在访问策略中选择黑白名单集合,再由 HTTP 策略引用该访问策略,最后确认实际命中的分发规则使用这个 HTTP 策略。

保存并执行变更后,分别核对平台访问判断和后端收到的头部。需要向后端传递 XFF 时,在 HTTP 策略中配置“设置X-Forwarded-For”;后端也应有自己的可信代理配置。

用地址链验证解析结果 ​

下面使用回归场景中的示例值说明:可信集合包含 1.1.1.1,黑名单包含 1.1.1.2,访问策略和虚拟服务已正确关联。

请求携带的 XFF提取的客户端地址本例预期结果
1.1.1.21.1.1.2被黑名单拒绝,403
1.1.1.2, 1.1.1.1跳过可信项后得到 1.1.1.2被拒绝,403
1.1.1.2, 1.1.1.9, 1.1.1.1跳过末尾可信项,遇到 1.1.1.9 即停止不命中本例黑名单,200

这些值仅用于说明匹配关系,不是其他环境的代理地址规划。还应验证无 XFF 请求,以及绕过代理直连的请求是否符合入口访问要求。

常见问题 ​

现象检查方向
日志里只有代理 IP是否开启解析,代理是否发送 XFF,请求是否到达目标虚拟服务
开了“设置 XFF”但黑名单无效是否只修改了出站头部设置,而没有配置虚拟服务入站解析
同一请求改动 XFF 就改变访问结果入口是否允许不受控客户端直连,代理是否清理外部伪造头部
单客户端限流把多人当成同一人解析后的地址是否仍是代理/NAT 出口,实际使用的策略是否正确
后端连接源 IP 与日志客户端 IP 不同区分 SNAT 网络源地址与 XFF 提取地址,两者可以不同

相关说明:HTTP 访问控制与限流、日志分析。