La única regla relacionada en mod-security para DoS lento es modsecurity_crs_11_slow_dos_protection
, y es solo para Apache.
¿Hay alguna regla para Nginx?
Según mi conocimiento, NGINX no incluye nada como describir, pero podemos implementar el nuestro. Como entiendo Apache 2 modsecurity_crs_11_slow_dos_protection, limita el número de conexiones. NGINX tiene una página web, Cómo mitigar los ataques DDoS con NGINX y NGINX Más que menciona varios métodos para DDoS. Tres ideas de su sitio web vienen a la mente:
Limitar la tasa de solicitudes
Puede limitar la velocidad a la que NGINX y NGINX Plus aceptan las llamadas entrantes Solicitudes a un valor típico para usuarios reales. Por ejemplo, usted podría decide que un usuario real que accede a una página de inicio de sesión solo puede realizar una solicitud cada 2 segundos Puede configurar NGINX y NGINX Plus para permitir una Dirección IP de un solo cliente para intentar iniciar sesión solo cada 2 segundos (equivalente a 30 solicitudes por minuto):
limit_req_zone $binary_remote_addr zone=one:10m rate=30r/m; server { # ... location /login.html { limit_req zone=one; # ... } }
La directiva limit_req_zone configura una zona de memoria compartida llamada uno para almacenar el estado de las solicitudes de la clave especificada, en este caso la dirección IP del cliente ($ binary_remote_addr). La directiva limit_req en el bloque de ubicación para /login.html hace referencia a la memoria compartida zona.
Limitar el número de conexiones
Puede limitar el número de conexiones que puede abrir una sola Dirección IP del cliente, nuevamente a un valor apropiado para usuarios reales. por Por ejemplo, puede permitir que la dirección IP de cada cliente se abra no más de 10 conexiones al área / tienda de su sitio web:
limit_conn_zone $binary_remote_addr zone=addr:10m; server { # ... location /store/ { limit_conn addr 10; # ... } }
La directiva limit_conn_zone configura una zona de memoria compartida llamada addr para almacenar las solicitudes de la clave especificada, en este caso (como en el ejemplo anterior) la dirección IP del cliente, $ binary_remote_addr. los La directiva limit_conn en el bloque de ubicación para / store hace referencia al zona de memoria compartida y establece un máximo de 10 conexiones de cada uno dirección IP del cliente.
Cerrar conexiones lentas
Puedes cerrar conexiones que escriben datos con poca frecuencia, que puede representar un intento de mantener las conexiones abiertas, siempre y cuando posible (reduciendo así la capacidad del servidor para aceptar nuevos conexiones). Slowloris es un ejemplo de este tipo de ataque. los La directiva client_body_timeout controla cuánto tiempo espera NGINX entre escrituras del cuerpo del cliente y la directiva client_header_timeout controla cuánto tiempo espera NGINX entre las escrituras de los encabezados de los clientes. los El valor predeterminado para ambas directivas es de 60 segundos. Este ejemplo configura NGINX no esperará más de 5 segundos entre las escrituras del cliente ya sea para encabezados o cuerpo:
server { client_body_timeout 5s; client_header_timeout 5s; # ... }
Observe que solo demoramos las conexiones para una DDoS, mientras que DoS debemos mitigar cerrando (o rechazando) las conexiones que consideramos maliciosas. Tenga en cuenta que las mitigaciones de ataque mencionadas anteriormente son la mitigación DDoS de la capa de aplicación. Por lo tanto, los recursos (CPU y memoria) todavía se pueden utilizar. Consulte, encapsulation y Conjunto de IP (TCP / IP) con respecto al uso de recursos, ya que se necesitan recursos para encapsular y desencapsular (marco - > paquete (o datagrama) - > segmento - > PDU).
Lea otras preguntas en las etiquetas denial-of-service ddos nginx mod-security