我正在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/22
和35.191.0.0/16
。
但是,在实际操作中,我注意到访问可能来自另一个IP范围35.190.0.0/17
。
因此,我查阅了section的Google Compute Engine常见问题解答,并了解到我可以获得GCP的所有所有公共IP范围的列表。
此列表很长,似乎包含了负载均衡器未使用的IP范围。
我有两个问题:
答案 0 :(得分:2)
时间不长,我将它们全部放在一个单独的文件中,并将其包含在您的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;
答案 1 :(得分:1)
在测试Google Kubernetes Engine上的部署时遇到了完全相同的问题。我发现,如果您为负载均衡器分配了静态IP地址,则这是流量将从其转发的其他IP地址。静态IP地址始终超出Google负载平衡器列出的范围,因为静态IP地址可以保留用于负载平衡以外的目的。就我而言,我将Google列出的范围以及我的静态IP列入了白名单,并且一切正常。流量不会从任何其他IP地址转发。
将整个Google IP地址范围列入白名单可能会打开一个安全漏洞,使他人能够在您的网站上欺骗其IP。如果有人使用分配了您列入白名单的Google IP之一的Google Compute Engine实例,他们将能够通过更改转发的标头来欺骗其IP。