Skip to the content.

Fail2ban

Qu’est ce que Fail2ban ?

Fail2ban est un logiciel de sécurité destiné à prévenir les attaques par force brute en bloquant temporairement les adresses IP suspectes. Il analyse les journaux des services pour détecter des motifs d’échecs d’authentification répétés et autres comportements suspects, puis utilise des règles iptables pour bannir temporairement ces adresses IP.

Fonctionnalités principales de Fail2ban

  1. Surveillance des journaux : Fail2ban surveille les fichiers de journaux de divers services (SSH, FTP, HTTP, etc.) pour détecter des tentatives de connexion échouées répétées
  2. Bannissement temporaire : lorsque Fail2ban détecte un nombre prédéfini de tentatives échouées depuis une même IP, il bannit cette IP pour une période déterminée
  3. Flexibilité et extensibilité : Fail2ban est hautement configurable et peut être étendu pour surveiller presque n’importe quel service à travers des fichiers de configuration personnalisés et des filtres regex
  4. Actions de bannissement : Fail2ban peut utiliser différentes actions de bannissement, telles que la mise à jour des règles iptables, la modification des règles hosts.deny, ou l’envoi de notifications par email

Installation de Fail2ban

Méthode N°1

On installe Fail2ban via les paquets officiels :

sudo apt install fail2ban


Méthode N°2 : via les sources

On installe Fail2ban via les sources du dépôt GitHub :

git clone https://github.com/fail2ban/fail2ban.git
cd fail2ban
sudo python setup.py install

On vérifie que Fail2ban s’est correctement installé :

fail2ban-client -h

Configuration de Fail2ban pour les services actifs

On démarre le service :

systemctl start fail2ban

On active le démarrage automatique :

systemctl enable fail2ban

On vérifie que le service fonctionne :

systemctl status fail2ban

Nous allons créer et modifier les fichiers de configuration de Fail2ban, mais comme indiqué dans le fichier /etc/fail2ban/fail2ban.conf, ce fichier sera probablement remplacé ou amélioré lors d’une mise à jour. De ce fait, nous allons créé des « prisons » dans les fichiers placés dans le dossier /etc/fail2ban/jail.d.

Le fichier /etc/fail2ban/jail.conf peut servir de documentation et les paramètres par défaut sont écrits à l’intérieur.

On va créer un filtre pour gérer la configuration par défaut de tous les filtres actifs et à venir :

sudo nano /etc/fail2ban/jail.d/prisons.conf

On y ajoute :

[DEFAULT]
ignoreip = 127.0.0.1 192.168.1.0/24 ip-du-serveur mon-ip
findtime = 10m
bantime = 72h
maxretry = 3

On y ajoute le filtre pour le service SSH :

[sshd]
enabled = true
filter = sshd
port = 22
logpath = /var/log/auth.log

Si le fichier /var/log/auth.log n’existe pas, on vérifie si rsyslog est installé et en cours d’exécution :

sudo systemctl status rsyslog

Si rsyslog n’est pas installé, on l’installe :

sudo apt update
sudo apt install rsyslog

On vérifie la configuration de rsyslog :

sudo nano /etc/rsyslog.conf

On s’assure que l ligne suivante n’est pas commentée (pas de # au début) :

auth,authpriv.* /var/log/auth.log

On redémarre rsyslog :

sudo systemctl restart rsyslog

Debian utilise systemd et ses logs peuvent être consultés via journald. On peut afficher les logs SSH avec la commande suivante :

sudo journalctl -u ssh

ou

sudo cat /var/log/auth.log

On redémarre Fail2ban pour appliquer les modifications :

sudo systemctl restart fail2ban

On vérifie que le filtre a été prit en compte :

sudo fail2ban-client status

La sortie renverra :

Status
|- Number of jail: 1
`- Jail list:   sshd

Vous allez probablement créer différents filtres, si vous souhaitez en activer / désactiver certains, on peut utiliser :

sudo fail2ban-client start|stop|status sshd

Quelques exemples de filtres, à ajouter dans le fichier :

sudo nano /etc/fail2ban/jail.d/prisons.conf

On y ajoute :

[apache-auth]
enabled = true
bantime = 744h
maxretry = 1

[apache-badbots]
enabled = true
bantime = 744h
maxretry = 1

[apache-fakegooglebot]
enabled = true
bantime = 744h
maxretry = 1

[apache-overflows]
enabled = true
bantime = 744h
maxretry = 1

Configuration avancée

Pour être averti par courriel lorsque Fail2ban banni une IP, on modifie la configuration globale :

sudo nano /etc/fail2ban/jail.d/prisons.conf

On y ajoute, dans la partie [DEFAULT] :

action = %(action_mw)s
destemail = fail2ban@monsite.fr

Pour envoyer un courriel plus détaillé (whois + logs), on chnage :

action = %(action_mwl)s

On redémarre Fail2ban :

sudo systemctl restart fail2ban

La configuration actuelle est globale, mais on peut spécifier l’envoie de courriel pour chaque filtre séparément.

Fail2ban gère aussi les expressions régulières (regex), qui sont définies par la directive failregex.

Utilisateur avancé : pour ceux qui souhaitent créer des filtres personnalisés, ou pour testé un filtre sur un fichier log, on utilisera fail2ban-regex.

Fail2ban met à disposition des filtres déjà écrits. Pour tester le filtre qui gére les « mauvais robots » qui se balade sur votre serveur, on peut tester le script :

fail2ban-regex /var/log/apache2/access.log /etc/fail2ban/filter.d/apache-badbots.conf

Pour afficher les prisons actives :

sudo fail2ban-client status

La sortie renverra :

Status
|- Number of jail: 1
`- Jail list:   sshd

Pour afficher le nombre de tentative, le nombre d’IP bannie ainsi que la liste des IP bannies :

sudo fail2ban-client status sshd

La sortie renverra :

Status for the jail: sshd
|- Filter
|  |- Currently failed: 6
|  |- Total failed:     485
|  `- File list:        /var/log/auth.log
`- Actions
   |- Currently banned: 70
   |- Total banned:     70
   `- Banned IP list:   37.156.*.* 183.81.*.* 121.233.*.* 45.148.*.* …etc

Si votre adresse IP se retrouve dans la liste des IP bannies, pas de panique, nous pouvons la retirer !

On tape :

sudo fail2ban-client set nom-du-service mon-ip

On peut aussi bannir une IP manuellement :

sudo fail2ban-client set nom-du-service banip mon-ip

Merci au Wiki officiel d’ubuntu-fr.org et au dépôt GitHub officiel de Fail2ban.

[ Retour à l’accueil ] [ Remonter la page ]