Amazon的Elastic Load Balancer支持PROXY协议版本1.这允许负载均衡器后面的服务器确定客户端连接的原始源IP地址。
但是, 协议规范在第2节和第5节中明确指出,您必须以某种方式确保只有经过授权的terminal才能连接到支持该协议的端口。 否则,恶意用户可以直接连接到服务器,绕过代理,并发送一个PROXY头,声称他们希望的任何源IP地址。
我的问题是,你如何与ELB做这个? 据我所知,没有固定的源IP地址列表可以连接到您的服务器。 没有办法限制一个端口,只有你的ELB可以连接到它。 看来任何人都可以创build一个EC2实例,并直接连接到您的服务器在ELB代理的同一个端口上,模拟负载均衡器,并声称从任何他们请求的IP地址连接。
那不可能是正确的。 我错过了什么?
所以你试图只允许从ELB连接到你的EC2实例。
你可以通过pipe理控制台或者(像大多数AWS一样)通过API来做到这一点。 我将定义pipe理控制台方法。
首先,我们需要确定您的ELB的安全用户和名称。 转至pipe理控制台 ,selectEC2和Load Balancers选项卡。 从列表中select负载均衡器,然后转到首选项中的“安全”选项卡。 在这里你会看到你的源代码安全组 。 这可能是“亚马逊-elb /亚马逊-elb-sg”,但我会保持这个指令,以防万一它在未来的变化;-)
现在进入安全组菜单并select您用于EC2服务器的组。 添加一个新的规则,其中“amazon-elb / amazon-elb-sg”(或任何你的ELB组)是Source。 请确保您没有任何其他入站规则,尽pipe您仍然可以直接访问ELB未涵盖的其他端口。
使用最新的haproxy版本,您可以使用:
tcp-request connection expect-proxy layer4 if *condition*
这将使代理协议只适用于匹配条件的规则。 这样你可以只为ELB节点启用它(当然,只要你知道他们的地址)。
虚拟服务器仅用于通信的networking接口允许连接到属于由同一客户运行的其他虚拟服务器的专用IP地址(192.168.x,172.16.x,10.x)。 因此,您不能通过连接到其私有IP和端口来随意访问其他客户的虚拟服务器。