Amazon 的Elastic Load Balancer 支持 PROXY 协议版本 1。这允许负载均衡器后面的服务器确定客户端连接的原始源 IP 地址。
但是,协议规范在第 2 节和第 5 节中明确指出,您必须以某种方式确保只有授权端点才能连接到支持该协议的端口。否则,恶意用户可以直接连接到服务器,绕过代理,并发送一个 PROXY 标头声明他们希望的任何源 IP 地址。
我的问题是,你如何用 ELB 做到这一点?据我所知,没有可以连接到您的服务器的源 IP 地址的固定列表。没有办法限制端口,以便只有您的 ELB 可以连接到它。似乎任何人都可以创建一个 EC2 实例并在 ELB 代理的同一端口上直接连接到您的服务器,模拟负载均衡器,并声称从他们喜欢的任何 IP 地址进行连接。
这不可能。我错过了什么?
因此,您尝试只允许从 ELB 连接到您的 EC2 实例。
您可以在管理控制台中执行此操作,或者(像大多数 AWS 一样)通过 API 执行此操作。我将定义管理控制台方法。
首先,我们需要确定您的 ELB 的安全用户和名称。转到管理控制台,选择 EC2 和负载均衡器选项卡。从列表中选择您的负载均衡器,然后转到首选项中的安全选项卡。在这里,您将看到您的Source Security Group。它可能是“amazon-elb/amazon-elb-sg”,但我会在此处保留此说明,以防将来发生变化;-)
现在转到安全组菜单并选择您用于 EC2 服务器的组。添加一条新规则,其中“amazon-elb/amazon-elb-sg”(或任何您的 ELB 组)是源。确保您没有针对该端口的任何其他入站规则,尽管您仍然可以允许直接访问 ELB 未涵盖的其他端口。
使用最新的 haproxy 版本,您可以使用:
这将只为规则匹配条件启用代理协议。通过这种方式,您可以仅为 ELB 节点启用它(当然,前提是您知道它们的地址)。
您的虚拟服务器用于通信的网络接口仅允许连接到属于同一客户运行的其他虚拟服务器的专用 IP 地址(192.168.x、172.16.x、10.x)。所以你不能通过连接到他的私有IP和端口来任意访问另一个客户的虚拟服务器。