mod evasive (anti ddos) Le sujet est résolu

Répondre
chatonhub
    unknown unknown

mod evasive (anti ddos)

Message par chatonhub »

mod evasive (anti ddos)
Mod_evasive est un module Apache pour contrer les attaques DOS. Celui-ci est par exemple capable de détecter lorsqu'un utilisateur demande un trop grand nombre de pages sur un site web, sur un délai de temps très court. Voici comment l'installer et le configurer pour une utilisation basique.

Installation de Mod_evasive

Pour installer Mod_evasive sur une distribution à base de RPM (Red Hat, centOS, Fedora...), ouvrez un terminal et lancez la commande suivante en root :

yum install mod_evasive

Ou celle-ci pour une distribution à base de Debian :

sudo apt-get install libapache2-mod-evasive

Configuration basique de Mod_evasive

Toute la configuration de Mod_evasive se trouve dans le fichier /etc/httpd/conf.d/mod_evasive.conf (ou /etc/apache2/conf.d/mod-evasive pour une distribution à base de debian). Voici un exemple de configuration à utiliser :

<IfModule mod_evasive20.c>
DOSHashTableSize 3097
# Pas plus de 2 pages par seconde
DOSPageCount 2
DOSPageInterval 1
# Pas plus de 150 requetes par seconde (images, CSS...)
DOSSiteCount 150
DOSSiteInterval 1
# Periode en seconde pendant laquelle on bloque le client
DOSBlockingPeriod 10
# Dossier contenant les IP blaclistes
DOSLogDir "/var/lock/mod_evasive"
</IfModule>

On met ensuite en place le dossier qui va stocker les adresses IP blacklistées :

mkdir -p /var/lock/mod_evasive
chown -R apache:apache /var/lock/mod_evasive

Et on relance le serveur Apache pour prendre en compte les modifications, avec cette commande pour une distribution à base de RPM :

/etc/init.d/httpd restart

Ou celle-ci pour une distribution à base de Debian :

/etc/init.d/apache2 restart

Pour tester le module, je vous recommande de mettre des valeurs assez faibles et de regarder ce qui se passe. Normalement, toutes les images de vos sites ne s'afficheront pas et le dossier /var/lock/mod_evasive devrait se remplir.

Pour finir, on peut mettre en place la crontab suivante pour puger le dossier de blacklist de temps en temps :

# Menage mod_evasive
00 5 * * * find /var/lock/mod_evasive -mtime +1 -type f -exec rm -f '{}' \;

---------------------------------------------
Plus d'information
---------------------------------------------
Installation et configuration du mod Evasive.

Le principe de ce mod est assez sympa et couplé à IPTables il peut être vraiment efficace. ;-)
Il est permet de limiter la casse en cas d'attaque de type DDoS ou de brute force et tout autres attaques de ce type.

Ca mise en place est simple et il en est de même pour sa configuration.
Installation.

Evasive n'est pas installé par défaut avec Apache, à nous de le compiler.

On télécharge les sources.

# wget http://www.zdziarski.com/projects/mod_e ... 0.1.tar.gz" onclick="window.open(this.href);return false;

Une fois l'archive décompressée, on se place dans le répertoire obtenu puis on lance la compilation de celui-ci.

# apxs2 -cia mod_evasive20.c

Résultat :

3:08 root@serveur ~/mod_evasive# apxs2 -cia mod_evasive20.c
/usr/bin/libtool --silent --mode=compile gcc -prefer-pic -pipe -I/usr/include/xmltok -I/usr/include/openssl -Wall -O2 -DAP_HAVE_DESIGNATED_INITIALIZER -DLINUX=2 -D_REENTRANT -D_XOPEN_SOURCE=500 -D_BSD_SOURCE -D_SVID_SOURCE -D_GNU_SOURCE -pipe -I/usr/include/xmltok -I/usr/include/openssl -Wall -O2 -pthread -I/usr/include/apache2 -I/usr/include/apr-0 -I/usr/include/apr-0 -I/usr/include -c -o mod_evasive20.lo mod_evasive20.c && touch mod_evasive20.slo
mod_evasive20.c: In function `create_hit_list':
mod_evasive20.c:118: warning: control reaches end of non-void function
mod_evasive20.c: In function `access_checker':
mod_evasive20.c:212: warning: implicit declaration of function `getpid'
mod_evasive20.c:212: warning: long int format, int arg (arg 3)
mod_evasive20.c: In function `destroy_hit_list':
mod_evasive20.c:301: warning: control reaches end of non-void function
/usr/bin/libtool --silent --mode=link gcc -o mod_evasive20.la -rpath /usr/lib/apache2/modules -module -avoid-version mod_evasive20.lo
/usr/share/apache2/build/instdso.sh SH_LIBTOOL='/usr/bin/libtool' mod_evasive20.la /usr/lib/apache2/modules
/usr/bin/libtool --mode=install cp mod_evasive20.la /usr/lib/apache2/modules/
cp .libs/mod_evasive20.so /usr/lib/apache2/modules/mod_evasive20.so
cp .libs/mod_evasive20.lai /usr/lib/apache2/modules/mod_evasive20.la
cp .libs/mod_evasive20.a /usr/lib/apache2/modules/mod_evasive20.a
ranlib /usr/lib/apache2/modules/mod_evasive20.a
chmod 644 /usr/lib/apache2/modules/mod_evasive20.a
PATH="$PATH:/sbin" ldconfig -n /usr/lib/apache2/modules
----------------------------------------------------------------------
Libraries have been installed in:
/usr/lib/apache2/modules

