Erros de ataque de spoofing de IP após a configuração de um balanceador de nó no Linode.com

2

Eu recentemente configurei um NodeBalancer na frente de um aplicativo Rails 3.2.12. O aplicativo é servido por nginx e unicórnio.

Tudo parece funcionar bem, mas recebo muitos erros como esses que não recebi quando tinha apenas 1 servidor.

IP spoofing attack?!HTTP_CLIENT_IP="10.16.81.184"HTTP_X_FORWARDED_FOR="136.160.88.153, 192.168.255.5"
actionpack (3.2.12) lib/action_dispatch/middleware/remote_ip.rb:55:in 'calculate_ip'

Aqui está minha configuração nginx para o aplicativo.

upstream unicorn {
server unix:/tmp/unicorn.ahotu-calendars.sock fail_timeout=0;
}

server {
listen 80 default deferred;
root /home/deployer/apps/appdirectory/current/public;
if (-f $document_root/system/maintenance.html) {
return 503;
}
error_page 503 @maintenance;
location @maintenance {
rewrite ^(.*)$ /system/maintenance.html last;
break;
}

location ^~ /assets/ {
gzip_static on;
expires max;
add_header Cache-Control public;
}

try_files $uri/index.html $uri @unicorn;
location @unicorn {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://unicorn;
}

error_page 500 502 503 504 /500.html;
client_max_body_size 4G;
keepalive_timeout 10;
}

Eu fiz algo errado no arquivo de configuração?

Obrigado.

    
por jlfenaux 15.03.2013 / 08:17

1 resposta

2

Para evitar que os clientes falsifiquem os cabeçalhos de um proxy, tanto X-Forwarded-For quanto Client-Ip precisam ser iguais para não gerar esse tipo de erro.

Basta definir o cabeçalho Client-Ip na sua configuração nginx :

Quanto aos endereços IP em seu log:

  • 192.168.255.5 provavelmente é o IP interno do NodeBalancer (exemplos em Linode Library mostram 192.168.0.0/16 subnet como de costume; isso deve ser estático - ou pelo menos manter dentro da sub-rede)
  • 136.160.88.153 é o endereço remoto real que você deseja conhecer
  • 10.16.81.184 é algum outro endereço IP desconhecido - talvez outro proxy o tenha adicionado anteriormente
    (aparece em cada pedido ou às vezes está vazio?)

Me desculpe, eu de alguma forma achei que (o seu) nginx estaria rodando no NodeBalancer .
Use o HttpRealIpModule assim:

# trust connections from internal addresses
set_real_ip_from 192.168.0.0/16;
real_ip_header X-Forwarded-For;

Ou, pelo menos, certifique-se de passar o cabeçalho original X-Forwarded-For para o Rails em vez do modificado pelo nginx , e desmarque a Client-Ip (de onde quer que venha):

proxy_set_header X-Forwarded-For $http_x_forwarded_for;
proxy_set_header Client-Ip "";
    
por 16.03.2013 / 01:58