¿Qué técnicas y / o módulos están disponibles para implementar una limitación de velocidad robusta (solicitudes | bytes / ip / unidad de tiempo) en apache?
Respuestas:
El mejor
y el resto
mod_evasive
recibe muchas recomendaciones en línea pero, a mediados de 2017, parece haber sido abandonado por su autor, Jonathan Zdziarski, quien extrañamente eliminó todas las referencias a él de su blog, aunque el código fuente todavía está disponible como carga . Ninguno de los otros proyectos se ha actualizado en los últimos 6 años (o 15 años en el caso de mod_limitipconn
).
Como se indica en esta publicación de blog , parece posible usar mod_security para implementar un límite de velocidad por segundo.
La configuración es algo como esto:
SecRuleEngine On
<LocationMatch "^/somepath">
SecAction initcol:ip=%{REMOTE_ADDR},pass,nolog
SecAction "phase:5,deprecatevar:ip.somepathcounter=1/1,pass,nolog"
SecRule IP:SOMEPATHCOUNTER "@gt 60" "phase:2,pause:300,deny,status:509,setenv:RATELIMITED,skip:1,nolog"
SecAction "phase:2,pass,setvar:ip.somepathcounter=+1,nolog"
Header always set Retry-After "10" env=RATELIMITED
</LocationMatch>
ErrorDocument 509 "Rate Limit Exceeded"
mod_security
no es un proyecto de Apache.
Hay numerosas formas de incluir firewalls de aplicaciones web, pero la más fácil de implementar si se usa un mod de Apache.
Uno de esos mod que me gusta recomendar es mod_qos . Es un módulo gratuito muy eficaz contra ataques de tipo certin DOS, Bruteforce y Slowloris. Esto aliviará bastante la carga de su servidor.
Es muy poderoso .
La versión actual del módulo mod_qos implementa mecanismos de control para administrar:
El número máximo de solicitudes simultáneas a una ubicación / recurso (URL) o host virtual.
Limitación del ancho de banda, como el número máximo permitido de solicitudes por segundo a una URL o el máximo / mínimo de kbytes descargados por segundo.
Limita el número de eventos de solicitud por segundo (condiciones de solicitud especiales).
Línea de solicitud genérica y filtro de encabezado para denegar operaciones no autorizadas.
Solicitar limitación y filtrado de datos corporales (requiere mod_parp).
Limita el número de eventos de solicitud para clientes individuales (IP).
Limitaciones en el nivel de conexión TCP, por ejemplo, el número máximo de conexiones permitidas desde una única dirección de origen IP o control dinámico de mantenimiento.
Esta es una configuración de muestra de para qué puede usarla. Hay cientos de configuraciones posibles para satisfacer sus necesidades. Visite el sitio para obtener más información sobre los controles.
Sample configuration:
# minimum request rate (bytes/sec at request reading):
QS_SrvRequestRate 120
# limits the connections for this virtual host:
QS_SrvMaxConn 800
# allows keep-alive support till the server reaches 600 connections:
QS_SrvMaxConnClose 600
# allows max 50 connections from a single ip address:
QS_SrvMaxConnPerIP 50
# disables connection restrictions for certain clients:
QS_SrvMaxConnExcludeIP 172.18.3.32
QS_SrvMaxConnExcludeIP 192.168.10.
En Apache 2.4, hay un nuevo módulo de stock llamado mod_ratelimit . Para emular velocidades de módem, puede usar mod_dialup . Aunque no veo por qué no puedes usar mod_ratelimit para todo.
SUSPENDED
estado asincrónico , sin desperdiciar hilos en espera, mientras que mod_ratelimit, a partir de ahora, es estrictamente hilo por conexión. cf. thread.gmane.org/gmane.comp.apache.cvs/20490
Una opción más: mod_qos
No es fácil de configurar, pero es potente.
Depende de por qué desea limitar la tasa.
Si se trata de proteger contra la sobrecarga del servidor, en realidad tiene sentido poner NGINX delante y configurar la limitación de velocidad allí. Tiene sentido porque NGINX usa muchos menos recursos, algo así como unos pocos MB por cada diez mil conexiones. Entonces, si el servidor está inundado, NGINX hará la limitación de velocidad (usando una cantidad insignificante de recursos) y solo pasará el tráfico permitido a Apache.
Si lo único que busca es simplicidad, utilice algo como mod_evasive.
Como de costumbre, si es para protegerse contra ataques DDoS o DoS, use un servicio como Cloudflare que también tiene limitación de velocidad.