Comment sécuriser SSH avec Fail2Ban
Protéger votre serveur contre les attaques par force brute est indispensable. La question est : comment exactement ? Heureusement pour vous, Fail2Ban est à nos portes pour protéger votre serveur, mais la configuration par défaut de Fail2Ban nécessite quelques ajustements pour une sécurité optimale. Ne vous inquiétez pas, ce tutoriel est là pour vous.
Dans ce tutoriel, vous apprendrez comment configurer Fail2Ban et parer aux attaques par force brute en sécurisant votre serveur SSH.
Prêt? Lisez la suite pour optimiser la sécurité de votre serveur SSH !
Conditions préalables
Ce didacticiel comprend des instructions étape par étape. Si vous souhaitez suivre, assurez-vous d’avoir les éléments suivants en place :
- Un serveur Ubuntu et Debian - Ce didacticiel utilise un serveur exécutant Ubuntu 18.04 LTS pour configurer Fail2Ban et un serveur Debian 10 pour tester les configurations d'interdiction Fail2Ban.
- Accès root ou privilèges sudo sur le serveur pour exécuter des commandes en tant que superutilisateur.
- Fail2Ban installé sur un serveur Ubuntu ou Debian.
Configuration d'un pare-feu de base
Fail2Ban protège votre serveur en surveillant les journaux et en interdisant les adresses IP qui effectuent trop de tentatives de connexion dans un certain laps de temps. Mais d’abord, vous allez configurer un pare-feu de base dans lequel vous pourrez ajouter des règles pour bloquer les actes malveillants sur votre serveur.
1. Tout d'abord, exécutez la commande service ci-dessous pour arrêter l'exécution de Fail2Ban (fail2ban stop). Arrêtez Fail2Ban lorsque vous apportez des modifications à vos fichiers de configuration afin de pouvoir tester les modifications et vous assurer qu'elles fonctionnent comme prévu.
sudo service fail2ban stop2. Exécutez la commande apt install pour installer Sendmail et IPTables-persistent. Sendmail est un programme que Fail2Ban utilise pour vous avertir lorsqu'il interdit une adresse IP. Tandis qu'IPTables-persistent est un programme qui enregistre vos paramètres de configuration modifiés dans le fichier /etc/sysconfig/iptables.
L'installation de ces programmes conserve les paramètres de votre pare-feu intacts même si quelque chose d'inattendu se produit, comme une panne de courant.
sudo apt install sendmail iptables-persistent -yExécutez maintenant chaque commande iptables ci-dessous pour configurer votre pare-feu. Ces commandes ne généreront aucune sortie mais ajouteront quatre règles à votre pare-feu. Ces règles autorisent ou bloquent les connexions à votre serveur.
## First Rule - Accepts all traffic generated by the server (lo interface)
sudo iptables -A INPUT -i lo -j ACCEPT
## Second Rule - Accepts all traffic that are part
## of an established o related connection
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
## Third Rule - Allows SSH traffic on port 22
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
## Fourth Rule - Arops all other traffic
sudo iptables -A INPUT -j DROP4. Exécutez la commande iptables ci-dessous pour afficher un résumé de ce que vous avez configuré dans votre pare-feu.
sudo iptables -SCi-dessous, sont mises en surbrillance les règles que vous avez ajoutées sur votre pare-feu.
5. Ensuite, exécutez les commandes suivantes pour enregistrer vos règles dans le fichier /etc/sysconfig/iptables-config et démarrez le service Fail2Ban. Le fichier iptables-config contient toutes vos règles de pare-feu permanentes.
Fail2Ban ajoutera automatiquement quelques règles à votre pare-feu pour protéger votre serveur.
sudo dpkg-reconfigure iptables-persistent
sudo service fail2ban start6. Enfin, réexécutez la commande iptables ci-dessous pour afficher vos règles de pare-feu.
sudo iptables -SCi-dessous, surlignées en rouge, les nouvelles règles que Fail2Ban a ajoutées à votre pare-feu.
Ajustement de votre configuration Fail2Ban locale
Maintenant que vous disposez d'un pare-feu de base en cours d'exécution, il est temps d'ajuster votre fichier de configuration Fail2Ban local pour ajouter plus de contrôle sur la sécurisation de votre serveur. Ce didacticiel utilise le fichier de configuration /etc/fail2ban/jail.conf car il contient toutes les options nécessaires pour configurer les paramètres globaux de l'application Fail2Ban.
Peut-être souhaitez-vous créer des règles personnalisées pour votre serveur SSH. Si tel est le cas, vous allez créer un nouveau fichier jail.local (basé sur le fichier jail.conf) et placer les règles spécifiques à SSH dans la jail. local. Cela vous permet de remplacer les paramètres du fichier jail.conf pour votre serveur.
1. Exécutez la commande awk ci-dessous pour effectuer les opérations suivantes :
- Imprime le contenu (
'{ printf "# "; print; }') du fichier/etc/fail2ban/jail.conf. - Créez un fichier nommé jail.local (basé sur le fichier jail.conf), qui peut être utilisé pour remplacer les paramètres par défaut dans jail.conf fichier.
- Dirigez le contenu du fichier
/etc/fail2ban/jail.confvers la commandetee. Cela écrira le contenu du fichierjail.confsur votre système de fichiers local (/etc/fail2ban/jail.local).
awk '{ printf "# "; print; }' /etc/fail2ban/jail.conf | sudo tee /etc/fail2ban/jail.local2. Une fois que vous avez créé le fichier jail.local, exécutez la commande ls ci-dessous. La commande répertorie le contenu du répertoire Fail2Ban de votre serveur (/etc/fail2ban) pour vérifier que votre fichier jail.local est généré correctement.
ls /etc/fail2banSi vous voyez le nouveau fichier jail.local, comme indiqué ci-dessous, alors votre fichier local a été généré correctement.
3. Ouvrez le fichier /etc/fail2ban/jail.local dans votre éditeur de texte préféré et accédez à la section [ssh].
Décommentez les options [sshd] et enabled en supprimant le symbole # devant les options, comme indiqué ci-dessous pour activer SSH.
À partir de ce point et jusqu'au reste du didacticiel, supprimez le symbole # devant les sections ou les options pour les activer.
4. Faites défiler vers le bas et supprimez le commentaire de la section [DEFAULT] ci-dessous. Cette section est l'endroit où vous configurez les paramètres par défaut pour Fail2Ban. Tous les paramètres de cette section seront appliqués à toutes les prisons gérées par Fail2Ban.
5. Ensuite, faites défiler jusqu'à la section bantime et définissez un bantime pendant 60 minutes. L'option bantime définit la durée, en minutes, pendant laquelle une adresse IP est interdite après une tentative de connexion infructueuse.
Le paramètre de bantime par défaut est de 600 secondes (10 minutes). Vous pouvez ajuster ce paramètre à votre guise, mais il est important de noter que plus le paramètre de bantime est bas, plus votre serveur sera chargé.
6. Accédez aux options findtime et maxretry. Conservez le findtime tel quel (10 m) et réduisez le maxretry à 3.
L'option findtime définit la durée, en minutes, pendant laquelle une adresse IP peut échouer à se connecter avant d'être bannie. Tandis que l'option maxretry définit le nombre de tentatives de connexion infructueuses avant qu'une adresse IP ne soit bannie.
Le paramètre findtime par défaut est de 10 minutes et maxretry est de 5 minutes. En conséquence, une adresse IP qui ne parvient pas à se connecter 5 fois sur une période de 10 minutes sera bannie.
7. Faites défiler vers le bas, supprimez les commentaires et configurez les options destemail, expéditeur et mta :
- destemail - Saisissez une adresse e-mail à laquelle Fail2Ban envoie des notifications.
- expéditeur - Définissez le champ « De » dans l'e-mail que Fail2Ban envoie à destemail.
- mta - Conservez la valeur par défaut (sendmail) telle quelle. L'option mta définit l'agent de livraison de courrier électronique que Fail2Ban utilise pour envoyer des notifications.
8. Accédez aux options action, comme indiqué ci-dessous, et supprimez le commentaire de l'option action_mwl. Cela permet à Fail2Ban de vous envoyer des e-mails de journalisation. Vous pouvez consulter les e-mails de logwatch pour enquêter plus en détail sur tout problème de sécurité potentiel sur votre serveur.
Enregistrez les modifications et quittez l'éditeur de texte.
9. Exécutez maintenant les commandes ci-dessous pour redémarrer votre service fail2ban.
sudo service fail2ban stop
sudo service fail2ban start10. Enfin, exécutez la commande ci-dessous pour vérifier le statut de votre service fail2ban. sudo service fail2ban status Si le service Fail2Ban fonctionne, vous obtiendrez une sortie comme celle ci-dessous.
sudo service fail2ban statusSi le service Fail2Ban fonctionne, vous obtiendrez un résultat comme celui ci-dessous.
Tester vos configurations d'interdiction
Vous venez de configurer Fail2Ban, il est donc maintenant temps de tester si les configurations d'interdiction fonctionnent réellement. Essayez plusieurs connexions SSH ayant échoué à votre serveur Fail2Ban à partir d'un serveur secondaire et voyez si ce serveur secondaire est banni.
1. Connectez-vous à votre serveur secondaire (Debian) et exécutez la commande ci-dessous en SSH sur votre serveur Fail2Ban.
Cette démo utilise un serveur Debian 10 avec une IP de 134.122.20.103 pour ssh vers le serveur fail2ban qui a une IP de 69.28.83.134.
ssh [email 2. Entrez un mot de passe aléatoire lorsque vous y êtes invité et appuyez sur Entrée.
Au premier essai, le serveur Fail2Ban arrêtera la tentative de connexion SSH et imprimera le message Autorisation refusée, comme indiqué ci-dessous. Répétez la tentative de connexion SSH environ deux à trois fois de plus, et le serveur Fail2Ban finira par cesser de répondre à votre tentative de connexion SSH.
À ce stade, vous ne recevrez plus le message Autorisation refusée mais un écran vide. Obtenir un écran vide indique que votre deuxième serveur (Debian) a été banni du serveur Fail2Ban.
Mais peut-être avez-vous déjà une liste d’adresses IP à bloquer depuis votre serveur Fail2Ban. Si tel est le cas, ouvrez le fichier jail.local et accédez à la section [DEFAULT]. Décommentez l'option ignoreip et définissez les adresses IP à bloquer, comme indiqué ci-dessous.
L'adresse peut être constituée de plusieurs entrées IPv4 ou IPv6 distinctes, ou bien séparées par des virgules.
3. Sur votre serveur Fail2Ban (Ubuntu), réexécutez la commande iptables ci-dessous pour afficher vos règles de pare-feu.
sudo iptables -SNotez ci-dessous qu'il existe une nouvelle règle qui rejette les tentatives de connexion SSH à partir de l'adresse IP 134.122.20.103.
Vous recevrez également un e-mail de Fail2Ban, en cas d'interdiction réussie, avec un fichier journal en pièce jointe si vous avez configuré sendmail sur votre serveur Fail2Ban. La notification par e-mail indique que Fail2Ban a réussi à arrêter une attaque par force brute et à protéger votre serveur de dommages potentiels.
Conclusion
Tout au long de ce didacticiel, vous avez appris à configurer Fail2Ban sur un serveur Ubuntu. À ce stade, vous devez disposer des connaissances nécessaires pour protéger votre serveur SSH contre les attaques par force brute.
Maintenant, pourquoi ne pas approfondir ces nouvelles connaissances ? Peut-être commencer par bloquer les IP sur tous les ports avec Fail2Ban sur un hôte Docker ?















