« Libapache2-mod-evasive » : différence entre les versions

De Le Wiki du Forum-Debian.fr
Aller à la navigation Aller à la recherche
Ligne 57 : Ligne 57 :


#''DOSHashTableSize'' Taille de la table hash. Plus elle est grande, plus le traitement est rapide, mais plus ça consomme de ressources...
#''DOSHashTableSize'' Taille de la table hash. Plus elle est grande, plus le traitement est rapide, mais plus ça consomme de ressources...
#''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.
#''DOSPageCount'' définit le nombre de fois ou 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 ou un site peut être demandé par la même adresse IP avant que celle-ci soit bloquée.
#''DOSSiteCount'' définit le nombre de fois ou un site peut être demandé par la même adresse IP avant que celle-ci ne soit bloquée.
#''DOSPageInterval'' détermine un interval en seconde qui autorise l’affichage de la même page avant un bloquage.
#''DOSPageInterval'' détermine un intervalle en secondes qui autorise l’affichage de la même page avant un blocage.
#''DOSSiteInterval'' détermine un interval en seconde qui autorise l’affichage de d’un même site avant un bloquage.
#''DOSSiteInterval'' détermine un intervalle en secondes qui autorise l’affichage d’un même site avant un blocage.
#''DOSBlockingPeriod'' détermine la durée de bloquage.
#''DOSBlockingPeriod'' détermine la durée de blocage.
#''DOSEmailNotify'' permet qu’un email soit envoyé à chaque bloquage d’adresses IP.
#''DOSEmailNotify'' permet qu’un email soit envoyé à chaque blocage 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).<code>DOSSystemCommand "/sbin/iptables -I INPUT -s %s -j DROP"</code>Ou encore<code>DOSSystemCommand "/sbin/iptables -I INPUT -p tcp --dport 80 -s %s -j DROP"</code>
#''DOSSystemCommand'' permet de définir une commande bien précise en cas d’attaque (bannissement de l’adresse IP dans IPTables par exemple).<code>DOSSystemCommand "/sbin/iptables -I INPUT -s %s -j DROP"</code>Ou encore<code>DOSSystemCommand "/sbin/iptables -I INPUT -p tcp --dport 80 -s %s -j DROP"</code>
#''DOSLogDir'' détermine le chemin ou seront stockés les logs d’attaques.
#''DOSLogDir'' détermine le chemin ou seront stockés les logs d’attaques.

Version du 2 novembre 2011 à 10:08

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éfinit le nombre de fois ou une page peut être appelée par la même adresse IP avant que celle-ci ne soit bloquée.
  3. DOSSiteCount définit le nombre de fois ou un site peut être demandé par la même adresse IP avant que celle-ci ne soit bloquée.
  4. DOSPageInterval détermine un intervalle en secondes qui autorise l’affichage de la même page avant un blocage.
  5. DOSSiteInterval détermine un intervalle en secondes qui autorise l’affichage d’un même site avant un blocage.
  6. DOSBlockingPeriod détermine la durée de blocage.
  7. DOSEmailNotify permet qu’un email soit envoyé à chaque blocage 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 purger 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)