¿Cómo puedo implementar la limitación de velocidad con Apache? (peticiones por segundo)

StackOverflow https://stackoverflow.com/questions/131681

  •  02-07-2019
  •  | 
  •  

Pregunta

¿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?

¿Fue útil?

Solución

El mejor

  • mod_evasive (centrado más en reducir la exposición al DoS)
  • mod_cband (La mejor característica es el control de ancho de banda "normal")

y el resto

Otros consejos

Como se indica en este blog publicación parece posible utilizar 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"

Hay muchas maneras de incluir los firewalls de aplicaciones web, pero lo más fácil de implementar es usar un mod de Apache.

Una de las modificaciones que me gusta recomendar es mod_qos . Es un módulo gratuito que es muy efectivo contra los ataques de tipo certin DOS, Bruteforce y Slowloris. Esto facilitará 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 la 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 (solicitud especial condiciones).

  • 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.
  • Filtro de encabezado y línea de solicitud genérica para denegar no autorizado operaciones.

  • Limitación y filtrado de datos del cuerpo de la solicitud (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 sola dirección de origen IP o dinámica mantener vivo el control.

  • Prefiere las direcciones IP conocidas cuando el servidor se queda sin TCP libre conexiones.

Esta es una configuración de muestra de para qué puedes 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.

http://opensource.adnovum.ch/mod_qos/

En Apache 2.4, hay un nuevo módulo de stock llamado mod_ratelimit . Para emular velocidades de módem, puede utilizar mod_dialup . Aunque no veo por qué no puedes usar mod_ratelimit para todo.

Lamentablemente, mod_evasive no funcionará como se espera cuando se usa en configuraciones que no sean de Prefork (las configuraciones recientes de Apache son principalmente MPM)

Una opción más - mod_qos

No es fácil de configurar, pero es potente.

http://opensource.adnovum.ch/mod_qos/

Depende de por qué quieres calificar el límite.

Si es para protegerse contra la sobrecarga del servidor, realmente tiene sentido poner NGINX delante de él, y configurar limitación de velocidad allí. Tiene sentido porque NGINX usa muchos menos recursos, algo así como unos pocos MB por cada diez mil conexiones. Por lo tanto, si el servidor está inundado, NGINX realizará la limitación de la velocidad (utilizando una cantidad insignificante de recursos) y solo pasará el tráfico permitido a Apache.

Si todo lo que buscas es simplicidad, entonces usa algo como mod_evasive.

Como de costumbre, si es para protegerse contra los ataques DDoS o DoS, use un servicio como Cloudflare que también tiene limitación de velocidad.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top