Hacer que el servidor Nginx responda lentamente

8

Entonces tengo un spammer en mi sitio. Podría bloquear su IP usando 'negar', pero luego él solo cambiará su IP y tendré que seguir jugando al gato y al ratón con él.

En cambio, tengo curiosidad por saber si hay una manera de configurar nginx para responder a su IP más lentamente.

De esa manera, tal vez él simplemente decida que el sitio no funciona correctamente y me deje en paz.

Gracias

vinhboy
fuente

Respuestas:

7

La directiva Nginx le limit_ratepermite especificar la velocidad a la que le gustaría calificar las respuestas límite, por ejemplo

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

La documentación de Nginx está aquí . (de la documentación verá que su backend puede tomar la decisión y solicitar a Nginx que limite la tarifa del cliente)

La forma de obtener este $slowconjunto variable depende de su configuración. Lo más fácil sería configurarlo mediante el geomapeo:

geo $slow {
  default    0;

  1.2.3.0/24 1;
}

El mapeo "Geo" es una dependencia $slowbasada en la dirección IP del cliente. Es 0 por defecto y 1 si la dirección IP de un cliente está en la 1.2.3.0/24subred. Consulte la documentación de Nginx sobre "geo" aquí

El uso de "fail2ban" es una evolución razonable de toda esta solución. Puede usar "fail2ban" para detectar automáticamente actividades inusuales y recopilar IP para Nginx y luego volver a cargar Nginx para que vuelva a leer las listas de direcciones IP que deben ralentizarse o bloquearse.

Alexander Azarov
fuente
5

Si desea engañar al usuario infractor para que piense que todavía está pasando desapercibido para usted, puede usar el módulo de límite de solicitud de nginx ( http://wiki.nginx.org/HttpLimitReqModule ).

Primero defina una zona límite de solicitud:

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

Esta zona utilizará la dirección IP del delincuente para identificar y limitar las solicitudes a 30 por minuto (1/2 segundo). Tenga en cuenta que el tamaño de la memoria de la zona está establecido en 1 MiB, lo que significa que puede manejar 1 MiB / 64 bytes por bucket de solicitud = 16384 direcciones de spammer (lo que puede ser una exageración para nuestro caso). Ajuste respectivamente, si es necesario.

A continuación, definimos la directiva que realmente dirigirá al delincuente a través del limitador usando un (mal, desafortunadamente) si es el caso:

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

Puede ver los frutos de su trabajo en el registro de acceso del servidor.

Tenga en cuenta que este truco no se escala bien, ya que tendrá que actualizar el archivo de configuración cada vez que el delincuente cambie de IP (y mucho menos incluir más IP allí, lo que significa más si los casos), pero funciona.

Panagiotis PJ Papadomitsos
fuente
1
¡También puedes combinar mi respuesta con el geobloque de Alexander Azarov y hacerlo más escalable!
Panagiotis PJ Papadomitsos
2

La mejor manera de lidiar con este spammer es instalar y configurar correctamente fail2ban. Fail2ban buscará patrones en archivos de registro y bloqueará todos los ips que envíen spam a su sitio. Por supuesto, debe configurarlo para buscar el patrón adecuado.

B14D3
fuente