9

我似乎无法完成这件事。我仍然在我的日志中看到 cloudflare IP。目前,我有一个 Cloudflare 后面的负载均衡器。

目前,这是与 forwardfor 相关的块:

    option          forwardfor except 127.0.0.1
option          forwardfor except 204.93.240.0/24
option          forwardfor except 204.93.177.0/24
option          forwardfor except 199.27.128.0/21
option          forwardfor except 173.245.48.0/20
option          forwardfor except 103.22.200.0/22
option          forwardfor except 141.101.64.0/18
option          forwardfor except 108.162.192.0/18
    option          forwardfor header X-Real-IP
    reqadd          X-Forwarded-Proto:\ http

有人知道正确的配置可以从 Cloudflare 获取真实 IP 吗?或者可能相当于 nginx 的 set_real_ip_from cloudflareIP 和/或 real_ip_header CF-Connecting-IP 到 haproxy?谢谢。

4

4 回答 4

9

你这样做:

HaProxy 配置:

acl from_cf    src -f /path/to/cloudflare_ips.lst
acl cf_ip_hdr  req.hdr(CF-Connecting-IP) -m found

http-request set-header X-Forwarded-For %[req.hdr(CF-Connecting-IP)] if from_cf cf_ip_hdr
  • 测试时要小心,因为使用 KeepAlive,您可能每次都需要使用新的浏览器/选项卡。
于 2018-09-11T07:57:05.017 回答
3

您正在寻找的是:

http-request add-header X_FORWARDED_FOR %[req.hdr(CF-Connecting-IP)]

这将添加正确的 cloudflare 源 IP。如果您什么都不做,那么您最终会得到src地址和 cloudflare 地址的标头。

于 2016-08-22T22:08:39.253 回答
1

你实际上应该什么都不做。问题是您正在尝试插入转发,除了难以管理的 cloudflare IP 列表,但无论如何您的所有流量都来自 cloudflare。

只需取出任何 forwardfor 选项,cloudflare 标头将通过 haproxy 持续存在。

如果你必须做一些你正在尝试的事情,请确保添加“option httpclose”以确保它总是这样做。

于 2014-02-21T09:01:32.930 回答
0

就我而言,简单且最佳的解决方案。

例如,使用 CloudFlare ip 创建文件/etc/haproxy/cf-ips/cf-ips,并将字符串添加到配置中:

  acl from_cf src -f /etc/haproxy/cf-ips/cf-ips
  http-request set-src req.hdr(CF-Connecting-IP) if from_cf

来自这篇博文的信息

于 2021-10-29T04:22:42.160 回答