fail2ban est une application qui analyse les logs de divers services (SSH, Apache, FTPâŠ) en cherchant des correspondances entre des motifs dĂ©finis dans ses filtres et les entrĂ©es des logs. Lorsqu’une correspondance est trouvĂ©e une ou plusieurs actions sont exĂ©cutĂ©es. Typiquement, fail2ban cherche des tentatives rĂ©pĂ©tĂ©es de connexions infructueuses dans les fichiers journaux et procĂšde Ă un bannissement en ajoutant une rĂšgle au pare-feu iptables ou nftables pour bannir l’adresse IP de la source.
Installation
Installer la paquet fail2ban puis lancer le service fail2ban.
systemctl start fail2ban
puis d’en crĂ©er le dĂ©marrage automatique
systemctl start fail2ban
Et enfin de contrĂŽler la bonne installation
systemctl status fail2ban
Si la rĂ©ponse comporte du rouge et le mot « failed »  » sur la ligne commençant par « Active : », les derniĂšres lignes du message indiquent les raisons de l’Ă©chec et permettent sa correction avant un nouvel essai, Ă tenter aprĂšs lecture du reste de cet article.
Si la réponse comporte du vert et les mots « active (running) » sur la ligne commençant par « Active : », le service est installé et actif.
Configuration
Il est vivement dĂ©conseillĂ© de modifier les fichiers de configuration /etc/fail2ban/fail2ban.conf et /etc/fail2ban/jail.conf (notamment car ils peuvent ĂȘtre Ă©crasĂ©s par une mise Ă jour). Ces fichiers contiennent les configurations de base qu’on peut surcharger au moyen d’un ou plusieurs fichiers enregistrĂ©s dans /etc/fail2ban/jail.d
Le fichier /etc/fail2ban/jail.conf doit servir uniquement de référence et de documentation.
Fail2ban ne doit pas ĂȘtre considĂ©rĂ© comme un outil de sĂ©curisation absolu d’un service. Ses objectifs sont d’Ă©viter de surcharger les logs du systĂšme avec des milliers de tentatives de connexion et de limiter la portĂ©e des attaques rĂ©pĂ©tĂ©es provenant d’une mĂȘme machine.
Un serveur avec un accÚs SSH sur le port standard, par exemple, recevra trÚs rapidement des centaines, voire des milliers de tentatives de connexions provenant de différentes machines. Ce sont généralement des attaques par force brute lancées par des robots.
Fail2ban en analysant les logs permet de bannir les IP au bout d’un certain nombre de tentatives ce qui limitera le remplissage des logs et l’utilisation de la bande passante.
Ceci va Ă©galement rendre les attaques par force brute ou par dictionnaire beaucoup plus difficiles mais ce n’est pas une sĂ©curitĂ© absolue contre ce type d’attaque.
Mais cela n’amĂ©liore en rien la sĂ©curitĂ© du service concernĂ©. Si l’accĂšs SSH n’est pas suffisamment sĂ©curisĂ© (mot de passe faible par exemple) fail2ban n’empĂȘchera pas un attaquant d’arriver Ă ses fins.
Autrement dit, utilisez votre temps de travail pour analyser vos configurations et sĂ©curiser vos services plutĂŽt que d’installer et paramĂ©trer des outils d’analyse de logs plus ou moins gourmands en ressources systĂšme.
Paramétrage par défaut
Les paramÚtres par défaut sont visibles dans le fichier /etc/fail2ban/jail.conf
La durĂ©e de bannissement d’une IP est dĂ©finie par la directive bantime avec une valeur en secondes. La valeur par dĂ©faut est de 600 s, soit 10 minutes, ce qui est beaucoup trop court. Il est plus rĂ©aliste d’avoir des durĂ©es de bannissement d’une ou plusieurs heures, voir plusieurs jours.
Une autre directive importante est findtime qui définit en secondes le temps depuis lequel une anomalie est recherchée dans les logs. Il ne faut pas mettre une valeur trop élevée (1 heure suffit) sans quoi la quantité de logs à analyser pourrait devenir trÚs importante et donc avoir un impact sur les performances.
La directive ignoreip permet de dĂ©finir la liste des IP Ă ignorer. Il est utile d’y mettre sa propre IP afin de ne pas risquer de se faire bannir.
Il faut créer le fichier dans /etc/fail2ban/jail.d/custom.conf (ou un autre nom de votre choix) contenant :
[DEFAULT]
ignoreip = 127.0.0.1 124.32.5.48
findtime = 10m
bantime = 24h
maxretry = 3
- ignoreip â votre IP (ici 124.32.5.48) en plus de l’interface de bouclage ;
- findtime = 10m (10 minutes), 3600 secondes (une heure)
- bantime = 24h (24 heures) ou 86400 secondes
- maxretry = 3 (une IP sera bannie aprÚs 3 tentatives de connexion avortées).
Configurer fail2ban pour les services actifs
Pour spécifier à fail2ban quels services il doit surveiller, il faut activer les « jails » (prisons) correspondantes.
Si vous regardez le fichier /etc/fail2ban/jail.conf, dans la partie jail vous trouverez des blocs du type :
[sshd]
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
Il indique :
- port = les ports Ă bloquer au moyen des rĂšgles iptables ;
- logpath = l’emplacement des fichiers de log Ă surveiller ;
- backend = le moteur de surveillance des logs.
Les valeurs reprĂ©sentĂ©es ainsi %(sshd_logs)s sont des variables qui sont dĂ©finies dans d’autres fichiers de configuration : paths_common.conf et paths_debian.conf notamment.
Pour activer la surveillance des connexion SSH, il suffit d’ajouter dans le fichier /etc/fail2ban/jail.d/custom.conf :
[sshd]
enabled = true
ProcĂ©dez de mĂȘme pour les autres services.
Il est bien entendu inutile d’activer des prisons pour des services qui ne sont pas utilisĂ©s sur le serveur.
Si vous avez besoin de spĂ©cifier un port (par exemple, quand SSH n’est pas en Ă©coute sur un port standard, un fichier de log particulier, ou un nombre de tentatives diffĂ©rent de la valeur par dĂ©faut, prĂ©cisez-le :
[sshd]
enabled = true
port = 2222
logpath = /var/log/auth.log
maxretry = 5
D’une maniĂšre gĂ©nĂ©rale, il est important d’effectuer des tests pour vĂ©rifier le bon fonctionnement de fail2ban ! Voir ci-dessous comment procĂ©der.
Relancez la configuration avec :
sudo systemctl restart fail2ban
Vous pouvez alors vérifier si les prisons ont été correctement lancées avec :
sudo fail2ban-client status
Status
|- Number of jail: 3
`- Jail list: apache, proftpd, sshd
Les prisons peuvent ĂȘtre contrĂŽlĂ©es sĂ©parĂ©ment avec les mots clĂ©s start,stop,status Par exemple :
sudo fail2ban-client stop sshd
Jail stopped
VĂ©rifier le bon fonctionnement de votre configuration Fail2Ban
Pour vĂ©rifier le bon fonctionnement de fail2ban vous pouvez essayer de vous identifier plusieurs fois en saisissant un mauvais mot de passe. Si Fail2ban fonctionne, vous devriez ĂȘtre interdit d’accĂšs au serveur au bout d’un certain nombre d’essais (prĂ©cisĂ©s dans la configuration Ă la ligne maxretry) Ă condition de ne pas avoir mis votre IP dans la directive ignoreip.
Attention ! Pensez Ă rĂ©gler la valeur de bantime sur un temps assez court si vous faites ce genre dâessais afin de pouvoir vous reconnecter Ă votre serveur.
CĂŽtĂ© serveur vous pouvez Ă©galement surveiller ce qu’il se passe avec la commande :
sudo fail2ban-client status sshd
qui dans ce cas vous retournera le statut de la prison « sshd » (avec le nombre de tentatives échouées et la liste des IP bannies)
Si vous utilisez un service sujet Ă de nombreuses attaques par force brute, comme sshd sur le port standard 22, vous devriez trĂšs rapidement voir les premiers bannissements.
Vous pouvez aussi examiner les logs de fail2ban pour voir les actions effectuées :
Configurer les actions
Les actions exĂ©cutĂ©es par fail2ban lorsqu’une correspondance est trouvĂ©e entre un filtre et une entrĂ©e de log sont dĂ©finies par la directive action. Pour plus d’information consultez la partie ACTIONS du fichier /etc/fail2ban/jail.conf.
L’action par dĂ©faut est un simple bannissement par ajout d’une rĂšgle iptables.
tail -f /var/log/fail2ban.log
Les actions peuvent ĂȘtre dĂ©finis globalement dans la section [DEFAULT] ou par « jails » dans leur propre .section
Il est possible de recevoir un courriel aprĂšs chaque bannissement d’une adresse IP.
Pour cela vous pouvez dĂ©finir globalement l’adresse du destinataire dans la section [DEFAULT] du fichier /etc/fail2ban/jail.d/custom.conf :
destemail = adresse@example.com
Il faut que le systĂšme soit correctement configurĂ© pour l’envoi de courriels, par exemple avec ssmtp.
La valeur par défaut est root@localhost dans la section [DEFAULT] de /etc/fail2ban/jail.conf et concerne donc toutes les prisons. Il reste cependant possible de spécifier un destemail particulier dans une prison donnée.
Pour voir les messages locaux (si vous avez laissé une adresse e-mail du type @localhost), il vous faudra ouvrir un terminal et taper la commande « mail » ou, plus simplement encore, consulter le fichier /var/mail/votrelogin.
Pour activer l’envoi de courriels, ajoutez la ligne dans la section [DEFAULT] du fichier /etc/fail2ban/jail.d/custom.conf
action = %(action_mw)s
ou : (pour envoyer un mail avec le whois ainsi que les logs)
action = %(action_mwl)s
Pensez à redémarrer fail2ban pour que cette modification soit prise en compte :
sudo systemctl restart fail2ban
Des informations complémentaires sont disponibles sur le site officiel de Fail2ban : FAQ Fail2ban
Il existe de nombreuses autres possibilitĂ©s de configuration des actions : envoi automatiques de courriels au service « abuse » concernĂ©, bannissement d’utilisateur, envoi des IP et du motif de bannissement Ă des service externes comme AbuseIPDB, etc.
Gestion du bannissement
Pour savoir si votre jail est actif, vous devriez le voir affiché, aprÚs avoir taper cette commande :
fail2ban-client status
Cette commande affiche tous les jails que fail2ban traite.
Pour savoir si une de vos jails de votre fail2ban a bannis une ou plusieurs IP, taper cette commande :
fail2ban-client status [Nom du jail]
Cette commande va afficher le nombre de tentative lu dans vos logs, le nombre de bannis et, le plus intéressant, les IPs qui sont bannis temporairement.
DĂ©-bannir une IP de l’un de vos jails
Une de vos adresse IP se retrouve blacklisté suite à une mauvaise manips répété ou un test de sécurité. Vous pouvez le retirer de la liste des IP blacklisté de fail2ban avec cette commande :
fail2ban-client set [nom du jail] unbanip [IP concerné]
Bannir manuellement une IP sur l’un de vos jails
Vous voulez tester plus rapidement l’interdiction d’un accĂšs d’un PC, ou bloquer une personne malveillante. Renseignez son IP dans cette commande :
fail2ban-client set [nom du jail] banip [IP Ă bannir]
Source : https://doc.ubuntu-fr.org/fail2ban
Autres sources :