Informations :
Dates
- Publish : : Tuesday 31 january 2012
- Modification : Sunday 12 february 2012
- 2083 views
Share :
Le serveur Apache peut être configuré pour limiter les impacts d'une attaque DoS. Le module mod_evasive existe pour cela. Il 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é
Il est éventuellement possible de configurer mod_evasive pour qu'il communique avec un firewall.
Installer le module Apache dédié à la prévention des attaques DoS
Script avec 2 lignes
001apt-get install libapache2-mod-evasive002a2enmod mod-evasive
Configurer vi /etc/apache2/httpd.conf
Script avec 22 lignes
001# taille de la table de surveillance, a augmenter pour les DDoS002DOSHashTableSize 3097003# Nb maximum de refresh d'une uri par periode004DOSPageCount 5005# Nb maximum de requete sur le site par periode006DOSSiteCount 150007# Duree de la periode pour la uri008DOSPageInterval 1009# Duree de la periode pour le site010DOSSiteInterval 1011# Duree du blacklistage de l'IP reconduite si retentative012DOSBlockingPeriod 10013# envoie de mail quant une IP est bloquee014DOSEmailNotify "xxx@xxxxx.xxx"015# repertoire des logs016DOSLogDir "/var/log/mod_evasive/"017# Execute une action quand une IP est bloquee018DOSSystemCommand "/sbin/iptables -I INPUT -s %s -j DROP"019DOSSystemCommand "/bin/echo %s >> /var/log/mod_evasive/dos_evasive.log && /bin/date >> /var/log/mod_evasive/dos_evasive.log"020# Whitelist non surveillee021DOSWhiteList 127.0.0.1022DOSWhiteList 192.168.1.*
DOSHashTableSize est la taille de la table de hachage. Plus cette valeur sera grande, moins il faudra d'itérations pour identifier un enregistrement. En revanche, la consommation de mémoire sera plus importante. Sur des serveurs Web à forte charge il est recommandé d'augmenter cette valeur.
DOSPageCount définie le nombre de fois qu'une page peut être appelée par la même adresse IP avant que celle-ci ne soit bloquée.
DOSSiteCount définie le nombre de fois qu'un site peut être demandé par la même adresse IP avant que celle-ci ne soit bloquée.
DOSPageInterval détermine un intervalle en seconde qui autorise l'affichage d'une même page avant blocage.
DOSSiteInterval détermine un intervalle en seconde qui autorise l'affichage d'un même site avant blocage.
DOSBlockingPeriod détermine la durée du blocage.
DOSEmailNotify permet l'envoi d'un email à chaque blocage d'adresse IP.
DOSSystemCommand permet de définir une commande bien précise en cas d'attaque (bannissement de l'adresse IP dans IPTables par exemple).
DOSLogDir détermine le chemin ou seront stockés les logs d'attaques.
DOSWhiteList définie une liste blanche d'adresses IP.
Tester le module evasive
Avec ApacheBench
Vous pouvez maintenant tester le résultat. Tout d'abord un test depuis le réseau local dans la whitelist, il ne doit y avoir aucune erreur :
Script avec 14 lignes
001ab -n 1000 -c 100 http://localhost/002This is ApacheBench, Version 2.3 <$Revision: 655654 $>003Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/004Licensed to The Apache Software Foundation, http://www.apache.org/005Benchmarking www.webstrat.fr (be patient).....done006Server Software: Apache/2.2.11007Server Hostname: localhost008Server Port: 80009Document Path: /010Document Length: 27229 bytes011Concurrency Level: 100012Time taken for tests: 0.146 seconds013Complete requests: 1000014Failed requests: 0
Script avec 14 lignes
001# ab -n 1000 -c 100 http://mon-ip-publique/002This is ApacheBench, Version 2.3 <$Revision: 655654 $>003Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/004Licensed to The Apache Software Foundation, http://www.apache.org/005Benchmarking www.webstrat.fr (be patient).....done006Server Software: Apache/2.2.11007Server Hostname: mon-ip-publique008Server Port: 80009Document Path: /010Document Length: 27229 bytes011Concurrency Level: 100012Time taken for tests: 4.614 seconds013Complete requests: 1000014Failed requests: 832
Avec un script perl
On va maintenant tester la configuration à l'aide d'un petit script perl livré avec le module mais il faut avant tout commenter temporairement la ligne DOSWhiteList 127.0.0.1 et redémarrer apache pour prendre en compte la configuration du module.
On crée un fichier vi test.pl
Script avec 13 lignes
001#!/usr/bin/perl002# test.pl: small script to test mod_dosevasive's effectiveness003use IO::Socket;004use strict;005for(0..100) {006my($response);007my($SOCKET) = new IO::Socket::INET( Proto => "tcp", PeerAddr=> "127.0.0.1:80");008if (! defined $SOCKET) { die $!; }009print $SOCKET "GET /?$_ HTTP/1.0nn";010$response = <$SOCKET>;011print $response;012close($SOCKET);013}
Pour vérifier si vous êtes victime d'une attaque DoS, utilisez l'outil netstat
Script avec 1 ligne
001netstat -an | grep SYN
Firewall contre les attaques DoS
Contre les attaques DoS de haut niveau, l'usage d'un firewall est le plus efficace.
iptables permet de limiter le nombre de connexions simultanées provenant d'une adresse IP ou d'un réseau, le nombre de connexions depuis une source, le tout sur une période donnée. Les règles suivantes permettent de limiter le nombre de connexion depuis une source à 50 hits pendant 10 secondes sur le port 80, paramètre à ajuster en fonction de vos besoins :
Script avec 2 lignes
001iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW -m recent --set --name WEB002iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW -m recent --update --seconds 10 --hitcount 50 --rttl --name WEB -j DROP
Cela évite les attaques DoS simples mais reste peu efficace face aux attaques massivement distribuées. On parle alors d'attaque par déni de service distribuée ou de Distributed Denial of Service attacks ou DDoS.
Des centaines voir des milliers d'ordinateurs, souvent infectés par un virus, sont alors utilisés pour envoyer simultanément des requêtes à votre serveur. Dans ce cas, la capacité du hardware de votre infrastructure, routeur et serveur, à traiter les requêtes est prédominante.
Sportivement... :/
Sources :
- Attaque par déni de service
- Operation Payback
- Apache : attaque DOS et mod evasive
- Protéger son serveur Web Apache2 des attaques DoS
- Apache2 : Contrer les attaques dos avec mod_evasive
- Installation du mod evasive sur apache 2.2 pour contrer des attaques DOS



