X-Forwarded-Proto 未通过带有 Palo Alto VM 防火墙的 AWS ALB Sandwich

X-Forwarded-Proto not being passed through AWS ALB Sandwich with Palo Alto VM Firewall

我们将 Palo Alto 的 VM 防火墙与 ELB sandwich topology 一起使用,但无法获得正确的 X-Forwarded-Proto 以使其一直返回到 Web 服务器。 HTTPS 终止发生在外部负载平衡器上,然后 运行 作为 HTTP 通过堆栈的其余部分。使用单个负载均衡器,我们可以毫无问题地检索正确的 X-Forwarded-Proto header,无论是 HTTP 还是 HTTPS。但是,在三明治拓扑中,无论如何我们都将 HTTP 作为 X-Forwarde-Proto。

我们需要 header 的主要问题是将所有请求重定向到 HTTPS,这可能可以在 PAN 防火墙上完成,但也被证明难以实现。

这是预期的行为,很可能是设计使然——如果 ALB passed-through X-Forwarded-Proto 它可以被伪造,并且它们没有内置任何允许异常的能力......所以它总是被覆盖。

您可以在内部使用网络负载均衡器。由于这些 运行 在第 4 层,它们不会操纵 headers.

或者,如果 external-facing 平衡器是一个 ALB,您可以在那里创建一个规则,在平衡器内将所有 HTTP 请求重定向到 HTTPS。

With redirect actions, the load balancer can redirect incoming requests from one URL to another URL. This includes the capability to redirect HTTP requests to HTTPS requests, which allows you to meet your compliance goal of secure browsing, achieve better search ranking and high SSL/TLS score for your site.

https://aws.amazon.com/about-aws/whats-new/2018/07/elastic-load-balancing-announces-support-for-redirects-and-fixed-responses-for-application-load-balancer/

关于 ALB 重定向的一个小问题 "gotcha" 是您必须将目标端口明确指定为 443,否则平衡器将保留原始端口并将重定向写入 https://example.com:80/,这当然会不工作。

这可能不是您要寻找的答案,但如果您在传输层使用基于 TCP 的网络负载平衡器而不是在应用层使用 HTTP/S 侦听器,则此架构将有效。

传输负载平衡器在将请求代理到目标时根本不会考虑协议,并且整个 HTTPS 将保持完整。应用程序负载均衡器将解释其策略并按设计覆盖 X-Forwarded-Proto