I. Installation
Mon serveur tourne avec une Debian Lenny. Fail2ban est déjà dans les dépôts officiels, un simple apt-get install sera suffisant :
apt-get install fail2ban
II. Configuration
Toute la configuration se passe dans le répertoire /etc/fail2ban/.
Le fichier fail2ban.conf défini le niveau de verbosité de logs ainsi que le fichier de log utilisé. Par défaut, /var/log/fail2ban.log .
Les services à monitorer sont stockés dans le fichier jail.conf. Il est recommandé d’en effectuer une copie nommée jail.local qui sera automatiquement utilisée à la place du fichier d’origine.
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
J’ai modifié l’en-tête de ce fichier jail.local :
[DEFAULT]
"ignoreip" les adresses IP qui seront ignorées par fail2ban
ignoreip = 127.0.0.1
3600 secondes = 1 heure de banissement
bantime = 3600
Le laps de temps pendant lequel les tentatives vont être possibles
findtime = 600
Le nombre d’essais maximum avant bannissement
maxretry = 3
Les jails sont les "actions/logs/chaines" à surveiller. Par exemple, le jail [ssh] :
[ssh]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 6
-
- enabled * est là pour activer le jail (ou le désactiver s’il est positionné à false)
-
- port * du service. Si vous avez décidé d’ouvrir ssh sur un autre port, remplacez le mot ssh par le numéro du port
-
- filter * est le nom du filtre utilisé pour ce jail (les filtres se trouvent dans le répertoire filter.d) = sshd.conf dans notre exemple
-
- logpath * est le fichier de log qui doit être analysé
-
- maxretry * est le nombre d’essais autorisés (écrase la valeur positionnée à 3 ci-dessus)
Pour redémarrer :
fail2ban-client reload
- maxretry * est le nombre d’essais autorisés (écrase la valeur positionnée à 3 ci-dessus)
Pour voir la conf actuelle :
fail2ban-client status
iptables -L -vVoici les services que j’ai activé :
[email protected] :/etc/fail2ban# fail2ban-client status
Status
|- Number of jail: 8
`- Jail list: apache-w00tw00t, apache-noscript, ssh-ddos, apache-multiport, apache-overflows, ssh, apache, apache-phpmyadminNote : Lors du redémarrage de la machine, il se peut que fail2ban ne charge pas toutes les iptables (voir erreurs dans fichier de log fail2ban). Dans ce cas, il faut recharger le fail2ban-client ou bien ajouter une commande sleep dans les jails ().
III. Mes jails perso
apache-wOOtwOOt
Ce jail est là pour bannir les requêtes DFind w00tw00t.
Dans le fichier /etc/fail2ban/jail.local tout en bas, j’ajoute :Mes jails
[apache-w00tw00t]
enabled = true
filter = apache-w00tw00t
action = iptables[name=Apache-w00tw00t,port=80,protocol=tcp]
logpath = /var/log/apache2/access*.log
maxretry = 1On notera que contrairement aux autres règles, celle-ci s’attaque au fichier de log des accès (/var/log/apache2/access*.log).
Voici le fichier de règles /etc/fail2ban/filter.d/apache-w00tw00t.conf
[Definition]
failregex = ^ -."GET /w00tw00t.at.ISC.SANS.DFind:).".*
ignoreregex =On teste maintenant si la règle s’applique bien en faisant :
fail2ban-regex /var/log/apache2/access.log /etc/fail2ban/filter.d/apache-w00tw00t.conf
Puis on recharge l’application
fail2ban-client reload
apache-phpmyadmin
Pour bannir les requêtes du style :
-
[Mon Dec 27 06:22:13 2010] [error] [client 67.212.67.6] File does not exist: /home/www/phpmyadmin
[Mon Dec 27 06:22:13 2010] [error] [client 67.212.67.6] File does not exist: /home/www/phpMyAdmin
[Mon Dec 27 06:22:13 2010] [error] [client 67.212.67.6] File does not exist: /home/www/PHPmyadmin
[Mon Dec 27 06:22:14 2010] [error] [client 67.212.67.6] File does not exist: /home/www/sqldmin
[Mon Dec 27 06:22:14 2010] [error] [client 67.212.67.6] File does not exist: /home/www/admin
[Mon Dec 27 06:22:14 2010] [error] [client 67.212.67.6] File does not exist: /home/www/scripts *Je créé le fichier /etc/fail2ban/filter.d/apache-phpmyadmin.conf
Fail2Ban configuration file
Bans bots scanning for non-existing phpMyAdmin installations on your webhost.
[Definition]
docroot = /home/www
badadmin = PMA|phpmyadmin|myadmin|mysql|mysqladmin|sqladmin|mypma|admin|xampp|mysqldb|mydb|db|pmadb|phpmyadmin1|phpmyadmin2|webdb|sqlmanager|sqlweb|websql
failregex = [[]client []] File does not exist: %(docroot)s/(?:%(badadmin)s)
ignoreregex =Puis j’édite le fichier /etc/fail2ban/jail.local
[apache-phpmyadmin]
enabled = true
port = http,https
filter = apache-phpmyadmin
logpath = /var/log/apache2/error*.log
maxretry = 2VI. Conclusion
Si vous avez mis en place fail2ban et que vous avez des jails perso supplémentaires à partager, n’hésitez pas à m’en faire part, je les ajouterai à cet article. Merci par avance 🙂