Apache mod security, mod evasive : limitation du traffic, protection anti-DDOS
De wikiGite
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
Sur CentOS/BlueOnyx : Déclarer le dépôt EPEL (Dépôts_complémentaires), puis
yum install --enablerepo=epel mod_evasive
Sur Debian :
sudo apt-get install libapache2-mod-evasive
Configuration basique
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). Exemple de configuration :
<IfModule mod_evasive20.c> DOSHashTableSize 3097 # Pas plus de 2 pages par seconde, 150 requêtes (images, css, ...) par site DOSPageCount 2 DOSPageInterval 1 DOSSiteCount 150 DOSSiteInterval 1 # Periode en seconde pendant laquelle on bloque le client DOSBlockingPeriod 600 # Dossier contenant les IP blaclistes DOSLogDir "/var/lock/mod_evasive" DOSWhitelist 66.249.65.* DOSWhitelist 66.249.66.* DOSWhitelist 66.249.71.* </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 :
/etc/init.d/httpd restart
Ou pour Debian :
/etc/init.d/apache2 restart
TIPS
Tests
Pour tester le module, on peut mettre des valeurs assez faibles et regarder ce qui se passe. Normalement, toutes les images des sites visités ne s'afficheront pas et le dossier /var/lock/mod_evasive devrait se remplir.
Paramètres
- DOSHashTableSize : Taille de la table hash, plus grande est la valeur, plus de mémoire sera necessaire pour parcourir la table, plus la valeur sera petite, plus le parcourt de la table sera rapide. Laissez la valeur par défaut.
- DOSPageCount Nombre de requête pour une même page dans l'intervale DOSPageInvernal, au delà, l'IP est bloquée.
- DOSSiteCount Pareil qu'au dessus mais pour un site au lieu d'une page.
- DOSPageInterval Intervalle du nombre de pages en secondes.
- DOSSiteInterval Intervalle du nombre de sites par secondes.
- DOSBlockingPeriod Période en seconde pendant laquelle l'IP sera bloquée (vous recevrez un forbidden).
- DOSWhitelist Permet de mettre des IP en liste blanche, dans notre exemple ci-dessus, ce sont des IP du bot Google.
- DOSSystemCommand Permet d'exécuter une commande, ici on peut lancer un script iptables
(exemple : #DOSSystemCommand "sudo iptables -A INPUT -s %s -j DROP")
Ménage
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 '{}' \;