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 :

  • les journaux de logs sont analysés en permanence
  • en cas d'échec trop importants dans une courte période, l'IP source est bloquée temporairement via iptables
  • à la fin de la période de ban, l'IP est à nouveau autorisée

Installation

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

  • fail2ban

Configuration

La structure de la configuration de fail2ban est la suivante :

  • /etc/fail2ban/jail.conf constitue le majeure partie de la configuration, notamment les services à protéger.
  • /etc/fail2ban/filter.d/ contient les filtres appliqués sur les logs afin d'identifier une tentative d'attaque
  • /etc/fail2ban/action.d/ contient les actions utilisables en cas d'attaque
  • /etc/fail2ban/fail2ban.conf contient quelques paramètres de configuration supplémentaires

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

  • seul le serveur ssh est protégé
  • un attaquant est bloqué après 6 tentatives de connexions infructueuses
  • le temps de ban est 10 minutes
  • l'IP 127.0.0.1 est exclue du ban
  • une ligne est ajoutée au log de fail2ban sans envoie de mail

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 :

  • action_ : blocage sans mail
  • action_mw : blocage avec envoie du whois de l'attaquant
  • action_mwl : blocage avec envoie du whois de l'attaquant et des logs générant le blocage

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 :

  • enabled : permet d'activer ou de désactiver la protection
  • port : définit le port à bloquer
  • filter : définit le filtre à utiliser, les filtres sont situés dans le sous répertoire filter.d
  • logpath : le fichier de log à parser
  • maxretry : le nombre de tentatives autorisées avant blocage

Protéger phpmyadmin

Il est possible de protéger phpmyadmin avec fail2ban, pour cela il faut :

  • modifier le log apache pour loguer les actions phpmyadmin
  • créer un filtre pour identifier les tentatives de connexion
  • ajouter une configuration de service dans fail2ban

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

  • /etc/fail2ban

Links

linux/fail2ban.txt · Dernière modification: 2012/01/09 22:35 par matthieu
Recent changes RSS feed Debian Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki