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

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

  •  02-07-2019
  •  | 
  •  

Question

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?

Était-ce utile?

La solution

Le meilleur

  • mod_evasive (plus centré sur la réduction de l'exposition aux déni de service)
  • mod_cband (Meilleur outil pour le contrôle de bande passante "normal")

et le reste

Autres conseils

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"

Il existe de nombreuses façons, notamment des pare-feu pour applications Web, mais la chose la plus simple à mettre en œuvre si vous utilisez un mod Apache.

Un de ces mods que je voudrais vous recommander est le 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.

Il est très puissant .

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

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

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

  • Limite le nombre d'événements de demande par seconde (demande spéciale conditions).

  • Limite le nombre d'événements de requête 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.
  • Filtre de ligne de requête générique et d’en-tête à refuser aux non autorisés opérations.

  • Limitation et filtrage des données du corps de la requête (requiert mod_parp).

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

  • Limitations du niveau de connexion TCP, par exemple, le nombre maximal de connexions autorisées à partir d'une seule adresse source IP ou dynamique contrôle de maintien en vie.

  • Préfère les adresses IP connues lorsque le serveur manque de TCP libre connexions.

Voici un exemple de configuration pour laquelle vous pouvez l’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/

Dans Apache 2.4, un nouveau module boursier 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.

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

Une autre option - mod_qos

Pas simple à configurer - mais puissant.

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

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

Si vous voulez éviter une surcharge du serveur, placez NGINX devant et configurez-le limitation de débit . Cela a du sens car NGINX utilise beaucoup moins de ressources, quelque chose comme 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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top