Google compute engine 从负载平衡器获取Orgin IP

Google compute engine 从负载平衡器获取Orgin IP,google-compute-engine,google-cloud-platform,Google Compute Engine,Google Cloud Platform,有没有办法从HTTP负载平衡w/GCloud获取用户的原始IP?我们目前只使用网络负载平衡,并且需要转移到跨区域均衡器,尽管我们需要更改用户的IP以实现法规遵从性和日志记录 它是通过标题还是沿着这些线 谢谢~Z好的,所以在翻阅了头文件和其他内容之后,我发现下面的头文件正在为用户传递原始IP和电子IP $_SERVER['HTTP_X_FORWARDED_FOR'] 您需要按“,”将其拆分,并获取字符串的第一部分。这是用户IP,由Google云HTTP均衡器推送。文档()说这是X-Forward

有没有办法从HTTP负载平衡w/GCloud获取用户的原始IP?我们目前只使用网络负载平衡,并且需要转移到跨区域均衡器,尽管我们需要更改用户的IP以实现法规遵从性和日志记录

它是通过标题还是沿着这些线


谢谢~Z

好的,所以在翻阅了头文件和其他内容之后,我发现下面的头文件正在为用户传递原始IP和电子IP

$_SERVER['HTTP_X_FORWARDED_FOR']
您需要按“,”将其拆分,并获取字符串的第一部分。这是用户IP,由Google云HTTP均衡器推送。

文档()说这是X-Forwarded-For头的第一个IP地址

  X-Forwarded-For: <client IP(s)>, <global forwarding rule external IP>
X-Forwarded-For:,

如果您确定在Google云平衡后没有运行任何其他代理(将附加IP添加到X-Forwarded-For中),您可以从X-Forwarded-For获得倒数第二个IP作为即时客户端IP。或者,即使您有一些代理,但知道将附加的额外IP的确切数量,您也可以将这些IP添加到帐户中

发件人:

X-Forwarded-For:,,(仅限请求)

负载平衡器仅提供
条目。中的所有其他条目 这份名单未经核实就传了出去


在直接客户端IP之前出现的IP可能是伪造的IP或来自客户端代理的IP。即使客户端欺骗X-Forwarded-For报头,负载平衡器仍会附加到达负载平衡器的实际IP。

基于HTTP\u X\u Forwarded\u For报头,一个很好的Nginx规则可以分割IP链:

set $realip $remote_addr;
if ($http_x_forwarded_for ~ "^(\d+\.\d+\.\d+\.\d+)") {
  set $realip $1;
}
fastcgi_param REMOTE_ADDR $realip;
包含fastcgi_参数后粘贴指令有效

如果您使用的是Cloudflare,您可以从HTTP\u CF\u CONNECTING\u IP获得原始客户端IP

您可以白名单/忽略GCP已知的ip,如注册loadbalancer所需的静态ip

set_real_ip_from 36.129.221.25/32; // LB Public IP address
set_real_ip_from 130.211.0.0/22; // Private IP range for GCP Load Balancers
set_real_ip_from 35.191.0.0/16; //Private IP range for GCP Load Balancers
real_ip_header X-Forwarded-For;
real_ip_recursive on;

请注意,如果用户发送已设置了
X-Forwarded-For
的请求,则可能会伪造此标头。如果GCP可以指定一个选项来创建一个
X-Real-IP
头,用这个名称覆盖任何请求头,只设置请求的IP,这样它就不会被欺骗。即使是这样,上游代理也可以将X-F-F设置为欺骗地址。你是对的,作为一种安全机制,这个报头并不完全可靠。我的意思是,在这种情况下,GCP可以对LB进行编程,以便它根据实际传入的请求设置源IP,而不是从请求的报头读取它(并覆盖现有的
X-Real-IP
报头,如果客户端设置了它)。@Tony,实际上,所有云服务提供商都保留了头中的内容,在最后添加连接IP+负载平衡器的IP。请参见下面Cakraw的答案