0 Votes

fail2ban

Modifié par john le 2026/09/20 00:48

Bannissement des adresses après des échecs répétés de connexion SSH.

Contexte

Le Raspberry Pi n'est pas exposé directement à Internet. Les accès extérieurs passent par le serveur principal :

AccèsCheminAdresse vue par le Pi
SSH depuis l'extérieurSshwifty (derrière Authelia) sur le serveur principalCelle du serveur principal
JellyfinSWAG sur le serveur principalCelle du serveur principal ; Jellyfin journalise l'adresse réelle (proxy de confiance)
Sauvegardes PlakarSFTP depuis le serveur principalCelle du serveur principal

La protection de Jellyfin contre la force brute repose sur SWAG, côté serveur principal (prison nginx-unauthorized sur les réponses 401).

SSH

Authentification par clé uniquement :

OptionValeur
PasswordAuthenticationno
KbdInteractiveAuthenticationno
PubkeyAuthenticationyes
PermitRootLoginwithout-password (root par clé seulement)
sudo sshd -T | grep -E '^(passwordauthentication|pubkeyauthentication|permitrootlogin|kbdinteractiveauthentication) '

Configuration

FichierContenu
/etc/fail2ban/jail.d/defaults-debian.confFourni par Debian : banaction = nftables, prison sshd avec backend = systemd
/etc/fail2ban/jail.localCopie complète de jail.conf avec les réglages ci-dessous

Ordre de lecture : jail.conf, jail.d/*.conf, puis jail.local. Le banaction = iptables-multiport de jail.local l'emporte donc sur le nftables de Debian. iptables passe par nftables en arrière-plan : les bannissements fonctionnent.

Réglages en vigueur :

RéglageValeur
Prison activesshd uniquement
SourceJournal systemd (_SYSTEMD_UNIT=ssh.service)
maxretry / findtime3 échecs en 10 minutes
bantime10 minutes
bantime.incrementOui, multiplicateurs 1, 2, 4, 8, 16, 32, 64 à chaque récidive
ignoreipAucune adresse exclue
Actioniptables-multiport sur le port SSH

Les échecs venant de Sshwifty ou de Plakar sont attribués à l'adresse du serveur principal : trois échecs en 10 minutes bannissent le serveur principal du port SSH du Pi, ce qui coupe aussi les sauvegardes pendant la durée du bannissement.

Commandes

sudo fail2ban-client status sshd                        # adresses bannies
sudo fail2ban-client set sshd unbanip <IP>              # débannir
sudo fail2ban-client get sshd ignoreip                  # adresses exclues
sudo fail2ban-client get sshd actions                   # action appliquée
sudo fail2ban-client -t                                 # tester la configuration
sudo journalctl -u fail2ban -n 50

Options non utilisées

RéglageEffet
ignoreip = 127.0.0.1/8 ::1 <IP_SERVEUR>Ne jamais bannir le serveur principal
[recidive] avec enabled = trueBannissement d'une semaine sur tous les ports après des bannissements répétés
jail.local réduit aux seules différencesConfiguration lisible ; jail.conf reste la référence mise à jour par Debian