Table des matières
, , , ,

Fail2Ban

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 :

Installation

L'installation est réalisée sur Debian en ajoutant le paquet :

Configuration

La structure de la configuration de fail2ban est la suivante :

Par défaut, sous Debian, fail2ban est configuré ainsi :

Alerte par mail

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 :

Exclure des IP

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

Changer la durée de ban

La durée est configurée avec “bantime”, pour bloquer pendant 5 minutes :

bantime  = 300

Définition d'un service à protéger

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 :

Protéger phpmyadmin

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).

Loguer les actions phpmyadmin

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

Créer un filtre fail2ban

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 =

jail.conf

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

Backup

Links