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 mudaria seu IP e eu teria 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 simplesmente decida que o site não está funcionando corretamente e me deixe em paz.

Obrigado

    
por vinhboy 24.11.2012 / 10:21

3 respostas

7

A diretiva limit_rate do Nginx permite que você especifique a velocidade com a qual deseja classificar respostas-limite, por exemplo,

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

A documentação do Nginx é aqui . (da documentação você verá que seu backend pode tomar a decisão e solicitar que o Nginx limite o cliente)

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

geo $slow {
  default    0;

  1.2.3.0/24 1;
}

O mapeamento "Geo" é uma dependência de $slow com base no endereço IP do cliente. É 0 por padrão e 1 se o endereço IP do cliente estiver em 1.2.3.0/24 subnet. Consulte a documentação do Nginx em "geo" aqui

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

    
por 24.11.2012 / 12:57
5

Se você quiser enganar o usuário ofensivo e pensar que ele ainda está passando despercebido por você, você pode usar o módulo de limite de solicitação do nginx ( link ).

Primeiro, defina uma zona de limite de solicitações:

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

Esta zona usará o endereço IP do infrator para identificar e limitar as solicitações em 30 por minuto (½ segundo). Observe que o tamanho da memória da região é definido como 1 MiB, o que significa que ele pode manipular 1 MiB / 64 bytes por depósito = 16384 endereços de spam (o que talvez seja um exagero em nosso caso). Ajuste respectivamente, se você precisar.

Em seguida, definimos a diretiva que realmente roteará o infrator através do limitador usando um caso (mal, infelizmente) se:

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

Você pode ver os frutos de seu trabalho no registro de acesso do servidor.

Note que este hack não se adapta bem, já que você terá que atualizar o arquivo de configuração cada vez que o infrator mudar o IP (sem falar em incluir mais IPs lá, o que significa mais casos), mas funciona.

    
por 24.11.2012 / 13:06
2

A melhor maneira de lidar com esse spammer é 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 pesquisar o padrão adequado.

    
por 24.11.2012 / 11:12

Tags