Faça o servidor Nginx responder lentamente

8

Então, eu tenho um spammer no meu site. Eu poderia bloquear o IP dele usando 'negar', mas ele mudará o IP dele e terei que continuar brincando de gato e rato com ele.

Em vez disso, estou curioso para saber se existe uma maneira de configurar o nginx para responder ao seu IP mais lentamente.

Dessa forma, talvez ele apenas decida que o site não está funcionando corretamente e me deixe em paz.

obrigado

vinhboy
fonte

Respostas:

7

A diretiva Nginx limit_ratepermite especificar a velocidade que você gostaria de classificar respostas de limite, por exemplo

location / {
  if ($slow) {
    limit_rate 4k;
  }
}

A documentação do Nginx está aqui . (a partir da documentação, você verá que seu back-end pode tomar a decisão e solicitar que o Nginx limite a taxa do cliente)

Como você obtém esse $slowconjunto de variáveis ​​depende da sua configuração. O mais fácil seria configurá-lo via geomapeamento:

geo $slow {
  default    0;

  1.2.3.0/24 1;
}

O mapeamento "geográfico" é uma dependência $slowbaseada no endereço IP do cliente. É 0 por padrão e 1 se o endereço IP do cliente estiver na 1.2.3.0/24sub-rede. Veja a documentação do Nginx em "geo" aqui

Usar "fail2ban" é uma evolução razoável de toda essa solução. Você pode usar "fail2ban" para detectar automaticamente atividades incomuns e coletar IPs para o Nginx e, em seguida, recarregar o Nginx para que ele releia as listas de endereços IP que precisam ser mais lentos e / ou bloqueados.

Alexander Azarov
fonte
5

Se você quiser induzir o usuário ofensivo a pensar que ele ainda passa despercebido por você, use o módulo de limite de solicitações do nginx ( http://wiki.nginx.org/HttpLimitReqModule ).

Primeiro defina uma zona de limite de solicitação:

http {
    limit_req_zone  $binary_remote_addr  zone=spammers:1m   rate=30r/m;
}

Essa zona usará o endereço IP do agressor para identificar e limitar as solicitações em 30 por minuto (1/2 segundo). Observe que o tamanho da memória da região está definido como 1 MiB, o que significa que ele pode lidar com 1 MiB / 64 bytes por requisição = 16384 endereços de spammer (o que talvez seja um exagero para o nosso caso). Ajuste respectivamente, se necessário.

Em seguida, definimos a diretiva que realmente encaminhará o agressor através do limitador usando um caso (mau, infelizmente):

location / {
    if ($remote_addr = 1.2.3.4) {
        limit_req   zone=spammer  burst=5;
    }
}

Você pode assistir os frutos do seu trabalho no log de acesso do servidor.

Observe que esse hack não é bem dimensionado, pois você precisará atualizar o arquivo de configuração sempre que o agressor alterar o IP (sem falar em incluir mais IPs, o que significa mais se houver casos), mas funciona.

Panagiotis PJ Papadomitsos
fonte
1
Você também pode combinar minha resposta com o bloco geográfico de Alexander Azarov e torná-lo mais escalável!
Panagiotis PJ Papadomitsos
2

A melhor maneira de lidar com esse remetente de spam é instalar e configurar corretamente o fail2ban. O Fail2ban pesquisará padrões nos arquivos de log e bloqueará todos os ips que enviam spam ao seu site. Claro que você deve configurá-lo para procurar o padrão adequado.

B14D3
fonte