Documentation technique : Debian
Documentation basée sur la distribution Debian

> > Fail2ban : limitation des tentatives d’intrusion

Également dans la rubrique : Premières sécurisations

Fail2ban : limitation des tentatives d’intrusion

Qu’est-ce que Fail2ban ?

Fail2ban lit des fichiers de log comme /var/log/auth.log ou /var/log/apache/error_log et bannit les adresses IP qui ont obtenu un trop grand nombre d’échecs lors de l’authentification afin de limiter les tentatives de hack du serveur. Il met à jour les règles du pare-feu pour rejeter cette adresse IP. Ces règles peuvent êtres définies par l’utilisateur dans un fichier de configuration. Fail2ban peut lire plusieurs fichiers de log comme ceux de sshd ou du serveur Apache.

Présentation de fail2ban sur le site officiel du projet.

Installation de fail2ban

En suivant le tutoriel de Fil sur zzz.rezo.net on installe fail2ban :

  1. sudo apt-get install fail2ban

Le fichier de configuration local est /etc/fail2ban/jail.local dans lequel on copiera les éléments modifiés par rapport au fichier original de configuration /etc/fail2ban/jail.conf où dans lequel on ajoutera d’autres règles.

Configuration de fail2ban

En fonction des services qui sont activés sur votre serveur, on active les règles de filtrages spécifiques en les insérant dans le fichier /etc/fail2ban/jail.local, on ouvre donc ce fichier en écriture :

  1. sudo nano /etc/fail2ban/jail.local

Les plus importantes sont certainement :

SSH

  1. [ssh]
  2.  
  3. enabled = true
  4. port    = ssh
  5. filter  = sshd
  6. logpath  = /var/log/auth.log
  7. maxretry = 6

Télécharger

Proftpd si vous utilisez ce server ftp:

  1. [proftpd]
  2.  
  3. enabled  = true
  4. port     = ftp,ftp-data,ftps,ftps-data
  5. filter   = proftpd
  6. logpath  = /var/log/proftpd/proftpd.log
  7. maxretry = 6

Télécharger

Règles de filtrage supplémentaires

w00tw00t

Si vous observez ce genre de choses dans les logs d’apache :

  1. sudo tail -F /var/log/apache2/access.log
  2. 217.195.204.194 - - [17/Jun/2010:17:39:26 +0200] "GET /w00tw00t.at.ISC.SANS.DFind:) HTTP/1.1" 400 518 "-" "-"

Télécharger

Créez le filtre dans /etc/fail2ban/filter.d/apache-w00tw00t.conf :

  1. sudo nano /etc/fail2ban/filter.d/apache-w00tw00t.conf

Insérez la règle suivante dans le fichier :

  1. #<HOST> - - [29/Apr/2008:22:54:08 +0200] "GET /w00tw00t.at.ISC.SANS.DFind:) HTTP/1.1" 400 326
  2.  
  3. [Definition]
  4. # Option:  failregex
  5. # Notes.:  regex to match the w00tw00t scan messages in the logfile. The
  6. #          host must be matched by a group named "host". The tag "<HOST>" can
  7. #          be used for standard IP/hostname matching.
  8. # Values:  TEXT
  9. failregex = ^<HOST> -.*"GET \/w00tw00t\.at\.ISC\.SANS\.DFind\:\).*".*
  10.  
  11. # Option:  ignoreregex
  12. # Notes.:  regex to ignore. If this regex matches, the line is ignored.
  13. # Values:  TEXT
  14. ignoreregex =

Télécharger

Puis activez la nouvelle règle dans /etc/fail2ban/jail.local :

  1. sudo nano /etc/fail2ban/jail.local

En ajoutant ceci dans la section apache du fichier :

  1. [apache-w00tw00t]
  2. enabled = true
  3. filter  = apache-w00tw00t
  4. port = http,https
  5. banaction = iptables-allports
  6. logpath  = /var/log/apache*/*access*.log
  7. maxretry = 1
  8. bantime = 86400

Télécharger

Lire la source sur le blog de nyrodev.

apache-phpmyadmin

Il se peut que des bots scannent les serveurs pour trouver l’accès à phpmyadmin. Si vous voyez beaucoup d’accès en erreur dans vos fichiers de logs d’apache sur des adresses de type /pma ou /phpmyadmin ou autres, c’est certainement le cas. On va donc créer une règle spécifique.

Créez le filtre dans /etc/fail2ban/filter.d/apache-phpmyadmin.conf :

  1. sudo nano /etc/fail2ban/filter.d/apache-phpmyadmin.conf

Insérez la règle suivante dans le fichier :

  1. # Fail2Ban configuration file
  2. # Bans bots scanning for non-existing phpMyAdmin installations on your webhost.
  3. #
  4.  
  5. [Definition]
  6. # Option: failregex
  7. # Notes.: Regexp to match often probed and not available phpmyadmin paths.
  8. # Values: TEXT
  9. #
  10. failregex = [[]client <HOST>[]] File does not exist: .*(PMA|phpmyadmin|phpMyAdmin|myadmin|mysql|mysqladmin|sqladmin|mypma|xampp|mysqldb|mydb|db|pmadb|phpmyadmin1|myadmin2)
  11.  
  12. # Option: ignoreregex
  13. # Notes.: regex to ignore. If this regex matches, the line is ignored.
  14. # Values: TEXT
  15. #
  16. ignoreregex =

Télécharger

Puis activez la nouvelle règle dans /etc/fail2ban/jail.local :

  1. sudo nano /etc/fail2ban/jail.local

En ajoutant ceci dans la section apache du fichier :

  1. [apache-phpmyadmin]
  2. enabled = true
  3. port = http,https
  4. filter = apache-phpmyadmin
  5. logpath = /var/log/apache*/*error*.log
  6. maxretry = 3
  7. bantime = 86400

