Ontem fomos atingidos por um ataque DDoS atingindo nossos servidores web (apache2). O frontend consiste em conexões de balanceamento de carga haproxy para os servidores web. No access.log do apache vimos milhares de pedidos de dois ips e depois de algumas horas percebemos que eram falsos/falsificados e não eram os ips reais.
Por motivos de esclarecimento, fizemos um "curl GET /" com um ip de "137.137.136.136" e de fato esse é o ip (fake one) que vimos em nossos weblogs
Agora, em outro cluster onde usamos nginx como proxy reverso, alterar/criar o cabeçalho X-Forwarded-For não funciona. Ou seja, mesmo se você inserir um ip aleatório no cabeçalho específico, o nginx ainda passará o ip correto para o servidor web de back-end?
Isso tem a ver com haproxy?
Alguém pode confirmar que os cabeçalhos X-Forwarded-For criados podem passar pelo haproxy?
Por que isso não está acontecendo no nginx?
Como você evita isso?
No haproxy, se você não tem nada que impeça isso, isso é normal, não sei como lidar com isso no nginx, mas resolvi dessa forma usando o haproxy:
nas opções padrão:
Na minha definição de frontend haproxy, eu tenho:
Isso exclui
X-Forwarded-For
na solicitação http se o cliente tentar falsificar e haproxy retornar o cabeçalho real na resposta http com o endereço IP verdadeiroSe você quiser usar
X-Forwarded-For
para verificar o endereço IP de clientes http, você precisa excluí-lo se existir na solicitação http, porque o cliente que usa um proxy http às vezes define o endereço IP local emX-Forwarded-For