2008-09-25 4 views

Répondre

48

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

+10

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

+1

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

+1

@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

5

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.

+0

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

15

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" 
+1

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: SecAction initcol: ip =% {REMOTE_ADDR}, passer, nolog, id: 10000001 SecAction "phase: 5, deprecatevar: ip.somepathcounter = 1/1, passer, nolog, id: 10000002 " SecRule IP: SOMEPATHCOUNTER" @gt 60 "" phase: 2, pause: 300, refuser, statut: 509, setenv: RATELIMITED, sauter : 1, nolog, id: 10000003 " SecAction" phase: 2, passe, setvar: ip.somepathcounter = + 1, nolog, id: 10000004 " En-tête toujours défini Retry-After" 10 "env = RATELIMITED

+1

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. –

+0

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

5

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)

9

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. 

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

+0

celui-ci ne fonctionne que dans l'ancien apache2.2 ne fonctionne pas dans apache2.4 +, n'est-ce pas? – BOBO

Questions connexes