如何在AWS ELB后面获取客户端IP?

时间:2013-08-31 10:46:06

标签: amazon-web-services iptables amazon-elb

使用网络服务器(apache或nginx),我能够找到x-forwarded-for标题并找到客户端IP而不是ELB的IP。

我可以使用IPTables做同样的事情,以便我能够阻止某些IP地址吗?

我可以在网络服务器级别执行此操作。但是,我认为这样效率有点低,我希望能用IP表或类似的东西实现这个目标吗?

2 个答案:

答案 0 :(得分:13)

自7月30日起,ELB支持Proxy Protocol。如this thread in the AWS forum末尾所述:

  

Elastic Load Balancing(ELB)现在支持代理协议版本1。   此功能允许您识别客户端的连接   使用TCP负载平衡时的信息,提供额外的   洞察您的应用程序的访问者。有这个信息   可用于分析流量日志,收集连接   统计,故障排除或管理IP地址白名单。

您必须enable Proxy Protocol in the ELB

developers guide提供了有关代理协议的更多信息。

答案 1 :(得分:6)

你不能用iptables做这件事,因为iptables只会看到弹性负载均衡器的IP地址,因为ELB正在建立与你的实例的连接。

使用Web服务器阻止某些x-forwarded-for值并不是特别低效,但是如果您想控制谁可以通过IP地址访问您的ELB,那么也可以通过连接到ELB的安全组来完成


更新:您的评论部分正确,因为至少截至目前,EC2“经典”上的ELB不支持入站安全组或网络访问控制列表,但是VPC上的ELB会支持。

  

问:我可以为Elastic Load Balancer的前端配置安全组吗?

     

如果您使用的是亚马逊虚拟私有云,则可以为Elastic Load Balancer的前端配置安全组。 - http://aws.amazon.com/ec2/faqs/#ELB6

当您需要允许一组相对较小的特定IP地址范围时,最容易使用安全组。如果你想允许大多数但是阻止一些,那么VPC Network Access Control List是更容易的方法。