Nginx set_real_ip_from endereço do balanceador de carga do AWS ELB

20

Eu tenho um conjunto de servidores Nginx por trás de um balanceador de carga do Amazon ELB. Eu estou usando set_real_ip (do HttpRealIpModule ) para que eu possa acessar o endereço IP do cliente de origem nesses servidores (para passar para php -fpm e para uso no HttpGeoIPModule ).

Parece que set_real_ip_from na configuração nginx só aceita um endereço IP. No entanto, no que diz respeito às máquinas ELB, a Amazon diz:

Note: Because the set of IP addresses associated with a LoadBalancer can change over time, you should never create an "A" record with any specific IP address. If you want to use a friendly DNS name for your LoadBalancer instead of the name generated by the Elastic Load Balancing service, you should create a CNAME record for the LoadBalancer DNS name, or use Amazon Route 53 to create a hosted zone. For more information, see the Using Domain Names With Elastic Load Balancing

Mas se eu precisar inserir um endereço IP, não posso usar um CNAME (seja o da amazon ou o meu). Existe uma solução para este problema?

    
por vitch 16.11.2011 / 14:14

4 respostas

37

Se você puder garantir que todas as solicitações serão provenientes do ELB (não estou familiarizado com isso), tente:

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

Isso deve dizer ao nginx para confiar em um cabeçalho X-Forwarded-For de qualquer pessoa. A desvantagem é que, se alguém acessa diretamente o seu servidor, ele seria capaz de falsificar um cabeçalho X-Forwarded-For e o nginx usaria o endereço IP do cliente errado.

    
por 16.11.2011 / 17:25
17

A prática recomendada de hoje é usar o VPC, portanto, você saberá o CIDR exato do seu ELB. Então, você pode adicionar algo assim ao seu arquivo de configuração Nginx:

real_ip_header X-Forwarded-For;
set_real_ip_from 10.0.0.0/8;
    
por 16.02.2015 / 21:13
7

Use o CIDR VPC para set_real_ip_from Você pode encontrá-lo no console da Amazon em VPC = > Seu VPC (substitua <your VPC CIDR here> por ele):

real_ip_header X-Forwarded-For;
set_real_ip_from <your VPC CIDR here>;
    
por 31.07.2015 / 18:01
4

Definir o intervalo confiável como 0.0.0.0/0 no Amazon ELB certamente trará problemas. Você pode garantir que as solicitações vêm do ELB se você puder configurar o grupo de segurança para seu servidor nginx, mas a solicitação original terá origem em qualquer fonte possível (os ELBs da Amazon são interfaces públicas).

Um teste simples revelará isso:

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

Os registros em seu servidor nginx mostrarão 1.2.3.4 como o IP real, que é um IP falso. Consulte Intervalo de IPs para IP privado interno do Amazon ELB para melhores respostas.

    
por 23.07.2013 / 09:59