【问题标题】:How to determine the IP ranges used by the GCP load balancers如何确定 GCP 负载平衡器使用的 IP 范围
【发布时间】:2018-08-28 13:56:21
【问题描述】:

如何确定 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

  ...
}

我在“HTTP(S) 负载平衡概念”文档页面的 Firewall rules 部分找到了 IP 范围 130.211.0.0/2235.191.0.0/16

但是,在实际操作中,我注意到访问可能来自另一个IP范围35.190.0.0/17

因此,我查阅了 Google Compute Engine 常见问题解答的 section,了解到我可以获得 GCP 的所有公共 IP 范围的列表。

这个列表很长,似乎包括负载平衡器使用的 IP 范围。

我有两个问题:

  1. 如何确定 GCP 负载平衡器使用的 IP 范围?
  2. 如何在 IP 范围更改时更新 Nginx 配置?

【问题讨论】:

  • 澄清一下,LB 防火墙部分列出的范围是实际负载均衡器拥有的 IP 范围,而不是您分配给负载均衡器前端的 IP。您分配给前端的 IP 可以是任何外部 Google IP 地址。该组的外部 IP 可以分配给虚拟机、负载平衡器前端或任何其他需要外部 IP 的资源
  • Patrick,你的意思是我们无法知道 HTTP 请求是否通过任何 GCP 负载均衡器到达后端?
  • 是的,您可以,请求将来自负载均衡器防火墙部分中列出的 4 个不同范围。但是这些 IP 范围与您分配给 LB 前端的外部 IP 范围不同。 35.19.0.0/17 是 Google 外部 IP 范围的一部分,但不保留用于任何特定用途
  • Patric,负载均衡器防火墙部分指的是哪个页面?我在cloud.google.com/load-balancing/docs/https/#firewall_rules 上只看到两个范围。
  • 所以文档不是很好,只有你提到的两个实际上是正确记录的。在运行 Kubernetes 入口资源时,您会注意到另外两个范围:209.85.204.0/22 和 209.85.152.0/22

标签: nginx google-cloud-platform google-compute-engine


【解决方案1】:

没那么长,我只是将它们全部放在一个单独的文件中,并将其包含在您的 Nginx 配置中。

然后只需将 bash 脚本作为 cron 作业运行以创建新的配置文件,将其与当前配置文件进行比较,并在必要时重新启动 Nginx。

这样的事情应该让你开始:

for i in $(host -t txt _cloud-netblocks.googleusercontent.com | egrep -o "_cloud-netblocks[0-9]+\.googleusercontent.com"); do
host -t txt "$i" | egrep -o "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\/[0-9]+" | sed -e 's/^/set_real_ip_from /' -e 's/$/;/' >> newhostsfile;
done;
diff -N newhostsfile hostsfile > /dev/null && rm newhostsfile || mv newhostsfile hostsfile | nginx -s reload;

【讨论】:

  • 感谢您的回答。我使用“长”这个词是因为我认为该列表包括普通 VM 实例的 IP 地址。如果我的客人是正确的,则应排除这些地址。我想知道如何确定列表中每个IP地址的作用。
  • 我运行了我的代码,列表中有 54 个条目。如果你想确切地知道谷歌从 GCP 上使用的每个 IP 地址做了什么,那么是的,祝你好运。 ?
【解决方案2】:

我在 Google Kubernetes Engine 上测试部署时遇到了同样的问题。我发现如果你为负载均衡器分配一个静态 IP 地址,那就是转发流量的额外 IP 地址。静态 IP 地址始终超出 Google 负载平衡器的列出范围,因为它们可以保留用于负载平衡以外的目的。就我而言,我将 Google 列出的范围与我的静态 IP 一起列入白名单,一切正常;流量不会从任何其他 IP 地址转发。

将 Google 的整个 IP 地址范围列入白名单可能会打开一个安全漏洞,使某人能够在您的网站上欺骗他们的 IP。如果有人使用分配有您列入白名单的 Google IP 之一的 Google Compute Engine 实例,他们将能够通过更改 forwarded-for 标头来欺骗其 IP。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-21
    • 1970-01-01
    • 1970-01-01
    • 2020-06-09
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多