bah ! si ! tu règle la directive apache MaxClients pour interdire le serveur d'utiliser toutes les ressources de la machine.Prof a écrit :Pour les attaques DDOS pas de formule magique, pas de protection,
Pour ça, divise la mémoire vive que tu alloue à Apache par la taille moyenne de mémoire virtuelle utilisée d'un process Apache2, visible avec la commande top, tu obtiendra le nombre maximum de client avant que la machine utilise le swap.
et hop !
Apache contre les attaques dDoS
Le serveur Apache peut être configuré pour limiter les impacts d'une attaque DoS.
Ouvrir une console et éditer le fichier /etc/apache2/apache2.conf :
La plus importante, ajustez la directive MaxClients pour interdire au serveur Web d'utiliser toutes les ressources de la machine. Pour se faire, divisez la mémoire vive que vous voulez allouer à Apache par la taille moyenne de mémoire virtuelle utilisée d'un process Apache2, visible avec la commande top. Vous obtenez le nombre maximum de client avant que la machine utilise le swap.
Diminuez la directive TimeOut autant que votre application Web le permet. Par exemple, la valeur 60 libérera la connexion au bout de 60 secondes en envoyant un timeout au client. Par conséquent les traitements normaux ne devront également pas excéder 60 secondes. Attention au long traitement batch.
Diminuez la directive KeepAliveTimeout. Attention, une valeur trop basse impacte les performances.
Vous pouvez limiter la taille des requêtes, des headers, des champs HTTP avec les directives LimitRequestBody, LimitRequestFields, LimitRequestFieldSize, LimitRequestLine, et LimitXMLRequestBody. A utiliser avec prudence pour ne pas bloquer une fonctionnalité.
mod_evasive contre les attaques dDoS
Vous pouvez également installer un module Apache dédié à la prévention des attaques DoS.
Le mod_evasive crée une table dynamique des IP clients et des URL demandées. Par défaut, il blacklist et renvoie une erreur 403 si l'IP :
fait plus de X requêtes par seconde sur une uri
fait plus de X requêtes par seconde sur un process Apache
continue de faire des requêtes alors qu'il est blacklisté
Pour l'installer et activer, ouvrez une ligne de commande :
Code : Tout sélectionner
# aptitude install libapache2-mod-evasive
# a2enmod mod-evasive
Ajouter et ajuster au besoins les lignes suivantes :
Code : Tout sélectionner
# mod_evasive
<IfModule mod_evasive20.c>
# taille de la table de surveillance, a augmenter pour les DDoS
DOSHashTableSize 2048
# Nb maximum de refresh d'une uri par periode
DOSPageCount 5
# Duree de la periode pour la uri
DOSPageInterval 1
# Nb maximum de requete sur le site par periode
DOSSiteCount 150
# Duree de la periode pour le site
DOSSiteInterval 1
# Duree du blacklistage de l'IP reconduite si retentative
DOSBlockingPeriod 10
# Execute une action quand une IP est bloquee
DOSSystemCommand "/sbin/iptables -I INPUT -s %s -j DROP"
# envoie de mail quant une IP est bloquee
DOSEmailNotify "admin@localhost"
# repertoire des logs
DOSLogDir "/var/log/apache2/"
# Whitelist non surveillee
DOSWhiteList 127.0.0.1
DOSWhitelist 192.168.0.*
</IfModule>
Code : Tout sélectionner
# /etc/init.d/apache2 restart
Code : Tout sélectionner
# ab -n 1000 -c 100 http://localhost/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking www.webstrat.fr (be patient).....done
Server Software: Apache/2.2.11
Server Hostname: localhost
Server Port: 80
Document Path: /
Document Length: 27229 bytes
Concurrency Level: 100
Time taken for tests: 0.146 seconds
Complete requests: 1000
Failed requests: 0
...
Code : Tout sélectionner
# ab -n 1000 -c 100 http://mon-ip-publique/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking www.webstrat.fr (be patient).....done
Server Software: Apache/2.2.11
Server Hostname: mon-ip-publique
Server Port: 80
Document Path: /
Document Length: 27229 bytes
Concurrency Level: 100
Time taken for tests: 4.614 seconds
Complete requests: 1000
Failed requests: 832
...
enjoy !
Source