如何安全地使用 ELB 对 PROXY 协议版本 1 的支持?

如何安全地使用 ELB 对 PROXY 协议版本 1 的支持?

亚马逊的Elastic Load Balancer 支持 PROXY 协议版本 1.这允许负载均衡器后面的服务器确定客户端连接的原始源 IP 地址。

但是,那协议规范第 2 节和第 5 节明确指出,您必须以某种方式确保只有授权端点才能连接到支持此协议的端口。否则,恶意用户可能会直接连接到服务器,绕过代理,并发送 PROXY 标头,声明他们想要的任何源 IP 地址。

我的问题是,如何使用 ELB 实现这一点?据我所知,没有固定的源 IP 地址列表可以连接到您的服务器。没有办法限制端口,以便只有您的 ELB 可以连接到它。似乎任何人都可以创建一个 EC2 实例,并在 ELB 代理的同一端口上直接连接到您的服务器,模拟负载均衡器,并声称从他们想要的任何 IP 地址进行连接。

这不可能。我遗漏了什么?

答案1

因此,您尝试仅允许从 ELB 连接到您的 EC2 实例。

您可以在管理控制台或者(像大多数 AWS 一样)通过 API。我将定义管理控制台方法。

首先,我们需要确定 ELB 的安全用户和名称。转到管理控制台,选择 EC2 和负载均衡器选项卡。从列表中选择您的负载均衡器,然后转到首选项中的安全选项卡。在这里,您将看到您的源安全组。它可能是“amazon-elb/amazon-elb-sg”,但我会保留此说明,以防将来发生变化 ;-)

现在转到“安全组”菜单并选择您用于 EC2 服务器的组。添加一条新规则,其中“amazon-elb/amazon-elb-sg”(或您的 ELB 组)是源。确保您没有针对该端口的任何其他入站规则,尽管您仍然可以允许直接访问 ELB 未涵盖的其他端口。

答案2

使用最新的 haproxy 版本,您可以使用:

 tcp-request connection expect-proxy layer4 if *condition*

这将仅为规则匹配启用代理协议状况。这样,您可以仅为 ELB 节点启用它(当然,前提是您知道它们的地址)。

答案3

您的虚拟服务器用于通信的网络接口仅允许连接到同一客户运行的其他虚拟服务器的私有 IP 地址(192.168.x、172.16.x、10.x)。因此,您无法通过连接到其他客户的私有 IP 和端口来任意访问其虚拟服务器。

相关内容