Installation du mod evasive sur apache 2.2 pour contrer des attaques DOS

Adminstration Server Linux, Sécurité Add comments

Cette après midi après plusieurs test de charge du serveur Web, je me suis rendu compte que c’était un jeu d’enfant de faire planter à la fois le apache mais aussi la machine.

Comment me direz-vous, tous simplement en flood le serveur de centaine de thread, la charge CPU monte la ram aussi, vient ensuite le tour de la swap et puis c’est la fin, le serveur ne répond plus à rien sauf au ping.

htop

Après quelque recherche j’ai installé le mod_evasive qui permet de détecter les floods et les tentatives de déni de service.  Ce module renvoie des erreurs HTTP 403 lorsque le seuil de sollicitation du serveur Web par IP a été dépassé. Ce blocage dure pendant 10 secondes (paramétrable). Il est aussi possible de demander au module d’exécuter une commande lorsque qu’un flood est détecté, il est ainsi possible d’ajouter une règle Iptables à chaque nouvelle détection de flood.

apt-get install libapache2-mod-evasive

On édite le fichier de configuration d’apache2 et on ajoute les lignes suivante :

vi /etc/apache2/apache2.conf
# mod_evasive


DOSHashTableSize 3097
DOSPageCount 3
DOSSiteCount 50
DOSPageInterval 2
DOSSiteInterval 2
DOSBlockingPeriod 300
DOSEmailNotify "admin@majorxtrem.be"
DOSLogDir "/var/log/mod_evasive/"
#DOSSystemCommand "/sbin/iptables -I INPUT -s %s -j DROP"
DOSSystemCommand "/bin/echo %s >> /var/log/mod_evasive/dos_evasive.log && /bin/date >> /var/log/mod_evasive/dos_evasive.log"
DOSWhiteList 127.0.0.1
DOSWhitelist 66.249.65.*
DOSWhitelist 66.249.66.*
DOSWhitelist 66.249.67.*

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

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.
DOSWhiteLt définie une liste blanche d’adresse IP.

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

On crée le dossier /var/log/mod_evasive/ et on lui donne les bon droits

mkdir /var/log/mod_evasive/
chown -R www-data /var/log/mod_evasive/

On charge le module

a2enmod mod-evasive

On termine en redémarrant apache

/etc/init.d/apache2 restart

On va maintenant tester la configuration à l’aide d’un petit script perl mais il faut avant tous commenter temporairement la ligne DOSWhiteList 127.0.0.1 et redémarrer apache

vi test.pl
#!/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.0nn";
  $response = <$SOCKET>;
  print $response;
  close($SOCKET);
}

On le rend exécutable

chmod +x test.pl

Et on le lance

./test.pl

Code Source & Résultat

Votre serveur apache est désormais capable de réagir sur des attaques DOS

8 Responses to “Installation du mod evasive sur apache 2.2 pour contrer des attaques DOS”

  1. psycho'z Says:

    Hey ! intéressant ca 🙂 ,… je prend note ^^

  2. Un peu de tout » Archives du Blog » Protection Apache contre attaque DOS Says:

    […] explications sur mod-evasive sur Majorxtrem’s Blogs (Je vous conseille de parcourir Marjorxtrem’s Blogs ! Il y a […]

  3. cod4 Says:

    tres bon post mais est ce possible de poster le script perl pr l’attaque dos pr voir l’efficacité de ce blocage?

  4. MajorXtrem Says:

    il se trouve en fin de post
    => test.pl

  5. Nicolas Chevallier Says:

    Super tuto, j’ai moi aussi eu la malchance de me faire flooder sur un site, et comme expliqué c’est très (trop) simple à mettre en oeuvre.

  6. Dimitri Says:

    Bonjour,
    Bravo pour le tuto.
    Par contre il manque une précsion importante concernant les paramètres count & interval. En effet, ceux-ci se complètent.

    Dans votre exemple:
    DOSPageCount 3
    DOSSiteCount 50
    DOSPageInterval 2
    DOSSiteInterval 2

    DOSPageInterval détermine la durée en secondes pendant laquelle la même ip accède X fois (DOSPageCount=3) à la même page.
    Dans l’exemple ci-dessus, l’ip sera bloquée si on demande 3 fois la même pages dans un interval de 2 secondes.

    Pour les variables DOSSite*, 50 pages en une durées de 2 secondes.

    Personnellement, j’ai eu des attaques assez douces (1600 accès en 15 minutes, soit 1,7 pages par seconde).

    Pour bloquer cela, j’ai simplement utilisé les variables suivantes:
    DOSSiteCount 90
    DOSSiteInterval 60

    En français cela signifie que je bloque les IP qui font plus de 90 accès en 1 minute (60 secondes) sur tout le site. En surfant normalement, on atteint jamais cette limite. Par contre, si quelqu’un essaye d’attaquer votre site, cela est fort probable.

    Dimitri

  7. Safranil Says:

    Bonjour,

    Ce mod est très utile mais il est incompatible avec le module Dav_SVN ! Dommage que je sois obligé de l’enlever.

  8. Event Support Says:

    Among the widespread signs are shortness of breath, fluid surrounding the lungs, fatigue,
    and a harsh cough that will have blood in it. If it goes to the Windows XP logo,
    you’ve missed it and need to try again. Use others to help ensure that your meeting room is set up
    properly and run errands for you if needed.

Leave a Reply

*

WP Theme & Icons by N.Design Studio
Entries RSS Comments RSS Connexion
ipv6 ready