Fail2Ban est un petit utilitaire très pratique pour bloquer les attaques brute force inhérentes à toute machine directement accessible sur Internet.
Le principe est simple :
L'installation est réalisée sur Debian en ajoutant le paquet :
La structure de la configuration de fail2ban est la suivante :
Par défaut, sous Debian, fail2ban est configuré ainsi :
Il est possible d'activer l'alerte par mail en changeant le paramètre suivant :
# Choose default action. To change, just override value of 'action' with the # interpolation to the chosen action shortcut (e.g. action_mw, action_mwl, etc) in jail.local # globally (section [DEFAULT]) or per specific section action = %(action_)s
Les valeurs suivantes sont des raccourcis :
Vous pouvez empêcher Fail2ban de bloquer vos IP avec le paramètre “ignoreip”, par exemple :
ignoreip = 127.0.0.1 192.168.1.1
La durée est configurée avec “bantime”, pour bloquer pendant 5 minutes :
bantime = 300
Les services sont déclarés ainsi :
[ssh] enabled = true port = ssh filter = sshd logpath = /var/log/auth.log maxretry = 6
Description des paramètres :
Il est possible de protéger phpmyadmin avec fail2ban, pour cela il faut :
Pour l'installation de phpmyadmin, voir PhpMyAdmin.
Pour la configuration d'apache, voir Serveur Web (Apache).
phpmyadmin offre des variables personnalisées disponibles pour les logs, en particulier le nom et le status de l'utilisateur. Nous allons les utiliser pour détecter les tentatives de connexion.
Pour cela, modifier le format des logs ainsi :
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %{userID}n %{userStatus}n" pma_combined CustomLog ${APACHE_LOG_DIR}/access.log pma_combined
En consultant les logs, vous devez voir apparaître les nouveaux champs à la fin des lignes. Une tentative d'accès erroné sera logué ainsi :
192.168.1.1 - - [09/Jan/2012:22:24:48 +0100] "GET /phpmyadmin/index.php?token=d6ba5c4997bd3d7a07404e6123396ed3 HTTP/1.1" 200 2508 "https://192.168.1.2/phpmyadmin/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:9.0.1) Gecko/20100101 Firefox/9.0.1" root mysql-denied
Pour détecter les tentatives, il faut donc identifier “mysql-denied” à la fin des logs, sans oublier de mémoriser l'IP au début.
Créer le fichier /etc/fail2ban/filter.d/phpmyadmin.conf avec le contenu suivant :
# Fail2Ban configuration file # # Author: Matthieu Bouthors <matthieu@bouthors.fr> # # [Definition] # Option: failregex # Notes.: regex to match the password failures messages in the logfile. The # host must be matched by a group named "host". The tag "<HOST>" can # be used for standard IP/hostname matching and is only an alias for # (?:::f{4,6}:)?(?P<host>[\w\-.^_]+) # Values: TEXT # failregex = <HOST> .* mysql-denied # Option: ignoreregex # Notes.: regex to ignore. If this regex matches, the line is ignored. # Values: TEXT # ignoreregex =
Enfin il faut ajouter la déclaration suivante dans jail.conf :
[phpmyadmin] enabled = true port = http,https filter = phpmyadmin logpath = /var/log/apache2/access.log maxretry = 6
Sans oublier de redémarrer fail2ban après la modification :
/etc/init.d/fail2ban restart