Libapache2-mod-evasive

De Le Wiki du Forum-Debian.fr
Révision datée du 2 novembre 2011 à 09:02 par Lol (discussion | contributions) (Page créée avec « == mod_evasive? Qu'est-ce c'est? == '''mod_evasive''' est un module pour Apache permettant d'éviter les "manœuvres évasives": déni de service, attaque DDoS HTTP, ou enco... »)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à la navigation Aller à la recherche

mod_evasive? Qu'est-ce c'est?

mod_evasive est un module pour Apache permettant d'éviter les "manœuvres évasives": déni de service, attaque DDoS HTTP, ou encore une attaque par force brute.

Il est également conçu pour être un outil de détection, et peut être facilement configuré pour dialoguer avec ipchains, les firewalls, routeurs, etc.

La détection est réalisée par la création d'une table dynamique interne de hachage, et permet de détecter les action suivantes:

- Demander la même page plusieurs fois par seconde

- Faire plus de 50 requêtes simultanées par seconde

- ...

Les demandes légitimes sont rarement bloquées même pour un utilisateur qui rechargera une page à plusieurs reprises.

Installation

# apt-get install libapache2-mod-evasive

Il est en principe automatiquement chargé, mais pour vérifier, vous pouvez lancer les commandes suivantes:

# a2enmod mod-evasive
Module mod-evasive already enabled

  1. apachectl -M

Loaded Modules:

...
evasive20_module (shared)
...

Syntax OK

Configuration basique de Mod_evasive

Le fichier /usr/share/doc/libapache2-mod-evasive/README.gz contient un exemple de configuration basique:

APACHE v2.0


<IfModule mod_evasive20.c>

   DOSHashTableSize    3097
   DOSPageCount        2
   DOSSiteCount        50
   DOSPageInterval     1
   DOSSiteInterval     1
   DOSBlockingPeriod   10

</IfModule>

Vous pouvez ajouter les directives suivantes (à adapter...)

   DOSEmailNotify      you@yourdomain.com
   DOSSystemCommand    "su - someuser -c '/sbin/... %s ...'"
   DOSLogDir           "/var/lock/mod_evasive"

Quelques explications:

  1. DOSHashTableSize Taille de la table hash. Plus elle est grande, plus le traitement est rapide, mais plus ça consomme de ressources...
  2. 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.
  3. 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.
  4. DOSPageInterval détermine un interval en seconde qui autorise l’affichage de la même page avant un bloquage.
  5. DOSSiteInterval détermine un interval en seconde qui autorise l’affichage de d’un même site avant un bloquage.
  6. DOSBlockingPeriod détermine la durée de bloquage.
  7. DOSEmailNotify permet qu’un email soit envoyé à chaque bloquage d’adresses IP.
  8. DOSSystemCommand permet de définir une commande bien précise en cas d’attaque (bannissement de l’adresse IP dans IPTables par exemple).DOSSystemCommand "/sbin/iptables -I INPUT -s %s -j DROP"Ou encoreDOSSystemCommand "/sbin/iptables -I INPUT -p tcp --dport 80 -s %s -j DROP"
  9. DOSLogDir détermine le chemin ou seront stockés les logs d’attaques.
  10. DOSWhiteLt définie une liste blanche d’adresse IP.


Il faut mettre en place le dossier qui va stocker les adresses IP blacklistées :

mkdir -p /var/lock/mod_evasive
chown -R www-data:www-data /var/lock/mod_evasive

Et on relance le serveur Apache:

/etc/init.d/apache2 restart

test

  1. cd /usr/share/doc/libapache2-mod-evasive/examples
  2. perl test.pl

HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden HTTP/1.1 403 Forbidden

L'IP est bien bloquée:

# cat /var/log/syslog | grep evasive
Nov  2 11:03:35 nas mod_evasive[13422]: Blacklisting address 127.0.0.1: possible DoS attack.
# ls /var/lock/mod_evasive/
dos-127.0.0.1

Recommençons en mettant l'IP en liste blanche (DOSWhitelist)

# rm /var/lock/mod_evasive/*
# nano /etc/apache2/apache2.conf
...
<IfModule mod_evasive20.c>
...
   DOSWhitelist 127.0.0.1
   DOSWhitelist 127.0.0.*
</IfModule>
...
# service apache2 restart
Restarting web server: apache2 ... waiting .

  1. perl test.pl

HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK

# ls /var/lock/mod_evasive/
#

crontab

Pour finir, on peut mettre en place la crontab suivante pour puger le dossier de blacklist de temps en temps (commande pas encore testée):

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

Sources


Lol 2 novembre 2011 à 04:02 (CDT)