Masquer les derniers auteurs
| author | version | line-number | content |
|---|---|---|---|
![]() |
1.1 | 1 | Bannissement des adresses après des échecs répétés de connexion SSH. |
| 2 | |||
| 3 | == Contexte == | ||
| 4 | |||
| 5 | Le Raspberry Pi n'est pas exposé directement à Internet. Les accès extérieurs passent par le serveur principal : | ||
| 6 | |||
| 7 | |=Accès|=Chemin|=Adresse vue par le Pi | ||
| 8 | |SSH depuis l'extérieur|Sshwifty (derrière Authelia) sur le serveur principal|Celle du serveur principal | ||
| 9 | |Jellyfin|SWAG sur le serveur principal|Celle du serveur principal ; Jellyfin journalise l'adresse réelle (proxy de confiance) | ||
| 10 | |Sauvegardes Plakar|SFTP depuis le serveur principal|Celle du serveur principal | ||
| 11 | |||
| 12 | La protection de Jellyfin contre la force brute repose sur SWAG, côté serveur principal (prison ##nginx-unauthorized## sur les réponses 401). | ||
| 13 | |||
| 14 | == SSH == | ||
| 15 | |||
| 16 | Authentification par clé uniquement : | ||
| 17 | |||
| 18 | |=Option|=Valeur | ||
| 19 | |##PasswordAuthentication##|##no## | ||
| 20 | |##KbdInteractiveAuthentication##|##no## | ||
| 21 | |##PubkeyAuthentication##|##yes## | ||
| 22 | |##PermitRootLogin##|##without-password## (root par clé seulement) | ||
| 23 | |||
| 24 | {{code language="bash"}} | ||
| 25 | sudo sshd -T | grep -E '^(passwordauthentication|pubkeyauthentication|permitrootlogin|kbdinteractiveauthentication) ' | ||
| 26 | {{/code}} | ||
| 27 | |||
| 28 | == Configuration == | ||
| 29 | |||
| 30 | |=Fichier|=Contenu | ||
| 31 | |##/etc/fail2ban/jail.d/defaults-debian.conf##|Fourni par Debian : ##banaction = nftables##, prison ##sshd## avec ##backend = systemd## | ||
| 32 | |##/etc/fail2ban/jail.local##|Copie complète de ##jail.conf## avec les réglages ci-dessous | ||
| 33 | |||
| 34 | 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. | ||
| 35 | |||
| 36 | Réglages en vigueur : | ||
| 37 | |||
| 38 | |=Réglage|=Valeur | ||
| 39 | |Prison active|##sshd## uniquement | ||
| 40 | |Source|Journal systemd (##_SYSTEMD_UNIT=ssh.service##) | ||
| 41 | |##maxretry## / ##findtime##|3 échecs en 10 minutes | ||
| 42 | |##bantime##|10 minutes | ||
| 43 | |##bantime.increment##|Oui, multiplicateurs 1, 2, 4, 8, 16, 32, 64 à chaque récidive | ||
| 44 | |##ignoreip##|Aucune adresse exclue | ||
| 45 | |Action|##iptables-multiport## sur le port SSH | ||
| 46 | |||
| 47 | 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. | ||
| 48 | |||
| 49 | == Commandes == | ||
| 50 | |||
| 51 | {{code language="bash"}} | ||
| 52 | sudo fail2ban-client status sshd # adresses bannies | ||
| 53 | sudo fail2ban-client set sshd unbanip <IP> # débannir | ||
| 54 | sudo fail2ban-client get sshd ignoreip # adresses exclues | ||
| 55 | sudo fail2ban-client get sshd actions # action appliquée | ||
| 56 | sudo fail2ban-client -t # tester la configuration | ||
| 57 | sudo journalctl -u fail2ban -n 50 | ||
| 58 | {{/code}} | ||
| 59 | |||
| 60 | == Options non utilisées == | ||
| 61 | |||
| 62 | |=Réglage|=Effet | ||
| 63 | |##ignoreip = 127.0.0.1/8 ::1 <IP_SERVEUR>##|Ne jamais bannir le serveur principal | ||
| 64 | |##[recidive]## avec ##enabled = true##|Bannissement d'une semaine sur tous les ports après des bannissements répétés | ||
| 65 | |##jail.local## réduit aux seules différences|Configuration lisible ; ##jail.conf## reste la référence mise à jour par Debian |
