Nginx set_real_ip_from AWS ELB负载均衡器地址


22

我在Amazon ELB负载均衡器后面有一组Nginx服务器。我正在使用set_real_ip(来自HttpRealIpModule),以便可以访问这些服务器上的原始客户端IP地址(用于传递到php-fpm并在HttpGeoIPModule中使用)。

似乎set_real_ip_from在nginx配置中只能接受一个I​​P地址。但是,关于ELB机器,亚马逊说:

注意:由于与LoadBalancer关联的IP地址集会随着时间而变化,因此您永远不要使用任何特定IP地址创建“ A”记录。如果要为您的LoadBalancer使用友好的DNS名称,而不是由Elastic Load Balancing服务生成的名称,则应为LoadBalancer DNS名称创建CNAME记录,或使用Amazon Route 53创建托管区域。有关更多信息,请参阅在弹性负载平衡中使用域名

但是,如果我需要输入IP地址,则不能使用CNAME(亚马逊的或我自己的)。有解决这个问题的方法吗?

Answers:


40

如果可以保证所有请求都来自ELB(我不熟悉),则可以尝试:

real_ip_header X-Forwarded-For;
set_real_ip_from 0.0.0.0/0;

那应该告诉nginx信任任何人的X-Forwarded-For标头。缺点是,如果有人直接访问您的服务器,他们将能够欺骗X-Forwarded-For标头,而nginx将使用错误的客户端IP地址。


2
谢谢-我没有意识到我可以在此处添加IP范围...我将检查ELB是否可以在更特定的范围内使用(我想10.0.0.1/8这可能会起作用,尽管可能有更具体的内容)
vitch

我加了一个跟进的问题,以找出是否有人知道有效范围:serverfault.com/questions/331697/...
vitch

如果是VPC ALB,则您的范围与LB所在的子网范围相同。
talonx

17

当今的最佳实践是使用VPC,因此,您将知道ELB的确切CIDR。然后,您可以在Nginx配置文件中添加以下内容:

real_ip_header X-Forwarded-For;
set_real_ip_from 10.0.0.0/8;

看到问题出在2011年,那么那时该选项可能就不可用了。我只包括所有可能的专用网络,因为外部用户不会轻易访问它们。
乔丹·瑞特


4

在Amazon ELB上将可信范围设置为0.0.0.0/0肯定会给您带来麻烦。如果可以为nginx服务器配置安全组,则可以保证请求来自ELB,但是原始请求将来自任何可能的来源(Amazon ELB是公共接口)。

一个简单的测试将揭示出这一点:

curl --header "X-Forwarded-For: 1.2.3.4" "http://your-elb-dns-address/"

然后,nginx服务器上的日志将显示1.2.3.4作为真实IP,这是一个欺骗性的IP。有关更好的答案,请参阅Amazon ELB的内部私有IP的IP范围


3
如果您将real_ip_recursive设置 on(这不是默认设置),并且在我最初回答该问题时甚至不存在,那么这只会是一个问题。
kolbyjack's 2014年

3

realip_module,在X -转发,对于情况下,该模块使用最后一个IP地址在美国的X转发,对于更换头。仅在real_ip_headerset_real_ip_form设置时,此模块将不起作用。这是因为此模块将使用代理IP地址而不是客户端IP。解决此real_ip_recursive指令应启用。

此外,如果您具有在实例上部署和更新的SSL证书(例如letsencrypt或certbot证书)。这些证书颁发机构可能会尝试通过IPV6验证那些证书。

因此,拥有IPV6也很重要。因此,Nginx配置文件还应包含来自IPV6地址的set_real_ip_。

real_ip_header X-Forwarded-For;
real_ip_recursive on;
set_real_ip_from <your VPC IPV4 CIDR here>;
set_real_ip_from <your VPC IPV6 CIDR here>;

如果需要采取其他安全措施,我们可能还需要set_real_ip_from为Cloudfront / elb / ec2子网包括VPC CIDR(IPV4和IPV6)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.