Télécharger

phpmyadmin

Pour renforcer un peu plus la sécurité de phpMyAdmin, il est possible de limiter le nombre d’essais de login sur celui-ci à l’aide de fail2ban, comme on le fait déjà pour ssh.

Avant d’activer la règle, il faut personnaliser les logs de phpMyAdmin afin qu’ils contiennent les informations nécessaires au repérage des tentatives de login en ajoutant ce qui suit au virtualhost correspondant à phpMyAdmin (cf Sécurisation basique de phpMyAdmin).

  1. LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %{userID}n %{userStatus}n" pma_combined
  2. CustomLog /var/log/apache2/phpmyadmin-access.log pma_combined

Télécharger

Et on recharge la configuration Apache pour prendre en compte ces changements :

  1. sudo service apache2 reload

On peut maintenant créer notre règle personnelle dans /etc/fail2ban/filter.d/phpmyadmin.conf avec le contenu suivant :

  1. [Definition]
  2. denied = mysql-denied|allow-denied|root-denied|empty-denied
  3. failregex = ^<HOST> -.*(?:%(denied)s)$
  4. ignoreregex =

Télécharger

Et on teste son bon fonctionnement après avoir effectué une tentative de login sur phpMyAdmin avec un mauvais mot de passe pour remplir notre fichier de log.

  1. fail2ban-regex /var/log/apache2/phpmyadmin-access.log /etc/fail2ban/filter.d/phpmyadmin.conf

Il ne reste plus qu’à activer notre règle dans /etc/fail2ban/jail.conf (ou /etc/fail2ban/jail.local suivant votre système) :

  1. [phpmyadmin]
  2. enabled = true
  3. port = http,https
  4. filter = phpmyadmin
  5. logpath = /var/log/apache2/phpmyadmin-access.log

Télécharger

Pour finir, on recharge la configuration de fail2ban :

  1. sudo service fail2ban reload

Lire la source sur phryneas.de

Recevoir des alertes mails de fail2ban

Si on souhaite recevoir une alerte mail lors de "la mise en cage" d’une adresse IP par fail2ban, il faut créer le fichier jail.local :

  1. sudo nano /etc/fail2ban/jail.local

Et y insérer ceci :

  1. [DEFAULT]
  2. destemail = truc@machin.net
  3. action = iptables[name=%(__name__)s, port=%(port)s]
  4.          mail-whois-lines[name=%(__name__)s, dest=%(destemail)s, logpath=%(logpath)s]

Télécharger

Puis relancer fail2ban :

  1. sudo /etc/init.d/fail2ban restart

Si les notifactions par mail ne fonctionnent pas ?

Si vous utilisez postfix et que vous ne disposez pas de la commande mail vous risquez de trouver ce genre de chose dans les logs de fail2ban :

  1. sudo tail -F /var/log/fail2ban.log
  1. 2010-06-17 17:32:37,294 fail2ban.actions.action: ERROR  printf %b "Hi,\n
  2. The jail apache-w00tw00t has been started successfully.\n
  3. Regards,\n
  4. Fail2Ban"|mail -s "[Fail2Ban] apache-w00tw00t: started" truc@machin.net returned 7f00

Télécharger

Vous disposez probablement de la commande sendmail. Copiez /etc/fail2ban/action.d/mail-whois.conf vers /etc/fail2ban/action.d/mail-whois.local, modifiez ce fichier et remplacez mail par sendmail. Voici un exemple :

  1. actionban = echo -en "From:root <fail2ban>
  2.            To: <dest>
  3.            Subject: [Fail2Ban] <name>: banned <ip>
  4.            Hi,\n
  5.            The IP <ip> has just been banned by Fail2Ban after
  6.            <failures> attempts against <name>.\n\n
  7.            Here are more information about <ip>:\n
  8.            `whois <ip>`\n
  9.            Regards,\n
  10.            Fail2Ban"|sendmail -t

Télécharger

Lire la source sur le site officiel de fail2ban.

Redémarrage du démon

A la fin de toute modification de la configuration, il est nécessaire de redémarrer le démon par la commande :

  1. sudo /etc/init.d/fail2ban restart

Quelques autres tutoriels et liens à ce sujet :

  • Auteur :
  • Publié le :
  • Mis à jour : 18/02/18

Aucun commentaire


Qui êtes-vous ?
[Se connecter]
Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.