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

Abs*_*Abs 9 iptables amazon-web-services amazon-elb

使用webserver(apache或nginx),我能够找到x-forwarded-for标头并找到客户端IP而不是ELB的IP.

我可以使用相同的东西,IPTables以便我能够阻止某些IP地址吗?

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

Die*_*rán 13

自7月30日起,ELB支持代理协议.如AWS论坛此主题的结尾所述:

Elastic Load Balancing(ELB)现在支持代理协议版本1.此功能允许您在使用TCP负载平衡时识别客户端的连接信息,从而进一步了解应用程序的访问者.拥有此信息对于分析流量日志,收集连接统计信息,故障排除或管理IP地址白名单非常有用.

您必须在ELB中启用代理协议.

开发者指南大约有代理协议的更多信息.

  • 请注意:仅在使用 `TCP` 侦听器时才需要代理协议。对于 HTTP 侦听器,您仍然可以使用 X-Forwarded-For 标头。 (2认同)

Mic*_*bot 7

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

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


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

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

如果您使用的是Amazon Virtual Private Cloud,则可以为Elastic Load Balancer的前端配置安全组.-  http://aws.amazon.com/ec2/faqs/#ELB6

当您需要允许一组相对较小的特定IP地址范围时,最容易使用安全组.如果您想允许大多数但阻止一些,那么VPC网络访问控制列表是更容易的方法.