Eu fiz esta pergunta na semana passada e segui o conselho de depuração e agora tenho informações adicionais.
Eu tenho um problema estranho - em um site de alto tráfego (milhões de visitantes por mês), todos os dias recebemos cerca de 20 situações em que um host começa a solicitar incessantemente a mesma página, várias vezes por segundo, por qualquer período de tempo, de alguns minutos até o dia todo.
O ataque aparentemente não é malicioso, já que recorri ao endereço IP e combinei com alguns dos nossos usuários registrados, que entrevistei. Eles dizem que, quando isso acontece, o computador fica lento, mas é de outra forma utilizável. Isso não acontece em todas as páginas, mas esporadicamente.
Os hits de log têm a seguinte característica:
- Eles iniciam 'normal' - o carregamento da primeira página realmente acessa todos os recursos da página (imagens, etc), assim como o .php
- Em seguida, o host começa a solicitar APENAS a página do php, sem os recursos incessantemente, geralmente um por segundo (mas às vezes mais rápido e às vezes alguns segundos mais lento)
- O navegador remoto é sempre o Firefox 3.x (vimos tão alto quanto 3.5.3 e tão baixo quanto 3.0.2)
- Os hits subsequentes não têm referenciador, embora o primeiro pedido de página tenha tido um
- Isso acontece enquanto o visitante está nessa página em particular, e o próximo carregamento da página geralmente é normal
- O usuário muitas vezes não percebe o que está acontecendo - sua página não é recarregada, então o que está acontecendo está acontecendo em segundo plano para eles, e acredito que o Firefox esteja simplesmente jogando as informações para fora
- Isso acontece em páginas estáticas (por exemplo, de contato) e dinâmicas (por exemplo, caixa de correio)
- A distribuição de IP dos hosts afetados não tem semelhanças que eu possa discernir (por exemplo, eles não estão todos protegidos por um firewall corporativo)
- Pensamos que um javascript ruim na página poderia causar isso, mas desabilitar o javascript por completo não afetou o problema
Estamos no final da sagacidade com o que fazer com isso. Um simples filtro DoS não é apropriado - nós temos isso e o limite para acioná-lo é muito maior do que uma única solicitação de página (sem imagens relacionadas, css, etc.) por segundo. Nós também instalamos o mod_evasive, mas isso não está capturando isso, pois temos um sistema de vários servidores e isso funciona por criança.
A pilha é LAMP, instalação Redhat, PHP 5.2, Apache 2.2.3, com uma caixa NGINX operando como um balanceador de carga de software na frente de vários servidores web e back-ends de banco de dados.
Na ausência de boas idéias, recorremos a escrever nosso próprio filtro simulado no memcached que armazena uma chave de IP + URI no IFF do memcached, o usuário é o Firefox 3.xe o referenciador está em branco e incrementa cada solicitação de página. Uma vez que cruze um certo limite em um certo período de tempo, nós solicitamos mais 403.
Eu não acho que este é o lugar apropriado na pilha de rede para lidar com esse problema, no entanto. Espero que alguém tenha visto isso e possa nos ajudar a encontrar o padrão.
Obrigado por qualquer coisa que você possa contribuir!