web-dev-qa-db-fra.com

Comment puis-je mettre en œuvre la limitation de débit avec Apache? (demandes par seconde)

Quelles techniques et/ou quels modules sont disponibles pour implémenter une limitation de débit robuste (requêtes | octets/ip/unité de temps) dans apache?

72
bd808

Le meilleur

  • mod_evasive (Plus axé sur la réduction de l'exposition au DoS)
  • mod_cband (Meilleur produit pour le contrôle de bande passante "normale")

et le reste

52
Vinko Vrsalovic

Comme indiqué dans ce blog post, il semble possible d’utiliser mod_security pour mettre en œuvre une limite de débit par seconde.

La configuration ressemble à ceci:

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"
18
Diego F. Durán

Il existe de nombreuses façons, y compris les pare-feu d'applications Web, mais la chose la plus simple à mettre en œuvre si vous utilisez un mod Apache. 

Un de ces mods que je voudrais recommander est mod_qos . C'est un module gratuit très efficace contre les attaques de type DOS, Bruteforce et Slowloris. Cela facilitera un peu la charge de votre serveur. 

C'est très puissant

La version actuelle du module mod_qos implémente des mécanismes de contrôle pour gérer:

  • Nombre maximal de demandes simultanées adressées à un emplacement/une ressource (URL) ou à un hôte virtuel. 

  • Limitation de la bande passante, telle que le nombre maximal autorisé de requêtes par seconde pour une URL ou le nombre maximum/minimum de kilo-octets téléchargés par seconde. 

  • Limite le nombre d'événements de requête par seconde (requête spéciale Conditions).

  • Limite le nombre d'événements de demande dans une période définie.
  • Il peut également détecter des personnes très importantes (VIP) pouvant accéder au serveur Web Sans ou avec moins de restrictions.
  • Ligne de requête générique et filtre d’entête pour refuser les opérations Non autorisées.

  • Demande de limitation et de filtrage des données du corps (requiert mod_parp).

  • Limite le nombre d'événements de demande pour des clients individuels (IP).

  • Limitations sur le niveau de connexion TCP, par exemple, le nombre maximal de connexions autorisées pour À partir d'une adresse IP unique ou d'un contrôle dynamique Keep-alive.

  • Préfère les adresses IP connues lorsque le serveur est à court de connexions TCP Libres.

Ceci est un exemple de configuration de ce que vous pouvez utiliser. Il existe des centaines de configurations possibles pour répondre à vos besoins. Visitez le site pour plus d'informations sur les contrôles.

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/

9
Panama Jack

Dans Apache 2.4, il y a un nouveau module de stock appelé mod_ratelimit . Pour émuler les vitesses de modem, vous pouvez utiliser mod_dialup . Bien que je ne vois pas pourquoi vous ne pouviez pas utiliser mod_ratelimit pour tout.

6
Janus Troelsen

Malheureusement, mod_evasive ne fonctionnera pas comme prévu lorsqu'il est utilisé dans des configurations autres que celles de Prefork (les dernières configurations Apache sont principalement MPM)

5
wuzer

Une autre option - mod_qos

Pas simple à configurer - mais puissant.

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

2
mrT

Cela dépend de la raison pour laquelle vous souhaitez évaluer la limite. 

Si vous voulez éviter de surcharger le serveur, placez NGINX devant vous et configurez limitant le taux ici. Cela a du sens car NGINX utilise beaucoup moins de ressources, de l’ordre de quelques Mo par dix mille connexions. Ainsi, si le serveur est saturé, NGINX fera la limitation de débit (en utilisant une quantité non significative de ressources) et ne transmettra que le trafic autorisé à Apache.

Si vous ne recherchez que la simplicité, utilisez quelque chose comme mod_evasive.

Comme d'habitude, si vous souhaitez vous protéger contre les attaques par DDoS ou DoS, utilisez un service comme Cloudflare, qui offre également une limitation de débit.

0
NerdOfLinux

Regardez Apache 2.4 mod_ratelimit

Fournit un filtre nommé RATE_LIMIT pour limiter la bande passante du client. Le La limitation est appliquée à chaque réponse HTTP lorsqu’elle est transférée à le client, et non agrégé au niveau IP/client. La connexion la vitesse à simuler est spécifiée, en Ko/s, en utilisant l'environnement limite de taux variable.

<Location "/downloads">
    SetOutputFilter RATE_LIMIT
    SetEnv rate-limit 400 
    SetEnv rate-initial-burst 512
</Location>
0
freedev