Guide : protéger son serveur personnel Linux avec Fail2ban
![]()
Avoir un serveur sur un MiniPC c’est bien, l’ouvrir vers l’extérieur c’est mieux. Si des usages locaux sont évidemment nombreux, le véritable intérêt d’un serveur est de proposer des usages en ligne, accessibles depuis n’importe quel point du globe avec une simple connexion internet. Fail2Ban permet de repousser les attaques de base.
![]()
Au sommaire de cette seconde partie, nous allons reprendre le travail effectué lors de l’installation du serveur en décembre et le compléter. La première étape consistera à installer Fail2ban pour sécuriser le système. Puis nous ouvrirons l’accès au serveur sur Internet. Une fois cela fait, nous pourrons installer la plateforme Docker et enfin profiter de celui-ci pour installer facilement un premier service en déployant Adguard.
Installation de Fail2Ban, une protection indispensable avant connexion
Avant de rendre totalement accessible notre serveur sur internet, il est préférable de le protéger du mieux possible. Pour cela nous allons utiliser Fail2ban qui fait partie de la trousse à outils de base de tout serveur en ligne. L’idée de Fail2Ban est d’éviter les attaques les plus classiques des robots en ligne. Les attaques du type « bruteforce » qui vont simplement tenter de se connecter en essayant des listes et des combinaisons de mot de passe. Le principe de cette protection et simple, elle consiste à bannir l’adresse IP provenant d’un nombre déterminé de tentatives de connexion échouées. Si un robot tente, par exemple, trois mots de passe erronés, le serveur va empêcher son IP de recommencer pendant un certain temps. C’est une méthode assez classique et simple qui évitera les attaques les plus primitives.
Ne croyez pas que parce que vous êtes un particulier qui installe un serveur anonyme sur la toile vous n’allez pas subir de tentative d’intrusions. Des dizaines de milliers de robots se baladent en permanence en ligne à la recherche de la moindre faille possible pour tenter d’y pénétrer. Votre petit serveur perso subira les mêmes tentatives qu’un grand serveur d’entreprise.
Fail2ban se base sur des « logs » ou des journaux des différents outils logiciels disponibles. Ici, nous allons utiliser une règle qui concernera les connexions SSH. Cette règle est quasiment prête à l’emploi, ce qui est pratique, mais il est possible d’en faire des personnalisées ou de trouver d’autres exemples sur internet.
On va commencer par se connecter à notre serveur en SSH de la même manière que pendant la phase d’installation du serveur.
On ouvre un terminal depuis un PC sur le même réseau que son MiniPC/serveur et on pianote ssh kevin@192.168.1.214 -p 21422 en adaptant évidemment le login et l’IP en fonction des réglages effectués auparavant. Si vous avez suivi la première partie du guide, votre PC a déjà un login, une connexion SSH et une IP fixe.
Une fois cela fait, règle d’usage classique, on va charger la liste des mises à jour disponibles depuis la dernière connexion en pianotant sudo apt update.
![]()
Il y a logiquement un bon nombre de paquets à actualiser, on va donc le faire rapidement avec la commande :sudo apt upgrade.
![]()
Il suffit d’appuyer sur entrée pour poursuivre. Une règle existe pour ce type de question de la part du système : la lettre en majuscule proposée est celle qui sera validée par la touche entrée. Ici le « O » est en majuscule pour « Oui » et le « n » reste en minuscule pour « non ». On appuie donc sur entrée.
Le système se met rapidement à jour et nous allons pouvoir partir sur cette base « saine » pour installer Fail2ban. Ce n’est pas très complexe, on pianote :
sudo apt install fail2ban
![]()
On confirme notre intention d’installer le service avec la touche entrée. L’installation débute et se termine très rapidement. Une fois celle-ci terminée, il va falloir mettre en place une configuration adaptée à nos besoins. Pas besoin d’être un expert pour y arriver, on va se contenter pour le moment de partir sur les bases par défaut de l’outil. Pour cela, on va copier et coller le fichier de configuration fourni par défaut. Pour cela, on va utiliser la commande cp qui sert à copier des fichiers avec cette syntaxe : cp [Original] [Destination]. La destination indique l’endroit où le fichier original sera copié et sous quelle forme. Il est tout à fait possible de prendre un fichier et de changer son extension, c’est ce que nous allons faire ici
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Ici, on a pris le fichier « jail » ou « prison » avec une extension « .conf » qui correspond à la configuration standard et nous l’avons transformé en jail.local pour qu’il soit lu comme la configuration spécifique (locale) de notre serveur. Nous allons maintenant adapter cette configuration locale en éditant ce fichier avec l’ordre.
sudo vim /etc/fail2ban/jail.local
Une fois le fichier ouvert, il nous faut chercher une section particulière de son contenu. Pour cela, il y a une astuce toute bête dans l’éditeur de texte vim. On appuie sur la touche « slash » : / suivi directement du texte que l’on recherche. Vim prend alors le relais et affiche la première occurrence qu’il trouve. Évidemment, il ne faut pas être en train d’éditer le texte sinon le « / » s’inscrirait dans le fichier. Pour éviter cela il faut appuyer sur la touche ESC/Exhap située en haut à gauche de son clavier. Ici nous allons rechercher « sshd » et donc pianoter « /sshd » qui doit se trouver aux alentours de la ligne 274.
![]()
Une fois la séquence trouvée il faut enclencher le mode édition de Vim avec la touche « i ». On peut alors modifier le contenu de la section de la manière suivante :
[sshd]
enabled = true port = 21422 # Port SSH pour se connecter à notre serveur filter = sshd maxretry = 3 # Nombre d’essais autorisés avant de bannir l’IP bantime = 3h # Durée du bannissement findtime = 600 # Intervalle (en secondes) durant lequel les 3 tentatives doivent avoir lieu pour entrainer un bannissement. logpath = %(sshd_log)s # ne pas toucher backend = %(sshd_backend)s # ne pas toucher
![]()
Après modification, votre fichier édité doit ressembler à cela. Si tout est dans l’ordre, alors appuyez sur Echap pour arrêter l’édition du document, appuyez ensuite sur w pour écrire (write) le fichier et donc le sauvegarder. Puis sur q pour quitter vim.
Pour que le système prenne en compte ces modifications, il faut redémarrer le service fail2ban. Pour cela on pianote :
sudo systemctl restart fail2ban
On vérifie ensuite que le service est bien en cours de fonctionnement avec la commande
sudo systemctl status fail2ban.service
Et on obtient normalement ceci :
![]()
Vous devez avoir un retour d’écran qui ressemble à la capture ci-dessus. Si c’est le cas c’est que Fail2ban fonctionne.
![]()
Si vous avez à l’écran un status indiquant « Failed » comme ci-dessus, il y a manifestement un problème. Pas de panique.
![]()
Jetez un coup d’œil au journal qui liste les informations (log), vous y découvrirez sûrement un souci de syntaxe dans votre fichier (ligne en double…). Ici par exemple, l’édition du fichier était mal exécutée, la ligne logpath était entrée deux fois… Après correction, on relance fail2ban et le problème est résolu.
![]()
Si vous avez sous la main une autre machine, vous pouvez tester de vous auto-bannir pour vérifier que le service est parfaitement fonctionnel. Après plusieurs essais de connexion, Fail2ban refuse la connexion depuis l’IP qui a été bannie. Ca fonctionne !
Pour récupérer l’IP bannie pour cet essai, vous pouvez lancer la commande :
sudo fail2ban-client unban 192.168.1.21
Il est aussi possible d’en bannir une manuellement avec la commande :
sudo fail2ban-client ban 192.168.1.21
Cela peut être pratique de configurer ainsi Fail2ban si vous repérez une IP aux agissements particuliers.
Maintenant que le serveur est un peu plus résistant aux attaques, on va pouvoir l’ouvrir sur Internet
Pour pouvoir accéder à l’ensemble des services qui seront mis à disposition sur le serveur, nous allons le rendre accessible sur internet. Pour cela nous allons d’abord utiliser une IP avant de simplifier la démarche en utilisant un nom de domaine.
L’ensemble de ces manipulations est beaucoup plus simple si votre fournisseur propose une adresse IP fixe. Certains fournisseurs d’accès proposent cela par défaut comme Bouygues. Free demande une petite manipulation détaillée ici. Chez SFR et Orange, c’est une option. Si votre opérateur ne propose pas cette option il faudra utiliser un service tiers. Un autre serveur en ligne qui fera le lien vers votre machine. Plusieurs sociétés proposent cela comme Cloudflare ou no-ip.com.
![]()
Pour comprendre ce qu’il se passe il faut s’intéresser à la manière dont fonctionne cette requête HTTP particulière
Ci-dessus vous pouvez voir le principe de fonctionnement de notre recherche de serveur en ligne de manière très simplifiée. Même si des administrateurs système vont surement trouver que le schéma est trop simpliste, on comprend ici ce qu’il se produit lors d’une requête en ligne de ce type.
Depuis un navigateur, un internaute appelle la page garage.mondomaine.com. Un serveur de DNS va répondre à cet appel parce que cette adresse pointera chez lui. Il répondre au navigateur en lui disant d’aller voir une adresse IP précise, ici : 1.2.3.4 pour l’exemple. Cette adresse ne correspond pas à votre serveur directement mais plus globalement à votre point de destination, la ligne tout entière de votre fournisseur d’accès. Avec cette information en mémoire, le navigateur change donc de destination et va toquer à la porte de l’IP 1.2.3.4. Et donc de votre box internet. Il se présente comme un navigateur et interroge sur le serveur pour savoir où trouver la page correspondant à garage.mondomaine.com. Au passage, il montre patte blanche en indiquant qu’il propose une liaison sécurisée de type HTTPS sur le port 443.
La Box internet va interroger ses règles de transmission de portgénéralement indentifiées dans ses réglages comme du « port forwarding ». Si une règle s’applique à cette requête, alors elle exécutera le transfert des données. Comme nous allons indiquer à la Box de transférer toutes les requêtes du port 443 vers le serveur que nous avons monté. Les informations en HTTP non sécurisées se feront via le port 80 qui sera également piloté par la Box.
Sur le serveur maison, il va falloir installer un outil baptisé « Caddy ». Une sorte de chef d’orchestre qui triera les requêtes de l’extérieur et les redirigera vers le bon service. On appelle cela un « Reverse proxy ». Caddy pilotera les différentes enquêtes vers des services intégrés dans une sorte de portefeuille de services piloté par un autre outil logiciel appelé « Docker ». Ce dernier fournira une réponse qui remontera ensuite de Caddy vers lme routeur puis du roteur au navigateur.
![]()
Imaginez que vous appellez un standard pour avoir en ligne Marcel Machin, le responsable réparation de la société Mongarage SARL (l’équivalent de votre serveur) au téléphone. Vous décrochez votre combiné, comme vous ne connaissez pas le numéro vous demandez un opérateur (Le serveur DNS), vous lui dites que vous voulez telle société, l’opérateur regarde dans son annuaure et vous met en ligne (indication de l’IP). Là vous tombez sur une personne qui décroche au standard (votre BOX), vous lui dites a qui vous voulez parler, elle vous passe l’atelier ou une personne décroche (Caddy) avant de gueuler « MARCEL, TELEPHONE » (Le service Docker voulu). Marcel répond « Allô, non pour demain c’est pas possible » et vous etes connecté.
Il va falloir monter ces services sur le serveur. Cela a l’air compliqué mais pas de panique. Avec un peu d’aide c’est à la portée de tout le monde. Voilà ce qu’il nous reste a faire :
- Configurer un nom de domaine et l’ensemble de ses sous-domaines pour indiquer notre ip fixe
- Configurer notre routeur pour activer le transfert des ports 443 et 80 vers notre serveur
- Installer Caddy pour faire office de reverse proxy
- Tester notre tout premier service (une page html toute simple)
Et nous verrons cela dans le prochain épisode qui ne devrait pas tarder.
A propos de Kevin :
Kevin est développeur et formateur indépendant php et spécialisé sur le CMS Drupal. Il aime bidouiller des infrastructures cloud mais aussi plus traditionnelles comme un bon vieux petit serveur dans son garage… Vous pouvez en savoir plus sur son travail sur le site kgaut.net. Il est par ailleurs présent sur Mastodon à l’adresse @Kgaut
Guide : protéger son serveur personnel Linux avec Fail2ban © MiniMachines.net. 2026