Quelles techniques et/ou modules sont disponibles pour implémenter une limitation de débit robuste (requêtes | bytes/ip/unit time) dans apache?Comment puis-je implémenter la limitation de débit avec Apache? (demandes par seconde)
Répondre
La meilleure
- mod_evasive (concentrèrent davantage sur la réduction de l'exposition DoS)
- mod_cband (meilleur sélectionnée pour le contrôle de la bande passante 'normale')
et le reste
Je n'ai rien trouvé pour limiter les connexions par jour par adresse IP. J'ai passé toute la nuit à chercher, c'est dommage. – Greg
Est-ce que quelqu'un sait s'il existe un moyen d'obtenir mod_evasive pour regarder un en-tête à la place de l'IP, pour courir derrière un proxy inverse? –
@StavrosKorokithakis Peut-être que cela aidera? http://stderr.net/apache/rpaf/ Je crois que cela fera apparaître l'adresse IP X-Forwarded comme si elle était l'adresse IP source de tous les modules Apache chargés en aval. – Eli
Dans Apache 2.4, il y a un nouveau module appelé stock mod_ratelimit. Pour émuler les vitesses de modem, vous pouvez utiliser mod_dialup. Bien que je ne vois pas pourquoi vous ne pourriez pas utiliser mod_ratelimit pour tout.
Notez que mod_dialup utilise un état asynchrone 'SUSPENDED', ne gaspillant pas de threads en attente, alors que mod_ratelimit, pour le moment, est strictement thread-per-connection. cf. http://thread.gmane.org/gmane.comp.apache.cvs/20490 – ArtemGr
Une autre option - mod_qos
Pas simple à configurer - mais puissant.
Comme indiqué dans this blog après, il semble possible d'utiliser Apache mod_security pour mettre en œuvre une limite de vitesse par seconde.
La configuration est quelque chose comme 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"
C'était parfait pour moi, avec modsec2 déjà en cours d'exécution.Il suffit d'ajouter des identifiants aux règles pour correspondre à la version modsec, comme ceci:
Notez également que vous pouvez modifier le nombre de demandes de rafale initiales autorisées en éditant le "@gt 60", ainsi que la rapidité avec laquelle il "recharge" la limite en modifiant le bit ip.somepathcounter = 1/1. 1/1 permet une demande supplémentaire par seconde. 1/2 permet une requête supplémentaire toutes les 2 secondes, etc. –
Apache 2.4 va se plaindre du 509 dans ErrorDocument, une option le change en 429 (ce qui n'est bien sûr pas supporté par Apache 2.2). De plus, tous les SecAction et SecRule ont besoin d'un identifiant depuis mod_security 2.7. – Mrten
Malheureusement, mod_evasive
ne fonctionnera pas comme prévu lorsqu'il est utilisé dans des configurations non-prefork (configurations récentes apache sont principalement MPM)
Il y a de nombreux chemin y compris les pare-feu d'application Web, mais la chose la plus simple à mettre en œuvre si vous utilisez un mod Apache.
Un tel mod que je recommande est mod_qos. C'est un module gratuit très efficace contre certaines attaques de type DOS, Bruteforce et Slowloris. Cela soulagera un peu votre charge de serveur.
Il est très puissant.
La version actuelle du mod_qos Module met en œuvre des mécanismes de contrôle pour gérer:
Le nombre maximal de demandes simultanées à un emplacement/ressource (URL) ou hôte virtuel.
Limitation de la bande passante telle que nombre maximum de demandes par seconde pour une URL ou le maximum/minimum de koctets téléchargés par seconde.
Limite le nombre d'événements de requête par seconde (demande spéciale conditions).
- Limite le nombre d'événements de demande dans une période définie.
- Il peut également détecter les personnes très importantes (VIP) qui peuvent accéder au serveur Web sans ou avec moins de restrictions.
Ligne de requête générique et filtre d'en-tête pour refuser les opérations non autorisées.
Demande la limitation des données de corps et le filtrage (nécessite mod_parp).
Limite le nombre d'événements de requête pour les clients individuels (IP).
Limitations sur le niveau de connexion TCP, par exemple le nombre maximal de connexions autorisées à partir d'une adresse de source IP unique ou dynamique keep-alive contrôle .
- Préfère les adresses IP connues lorsque le serveur est à court de connexions TCP libres.
Ceci est un exemple de configuration de ce pour quoi 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.
celui-ci ne fonctionne que dans l'ancien apache2.2 ne fonctionne pas dans apache2.4 +, n'est-ce pas? – BOBO
J'utilise Linux de [tc] (http://www.lartc.org/howto/lartc.qdisc.classless.html#AEN690) sur le serveur Web, parce que Red Hat 6 a seulement Apache 2.2. – ceving