如何确定 GCP 负载平衡器使用的 IP 范围
我在 Google Cloud Platform (GCP) 上运行多个 VM 实例。它们位于 HTTP(S) 负载平衡器之后。
为了基于源IP地址限制访问,我在每个VM实例上配置了Nginx如下:
server {
listen 80;
listen [::]:80;
server_name www.example.com;
real_ip_header X-Forwarded-For;
real_ip_recursive on;
set_real_ip_from 130.211.0.0/22; # GCP load balancers
set_real_ip_from 35.191.0.0/16; # GCP load balancers
...
}
我在 Firewall rules 上找到了 IP 范围 130.211.0.0/22
和 35.191.0.0/16
“HTTP(S) 负载平衡概念”文档页面的部分。
但是,在实际操作中,我注意到访问可能来自另一个IP范围35.190.0.0/17
。
所以,我咨询了一个section Google Compute Engine 常见问题解答,我了解到我可以获得 GCP 的所有公共(public) IP 范围的列表。
此列表很长,似乎包括负载均衡器不使用的 IP 范围。
我有两个问题:
- 如何确定 GCP 负载平衡器使用的 IP 范围?
- 当 IP 范围发生变化时,如何更新 Nginx 配置?
最佳答案
我在测试 Google Kubernetes Engine 上的部署时遇到了这个完全相同的问题。我发现如果你为你的负载均衡器分配一个静态 IP 地址,那就是流量将从中转发的额外 IP 地址。静态 IP 地址始终不在 Google 负载平衡器的列出范围内,因为它们可以保留用于负载平衡以外的目的。就我而言,我将 Google 列出的范围与我的静态 IP 一起列入白名单,一切正常;流量不会从任何其他 IP 地址转发。
将 Google 的整个 IP 地址范围列入白名单可能会打开一个安全漏洞,有人可以在您的网站上伪造他们的 IP。如果有人使用 Google Compute Engine 实例,该实例分配了您列入白名单的 Google IP 之一,他们将能够通过更改 forwarded-for header 来欺骗他们的 IP。
关于nginx - 如何确定 GCP 负载平衡器使用的 IP 范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52059648/