rendimiento - ¿Cómo puedo implementar la limitación de velocidad con Apache?(solicitudes por segundo)
optimización de apache (6)
¿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?
Como se indica en esta publicación de blog , parece posible usar mod_security de Apache 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"
El mejor
- mod_evasive (Enfocado más en la reducción de la exposición al DoS)
- mod_cband (Mejor presentado para el control de ancho de banda ''normal'')
y el resto
En Apache 2.4, hay un nuevo módulo de stock denominado mod_ratelimit . Para emular velocidades de módem, puede usar mod_dialup . Aunque no veo por qué no puedes usar mod_ratelimit para todo.
Hay numerosas formas, incluyendo firewalls de aplicaciones web, pero lo más fácil de implementar si se utiliza un mod Apache.
Uno de esos mod que me gusta recomendar es mod_qos . Es un módulo gratuito que es muy eficaz contra los ataques tipo certin DOS, Bruteforce y Slowloris. Esto aliviará bastante su carga de 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 concurrentes 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).
- Limita el número de eventos de solicitud dentro de un período de tiempo definido.
- También puede detectar personas muy importantes (VIP) que pueden acceder al servidor web sin o con menos restricciones.
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, p. Ej., La cantidad máxima de conexiones permitidas desde una sola dirección de origen de IP o un control de activación dinámica.
- Prefiere las direcciones IP conocidas cuando el servidor se queda sin conexiones TCP gratuitas.
Esta es una configuración de muestra de lo que puede usar. 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.
Tristemente, mod_evasive
no funcionará como se esperaba cuando se usa en configuraciones no preformadas (las configuraciones recientes de apache son principalmente MPM)