如何拒绝对没有主机标头的 Google 外部 HTTPS 负载均衡器的请求?

Posted

技术标签:

【中文标题】如何拒绝对没有主机标头的 Google 外部 HTTPS 负载均衡器的请求?【英文标题】:How to reject requests to Google External HTTPS Load Balancer that do not have a host header? 【发布时间】:2021-09-04 17:53:47 【问题描述】:

我在 HTTPS 外部负载平衡器后面有一个云运行服务。我看到许多试图查找漏洞的路径扫描样式请求(例如“/owa”、“/admin”)。这些都没有提供主机头。

为了减少我的云运行容器不必要的启动,并尽量减少将信息暴露给随机 IP 地址扫描器,我正在尝试找到一种方法来拒绝向我的负载均衡器发送的缺少主机标头的请求。

我希望做的是用静态的 403 禁止样式响应来响应。但是,从文档来看这是不可能的。我想出的最好的方法是在我的 url 映射中指定一个“默认 URL 重定向”,以将所有流量发送到 google.com,这些流量与我的 url 映射中的任何主机规则都不匹配。这行得通,但看起来很笨拙,可能不合适。

是否可以发送静态响应 - 还是只能重定向?有没有更好的方法来解决这个问题?

【问题讨论】:

最简单的方法是检测您在 Cloud Run 中运行的应用中是否存在 Host 标头并返回您想要的任何响应。您还可以部署拒绝与指定 Host 标头不匹配的请求的 Cloud Armor 规则。提示:你在追鬼。对于您阻止的每种请求类型,都会弹出另一种请求类型。只需接受面向公众的服务将受到此类流量的影响。除非这种流量干扰了您的应用程序,否则花在这些“幽灵”上的时间和金钱是否值得? 谢谢 - 出于上述原因,我的意图是避免将其放置在 Cloud Run 中。我想对我的问题的正确回答是使用 Cloud Armor。这符合要求。我减少不必要流量的主要原因是使日志解析更容易并避免成本。我可以使用的另一个解决方案是有一个默认的云存储桶后端,其中没有文件。 我理解您的意图。我的评论是让您考虑满足您需求的最佳实施方式。有些目标在现实世界中不会取得好的结果。 【参考方案1】:

从 GCP 产品角度的正确答案:

使用 Cloud Armor 规则来实现所需的行为

这使您可以控制响应的各个方面。

您可以考虑的其他选择:

创建一个空存储桶并将其作为默认后端。 云上的准系统 nginx 服务作为默认后端运行,可返回您所需的状态代码。

【讨论】:

以上是关于如何拒绝对没有主机标头的 Google 外部 HTTPS 负载均衡器的请求?的主要内容,如果未能解决你的问题,请参考以下文章

如果响应 NGINX 中没有 Cache-Control 标头,如何缓存内容

如何在主机将其发送到网络之前修改数据包标头(IP标头,TCP标头)

如何使用 Firebase 托管的 webapp 获取没有 CORS 标头的外部数据?

Google Drive 虚拟主机:拒绝目录列表

Google Batch API,多个授权标头

拒绝从外部mp3获取不安全的标题“Content-Length”/读取ID3标签