If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
- add LIBDIR to the `LD_LIBRARY_PATH' environment variable
during execution
- add LIBDIR to the `LD_RUN_PATH' environment variable
during linking
- use the `-Wl,--rpath -Wl,LIBDIR' linker flag
- have your system administrator add LIBDIR to `/etc/ld.so.conf'

See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------
chmod 644 /usr/lib/apache2/modules/mod_evasive20.so
[activating module `evasive20' in /etc/apache2/httpd.conf]

Voila, la compilation est terminée.
Maintenant nous allons créer un fichier mod_evasive.load dans /etc/apache2/mods-available/ pour y ajouter ceci :

LoadModule evasive20_module /usr/lib/apache2/modules/mod_evasive20.so

Dans /etc/apache2/httpd.conf la ligne suivant est à supprimer :

LoadModule evasive20_module /usr/lib/apache2/modules/mod_evasive20.so

Chargement du module Evasive.

# a2enmod mod_evasive

L'installation du module Evasive est terminée, c'était simple non ? :-P
Configuration.

Dans /etc/apache2/conf.d/ nous allons créer un fichier evasive.conf contenant ceci :

<IfModule mod_evasive20.c>

# Taille de la table.
DOSHashTableSize 2048

# Nombre de même pages visibles par la même IP.
DOSPageCount 2

# Nombre de même sites visibles par la même IP.
DOSSiteCount 50

# Intervalle autorisant l'affichage de la même page par la même adresse.
DOSPageInterval 1

# Intervalle autorisant l'affichage du même site par la même adresse.
DOSSiteInterval 1

# Durée de blocage.
DOSBlockingPeriod 10

# Adresse email de notification en cas d'attaque.
DOSEmailNotify "adresse@email.com"

# Destination du log.
DOSLogDir "/var/log/evasive/"

# Bannissement de l'IP en cas de bloquage.
#DOSSystemCommand "/sbin/iptables -I INPUT -s %s -j DROP"

# Liste blanche.
DOSWhiteList 127.0.0.1

</IfModule>

Les valeurs données dans cette exemple sont à adapater selon votre serveur.

DOSSystemCommand "/sbin/iptables -I INPUT -s %s -j DROP"

Cette commande permet de bloquer une adresse IP à l'aide d'IPTable.
Cependant l'utilisation de DOSSystemCommand doit être prise au sérieux car en cas d'attaques massives l'instruction déterminée entre ”“ sera répétée autant de fois qu'il faut.

Pour que l'adresse IP soit ajoutée à IPTables il est nécessaire que l'utilisateur “www-data” ait les droits pour manipuler IPTables (via sudo par exemple).

Explications :

DOSHashTableSize Size of the hash table. The greater this setting, the more memory is required for the look up table, but also the faster the look ups are processed. This option will automatically round up to the nearest prime number.
DOSPageCount définie le nombre de fois ou une page peut être appelée par la même adresse IP avant que celle-ci soit bloquée.
DOSSiteCount définie le nombre de fois ou un site peut être demandé par la même adresse IP avant que celle-ci soit bloquée.
DOSPageInterval détermine un interval en seconde qui autorise l'affichage de la même page avant un bloquage.
DOSSiteInterval détermine un interval en seconde qui autorise l'affichage de d'un même site avant un bloquage.
DOSBlockingPeriod détermine la durée de bloquage.
DOSEmailNotify permet qu'un email soit envoyé à chaque bloquage d'adresses 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'adresse IP.

Apache ne sait pas créer le répertoire /var/log/evasive/ tout seul, nous allons donc l'aider.

# mkdir /var/log/evasive

Il est nécessaire de placer les bons droits sur le répertoire qui vient d'être créé autrement Apache remplira le “syslog” du message suivant :

mod_evasive[17111]: Couldn't open logfile /var/log/evasive/dos-10.11.2.7: Permission denied

Application des doits :

# chown www-data:www-data /var/log/evasive

La configuration est terminée, il ne reste plus qu'à relancer Apache.

# /etc/init.d/apache2 reload

Vérification.

Un script écrit en Perl permet de tester votre installation. Il nous faut donc créer un fichier test-evasive.pl contanant ceci :
#!/usr/bin/perl

# test.pl: small script to test mod_dosevasive's effectiveness

use IO::Socket;
use strict;

for(0..100) {
my($response);
my($SOCKET) = new IO::Socket::INET( Proto => "tcp",
PeerAddr=> "127.0.0.1:80");
if (! defined $SOCKET) { die $!; }
print $SOCKET "GET /?$_ HTTP/1.0\n\n";
$response = <$SOCKET>;
print $response;
close($SOCKET);
}
Source du code : http://tools.web4host.net/modevasive/test.txt" onclick="window.open(this.href);return false;

On le rend exécutable.

# chmod +x test-evasive.pl

Puis on commence le test (l'option DOSWhiteLt 127.0.0.1 doit être commentée).

# ./test-evasive.pl


source
Modifié en dernier par chatonhub le jeu. 10 nov. 2011 21:11, modifié 1 fois.
Avatar du membre
Prof
Administrateur du site
Administrateur du site
Messages : 8320
Enregistré le : lun. 5 avr. 2010 20:07
Localisation : Vosges
A remercié : 1 fois
A été remercié : 22 fois
Contact :
    unknown unknown

Re: mod evasive (anti ddos)

Message par Prof »

Hou là on va relire ceci à tête reposer mais sur que ça va m'intéresser !

Merci l'ami :)
Règlement du forum
Toute demande d'aide ou de liens par MP est inutile !
edgedu26130
    unknown unknown

Re: mod evasive (anti ddos)

Message par edgedu26130 »

moi, pour contrer anonymous de l'attaque de facebook ;)
Répondre