Sécuriser les tentatives de connexion SSH avec Fail2Ban
Vérifier les tentatives de connexion SSH
sudo journalctl -u ssh --no-pager | grep "Failed password"Bloquer les IP malveillantes
Bloquer une IP malveillante avec UFW (Uncomplicated Firewall) ou iptables.
Avec UFW
sudo ufw deny from [IP]ou avec iptables
sudo iptables -A INPUT -s [IP] -j DROPVérifier si l'ip est bloquée dans Iptables
sudo iptables -L INPUT -v -n | grep [IP]Débloquer une IP de Iptables
sudo iptables -D INPUT -s [IP] -j DROPInstaller Fail2Ban
sudo apt update && sudo apt install fail2ban -y
sudo systemctl enable fail2ban
sudo systemctl start fail2banVérifier le statut de Fail2Ban
sudo systemctl status fail2banDésactiver si je souhaite la connexion root en SSH
sudo nano /etc/ssh/sshd_config- Modifier la ligne suivante (attention gros risque de sécurité de la connexion root en SSH) :
PermitRootLogin no -> PermitRootLogin yes
PasswordAuthentication no -> PasswordAuthentication yes- Redémarrer le service SSH
sudo systemctl restart sshle plus sécurisé reste l'usage d'une clé SSH
PubkeyAuthentication yesEventuellement changer le port SSH
sudo nano /etc/ssh/sshd_config- Remplacer le port 22 par un autre port
Port 22XX- Ouvrir le port dans le pare-feu
sudo ufw allow 22XX/tcp- Redémarrer le service SSH
sudo systemctl restart sshVoir le liste des IP bloquées
sudo fail2ban-client status sshdDébloquer une IP
sudo fail2ban-client set sshd unbanip [IP]Voir les logs de Fail2Ban
sudo journalctl -u fail2banVoir le nombre de tenatives de connexions ssh
grep "authentication failure" /var/log/auth.log | wc -lVoir le poids du fichier de log
ls -lh /var/log/auth.logCréer des jails personnalisés pour surcharger la configuration de Fail2Ban
sudo nano /etc/fail2ban/jail.local- Ajouter les lignes suivantes. Si le fichier n'existe pas, le créer
[sshd]
enabled = true
bantime = -1
findtime = 10m
maxretry = 3Cette configuration dit que 3 tentatives ratées en 10 minutes déclenchent un ban.
Fail2Ban vérifie en continu (toutes les secondes par défaut de toutes les jails crées et activés) les logs SSH pour voir si une IP a dépassé le nombre de tentatives autorisées. Si c’est le cas, l’IP est bannie pour 1 jour ou définitivement si -1.
La jail [sshd] est souvent déjà présente dans /etc/fail2ban/jail.conf (fichier global) mais il vaut mieux surcharger via jail.local pour préserver la conf par défaut et ajouter ses propres règles.
- Redémarrer Fail2Ban
sudo systemctl restart fail2banModifier la configuration de fail2ban
sudo nano /etc/fail2ban/jail.local[sshd]
enabled = true
bantime = 1d
findtime = 10m
maxretry = 3
ignoreip = ajouter ici les IP à ignorer séparées par un espacesudo systemctl restart fail2ban
sudo fail2ban-client status sshdEviter de se bloquer soi même
- Trouver son IP local
ip a | grep "inet"- Ajouter son IP dans le fichier de configuration de Fail2Ban (
/etc/fail2ban/jail.local)
[DEFAULT]
ignoreip = 192.168.0.254 # Ajouter la liste d'IP à ignorer, séparées par un espaceBannir rapidement une IP avec fail2ban
sudo fail2ban-client set sshd banip 92.255.85.107Bannir rapidement une Ip avec IpTables
sudo iptables -A INPUT -s 92.255.85.107 -j DROPAjoute une règle à la fin de la chaîne INPUT pour bloquer toute connexion entrante provenant de l’IP 92.255.85.107.
Rendre cette configuration permanente
IL fau que le paquet iptables-persistent soit installé pour rendre les règles iptables persistantes après un redémarrage.
sudo apt install iptables-persistentPar défaut, toute règle ajoutée avec iptables est volatile : Elle disparaît au reboot donc on doit la sauvegarder dans un fichier de règles.
sudo iptables-save | sudo tee /etc/iptables/rules.v4A refaire après chaque modification des règles iptables.
Comportement de jail.local vs jail.conf
- Ce qui est défini dans
jail.localprend le dessus sur la même section (jail) dansjail.conf. - Si une jail existe seulement dans
jail.local, elle s’ajoute à la configuration globale. - Les options
[DEFAULT]définies dansjail.localsurchargent celles de[DEFAULT]dansjail.conf. - Les paramètres non spécifiés dans
jail.localhéritent de la configuration dejail.conf.
Exemple : Si [sshd] est présent dans les deux fichiers, c’est la configuration de /etc/fail2ban/jail.local qui s’applique.
Tout paramètre absent dans jail.local utilisera la valeur de jail.conf.
Conclusion
Fail2Ban est un outil puissant pour protéger votre serveur contre les attaques de force brute, notamment les tentatives de connexion SSH. En configurant correctement les jails et en surveillant les logs, vous pouvez réduire considérablement le risque d'intrusion.
Fail2Ban gère le ban en live, iptables-persistent gère la sauvegarde/restauration automatique au reboot.