« Libapache2-mod-evasive » : différence entre les versions
m (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... ») |
m (→crontab) |
||
Ligne 319 : | Ligne 319 : | ||
== crontab == | == crontab == | ||
Pour finir, on peut mettre en place la crontab suivante pour | 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 | # Menage mod_evasive |
Version du 2 novembre 2011 à 10:04
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
- 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:
- 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.
- 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).
DOSSystemCommand "/sbin/iptables -I INPUT -s %s -j DROP"
Ou encoreDOSSystemCommand "/sbin/iptables -I INPUT -p tcp --dport 80 -s %s -j DROP"
- DOSLogDir détermine le chemin ou seront stockés les logs d’attaques.
- 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
- cd /usr/share/doc/libapache2-mod-evasive/examples
- 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 .
- 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)