Aller au contenu

Pare-feu : Fail2ban, installation

Fail2ban surveille les journaux et bannit temporairement les adresses qui multiplient les échecs (mots de passe SSH erronés, scans web). UFW fixe les ports ouverts, Fail2ban ferme l’accès aux adresses abusives.

Notion Rôle
Filtre Expressions régulières qui repèrent un échec (/etc/fail2ban/filter.d/)
Jail Filtre + journal à surveiller + règles de bannissement
Action Ce qui est fait pour bannir (/etc/fail2ban/action.d/)

Une adresse qui produit maxretry échecs en moins de findtime est bannie pendant bantime.

Ubuntu Fail2ban
24.04 1.0.2
26.04 1.1.0
Fenêtre de terminal
sudo apt update
sudo apt install fail2ban
sudo systemctl enable --now fail2ban
sudo fail2ban-client status

Sur Ubuntu, la jail sshd est active par défaut (/etc/fail2ban/jail.d/defaults-debian.conf, lecture du journal systemd).

Fichier Rôle
/etc/fail2ban/jail.conf Réglages d’origine, à ne pas modifier
/etc/fail2ban/jail.local Réglages locaux, prioritaires
/etc/fail2ban/jail.d/*.local Un fichier par jail
/etc/fail2ban/filter.d/ Filtres
/var/log/fail2ban.log Bannissements et débannissements
Fenêtre de terminal
sudo tee /etc/fail2ban/jail.local <<'CONF'
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
ignoreip = 127.0.0.1/8 ::1 203.0.113.10
[sshd]
enabled = true
maxretry = 3
CONF
sudo systemctl restart fail2ban
sudo fail2ban-client status sshd
Réglage Signification
bantime Durée du bannissement (10m, 1h, 1d, 1w ; -1 : définitif)
findtime Fenêtre d’observation
maxretry Échecs tolérés dans la fenêtre
ignoreip Adresses jamais bannies
[DEFAULT]
bantime.increment = true
bantime.factor = 2
bantime.maxtime = 4w

Chaque récidive d’une même adresse double la durée, jusqu’à 4 semaines.

Sur Ubuntu, l’action par défaut est nftables : Fail2ban crée la table f2b-table.

Fenêtre de terminal
sudo nft list table inet f2b-table

La règle est évaluée avant celles d’UFW : les deux cohabitent. La connexion de l’adresse bannie est refusée immédiatement (Connection refused).

Depuis une autre machine, avec un mauvais mot de passe :

Fenêtre de terminal
for i in 1 2 3 4; do ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no faux@serveur.exemple.com; done

Sur le serveur :

Fenêtre de terminal
sudo fail2ban-client status sshd
sudo tail -f /var/log/fail2ban.log
|- Filter
| |- Currently failed: 0
| |- Total failed: 4
`- Actions
|- Currently banned: 1
|- Total banned: 1
`- Banned IP list: 203.0.113.9
Commande Rôle
sudo fail2ban-client status Liste des jails
sudo fail2ban-client status sshd Détail d’une jail
sudo fail2ban-client set sshd banip 203.0.113.9 Bannit à la main
sudo fail2ban-client set sshd unbanip 203.0.113.9 Débannit
sudo fail2ban-client unban --all Débannit tout
sudo fail2ban-client get sshd maxretry Lit un réglage
sudo fail2ban-client set sshd bantime 2h Modifie à chaud (perdu au redémarrage)
sudo fail2ban-client reload Recharge la configuration
sudo fail2ban-client -d Affiche la configuration lue

Depuis la console de l’hébergeur ou une autre adresse :

Fenêtre de terminal
sudo fail2ban-client set sshd unbanip 203.0.113.9

Ajouter ensuite l’adresse à ignoreip.

Symptôme Piste
Aucun bannissement lors de tests locaux ignoreself ou ignoreip
Total failed reste à 0 Mauvais filtre ou journal : sudo fail2ban-regex systemd-journal sshd
La jail ne démarre pas sudo fail2ban-client -d et sudo journalctl -u fail2ban -n 50
Adresse encore bannie après unbanip Autre jail : fail2ban-client status puis chaque jail

Ubuntu 24.04 et 26.04 : différences à connaître

Section intitulée « Ubuntu 24.04 et 26.04 : différences à connaître »

Le fonctionnement est le même sur Fail2ban 1.0.2 et 1.1.0. OpenSSH 10 (26.04) journalise sous sshd-session : le filtre sshd de Fail2ban 1.1.0 le prend en charge.