Skip to content

Fail2ban

Le rôle Fail2ban installe Fail2ban et le configure.

Il est responsable de :

  • l’installation de fail2ban
  • le déploiement du fichier de configuration

Fail2ban surveille les journaux système afin de détecter les tentatives de connexion répétées. Lorsqu’une adresse IP dépasse le nombre maximal de tentatives autorisées dans une période donnée (findtime), elle est temporairement bloquée pendant la durée définie par bantime.

Le fichier de configuration de Fail2ban se situe ici :

Terminal window
cat /etc/fail2ban/fail2ban.conf

Le fichier qui permet de définir la configuration des bannissements se trouve ici :

Terminal window
cat /etc/fail2ban/jail.local
roles/fail2ban/
├── defaults/
│ └── main.yml # Variables du rôle
├── handlers/
│ └── main.yml # Redémarrage de Fail2ban si nécessaire
├── tasks/
│ ├── install.yml # Installation et configuration
│ └── main.yml # Point d'entrée du rôle
└── templates/
└── jail.local.j2 # Templates à déployer

Les variables sont contenues dans le fichier main.yml dans le dossier defaults.

Variable Type Description
fail2ban_bantime string Durée du temps de bannissement
fail2ban_findtime string Fenêtre de temps pendant laquelle les tentatives de connexion sont comptabilisées.
fail2ban_maxretry int Nombre maximal de tentatives.
fail2ban_ignoreip Liste Liste des adresses IP à ignorer.
fail2ban_bantime: 1h
fail2ban_findtime: 10m
fail2ban_maxretry: 5
fail2ban_ignoreip:
- 127.0.0.1/8

Le rôle réalise les opérations suivantes :

  1. Installation du paquet Fail2ban.
  2. Déploiement du fichier de configuration jail.local.
  3. Vérification de la validité de la configuration avec fail2ban-client -d.
  4. Activation et démarrage du service Fail2ban.

Le rôle contient un handler chargé de redémarrer le service Fail2ban lorsque sa configuration est modifiée.

Le handler est défini dans le fichier suivant handlers/main.yml.

Le handler est appelé par la tâche qui déploie le fichier, celle-ci : Deploy Fail2Ban configuration.

La directive notify déclenche le handler uniquement lorsque le fichier de configuration a réellement été modifié.

Cela permet d’éviter un redémarrage inutile du service à chaque exécution du playbook.

Terminal window
sudo systemctl status fail2ban

Permet de vérifier les protections actives :

Section titled “Permet de vérifier les protections actives :”
Terminal window
sudo fail2ban-client status

Vérifier une protection spécifique (ici sshd) :

Section titled “Vérifier une protection spécifique (ici sshd) :”
Terminal window
sudo fail2ban-client status sshd

Vérifier que le fichier de configuration est valide :

Section titled “Vérifier que le fichier de configuration est valide :”
Terminal window
sudo fail2ban-client -d
Terminal window
sudo journalctl -u fail2ban
Terminal window
sudo systemctl status fail2ban

Puis consulter les journaux :

Terminal window
sudo journalctl -xeu fail2ban

Afficher les adresses bannies :

Terminal window
sudo fail2ban-client status sshd

Débannir une adresse IP :

Terminal window
sudo fail2ban-client set sshd unbanip 192.168.1.100

Depuis une autre machine, effectuer plusieurs tentatives de connexion SSH avec un mot de passe erroné.

Exemple :

Terminal window
ssh utilisateur@serveur

Après le nombre de tentatives défini par fail2ban_maxretry, l’adresse IP doit être bannie.

Vérifier ensuite :

Terminal window
sudo fail2ban-client status sshd

L’adresse IP doit apparaître dans Banned IP list.