Comment sécuriser votre serveur Linux avec fail2ban

Comment sécuriser votre serveur Linux avec fail2ban

Une fenêtre de terminal stylisée fonctionnant sur un ordinateur portable Linux de style Ubuntu.
Fatmawati Achmad Zaenuri / Shutterstock

Avec fail2ban, votre ordinateur Linux bloque automatiquement les adresses IP qui ont trop d'échecs de connexion. C’est une sécurité autorégulée! Nous allons vous montrer comment l'utiliser.

Sécurité Sécurité Sécurité

La duchesse de Windsor, Wallis Simpson, a dit une fois: «On ne peut jamais être trop riche ou trop maigre.» Nous avons mis à jour cela pour notre monde moderne et interconnecté: vous ne pouvez jamais être trop prudent ou trop sécurisé.

Si votre ordinateur accepte les demandes de connexion entrantes, telles que les connexions Secure Shell (SSH), ou agit comme un serveur Web ou de messagerie, vous devez le protéger contre les attaques par force brute et les devineurs de mots de passe.

Pour ce faire, vous devez surveiller les demandes de connexion qui ne parviennent pas à accéder à un compte. S'ils échouent à plusieurs reprises à s'authentifier dans un court laps de temps, ils devraient être interdits de faire d'autres tentatives.

La seule façon d'y parvenir pratiquement est d'automatiser l'ensemble du processus. Avec un peu de configuration simple, fail2ban gérera la surveillance, l'interdiction et la suppression de l'interdiction pour vous.

fail2ban s'intègre au pare-feu Linux iptables. Il applique les interdictions sur les adresses IP suspectes en ajoutant des règles au pare-feu. Pour garder cette explication épurée, nous utilisons iptables avec un ensemble de règles vide.

Bien sûr, si vous êtes préoccupé par la sécurité, vous avez probablement un pare-feu configuré avec un ensemble de règles bien rempli. fail2ban ajoute et supprime uniquement ses propres règles: vos fonctions de pare-feu habituelles resteront intactes.

Nous pouvons voir notre ensemble de règles vide en utilisant cette commande:

sudo iptables -L

sudo iptables -L dans une fenêtre de terminal.

EN RELATION: Guide du débutant sur iptables, le pare-feu Linux

Installation de fail2ban

L'installation fail2ban est simple sur toutes les distributions que nous avons utilisées pour rechercher cet article. Sur Ubuntu 20.04, la commande est la suivante:

sudo apt-get install fail2ban

sudo apt-get install fail2ban dans une fenêtre de terminal.

Sur Fedora 32, tapez:

sudo dnf install fail2ban

sudo dnf installe fail2ban dans une fenêtre de terminal.

Sur Manjaro 20.0.1, nous avons utilisé pacman:

sudo pacman -Sy fail2ban

sudo pacman -Sy fail2ban dans une fenêtre de terminal.

Configuration de fail2ban

le fail2ban l'installation contient un fichier de configuration par défaut appelé jail.conf. Ce fichier est écrasé lorsque fail2ban est mis à niveau, nous perdrons donc nos modifications si nous personnalisons ce fichier.

Au lieu de cela, nous allons copier le fichier jail.conf dans un fichier appelé jail.local. En plaçant nos modifications de configuration dans jail.local, elles persisteront à travers les mises à niveau. Les deux fichiers sont lus automatiquement par fail2ban.

Voici comment copier le fichier:

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local dans une fenêtre de terminal.

Ouvrez maintenant le fichier dans votre éditeur préféré. Nous allons utiliser gedit:

sudo gedit /etc/fail2ban/jail.local

Nous allons rechercher deux sections dans le fichier: (DEFAULT) et (sshd). Attention cependant à trouver les sections réelles. Ces étiquettes apparaissent également en haut dans une section qui les décrit, mais ce n'est pas ce que nous voulons.

/etc/fail2ban/jail.local ouvert dans une fenêtre gedit. "width =" 646 "height =" 502 "src =" / pagespeed_static / 1.JiBnMqyl6S.gif "onload =" pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this); " onerror = "this.onerror = null; pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this);

Vous trouverez la section (PAR DÉFAUT) quelque part autour de la ligne 40. C'est une longue section avec beaucoup de commentaires et d'explications.

/etc/fail2ban/jail.local ouvert dans une fenêtre gedit et défilé jusqu'à la ligne 89. "width =" 646 "height =" 428 "src =" / pagespeed_static / 1.JiBnMqyl6S.gif "onload =" pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this); "onerror =" this.onerror = null; pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this);

Faites défiler la page jusqu'à la ligne 90 et vous trouverez les quatre paramètres suivants que vous devez connaître:

  • ignoreip: Une liste blanche d'adresses IP qui ne seront jamais interdites. Ils ont une carte permanente Get Out of Jail Free. L'adresse IP localhost (127.0.0.1) figure dans la liste par défaut, avec son équivalent IPv6 (::1). S'il existe d'autres adresses IP dont vous savez qu'elles ne devraient jamais être interdites, ajoutez-les à cette liste et laissez un espace entre chacune.
  • bantime: La durée pendant laquelle une adresse IP est interdite (le «m» signifie minutes). Si vous saisissez une valeur sans «m» ou «h» (pendant des heures), elle sera traitée comme des secondes. Une valeur de -1 interdira définitivement une adresse IP. Faites très attention à ne pas vous enfermer définitivement.
  • trouver le temps: Le délai dans lequel trop de tentatives de connexion ont échoué entraînera l'interdiction d'une adresse IP.
  • maxretry: La valeur de «trop de tentatives infructueuses».

Si une connexion à partir de la même adresse IP maxretry échec des tentatives de connexion dans le findtime période, ils sont interdits pour la durée du bantime. Les seules exceptions sont les adresses IP dans le ignoreip liste.

fail2ban met les adresses IP en prison pour une période de temps définie. fail2ban prend en charge de nombreuses prisons différentes, et chacune représente les paramètres appliqués à un seul type de connexion. Cela vous permet d'avoir différents paramètres pour différents types de connexion. Ou vous pouvez avoir fail2ban surveiller uniquement un ensemble choisi de types de connexion.

Vous l'avez peut-être deviné à partir du nom de la section (DEFAULT), mais les paramètres que nous avons examinés sont les valeurs par défaut. Voyons maintenant les paramètres de la prison SSH.

EN RELATION: Comment éditer graphiquement des fichiers texte sous Linux avec gedit

Configurer une prison

Les prisons vous permettent de déplacer des types de connexion dans et hors de fail2ban's surveillance. Si les paramètres par défaut ne correspondent pas à ceux que vous souhaitez appliquer à la prison, vous pouvez définir des valeurs spécifiques pour bantime, findtime, et maxretry.

Faites défiler vers le bas jusqu'à la ligne 280 et vous verrez la section (sshd).

/etc/fail2ban/jail.local ouvert dans une fenêtre gedit et défilé jusqu'à la ligne 280. "width =" 646 "height =" 302 "src =" / pagespeed_static / 1.JiBnMqyl6S.gif "onload =" pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this); "onerror =" this.onerror = null; pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this);

C'est là que vous pouvez définir des valeurs pour la prison de connexion SSH. Pour inclure cette prison dans la surveillance et l'interdiction, nous devons taper la ligne suivante:

enabled = true

Nous tapons également cette ligne:

maxretry = 3

Le paramètre par défaut était cinq, mais nous voulons être plus prudents avec les connexions SSH. Nous l'avons réduit à trois, puis avons enregistré et fermé le fichier.

Nous avons ajouté cette prison à fail2ban's surveillance et ignoré l'un des paramètres par défaut. Une prison peut utiliser une combinaison de paramètres par défaut et spécifiques à la prison.

Activation de fail2ban

Jusqu'à présent, nous avons installé fail2ban et l'a configuré. Maintenant, nous devons l'activer en tant que service de démarrage automatique. Ensuite, nous devons le tester pour nous assurer qu'il fonctionne comme prévu.

Autoriser fail2ban en tant que service, nous utilisons le systemctl commander:

sudo systemctl enable fail2ban

Nous l'utilisons également pour démarrer le service:

sudo systemctl start fail2ban

sudo systemctl active fail2ban dans une fenêtre de terminal. "width =" 646 "height =" 147 "src =" / pagespeed_static / 1.JiBnMqyl6S.gif "onload =" pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this); "onerror =" this. onerror = null; pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this);

Nous pouvons vérifier l'état du service en utilisant systemctl, aussi:

sudo systemctl status fail2ban.service

sudo systemctl status fail2ban.service dans une fenêtre de terminal. "width =" 646 "height =" 322 "src =" / pagespeed_static / 1.JiBnMqyl6S.gif "onload =" pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this); "onerror =" this.onerror = null; pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this);

Tout a l'air bien – nous avons le feu vert, donc tout va bien.

Voyons si fail2ban accepte:

sudo fail2ban-client status

état sudo fail2ban-client dans une fenêtre de terminal. "width =" 646 "height =" 132 "src =" / pagespeed_static / 1.JiBnMqyl6S.gif "onload =" pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this); "onerror =" this .onerror = null; pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this);

Cela reflète ce que nous avons mis en place. Nous avons activé une seule prison, nommée (sshd). Si nous incluons le nom de la prison avec notre commande précédente, nous pouvons l'examiner plus en profondeur:

sudo fail2ban-client status sshd

sudo fail2ban-client status sshd dans une fenêtre de terminal. "width =" 646 "height =" 247 "src =" / pagespeed_static / 1.JiBnMqyl6S.gif "onload =" pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this); "onerror =" this.onerror = null; pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this);

Ceci répertorie le nombre d'échecs et les adresses IP interdites. Bien sûr, toutes les statistiques sont nulles pour le moment.

Tester notre prison

Sur un autre ordinateur, nous ferons une demande de connexion SSH à notre machine de test et saisirons volontairement le mot de passe. Vous obtenez trois tentatives pour obtenir le bon mot de passe à chaque tentative de connexion.

le maxretry La valeur se déclenchera après trois tentatives de connexion infructueuses, pas trois tentatives de mot de passe ayant échoué. Nous devons donc taper un mot de passe incorrect trois fois pour échouer une tentative de connexion.

Nous essaierons ensuite une nouvelle connexion et saisirons le mot de passe trois fois de manière incorrecte. La première tentative de mot de passe incorrect de la troisième demande de connexion doit se déclencher fail2ban.

ssh dave@ubtuntu20-04.local dans une fenêtre de terminal avec de nombreuses tentatives de mot de passe ayant échoué. "width =" 646 "height =" 367 "src =" / pagespeed_static / 1.JiBnMqyl6S.gif "onload =" pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon ( this); "onerror =" this.onerror = null; pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this);

Après le premier mot de passe incorrect lors de la troisième demande de connexion, nous ne recevons pas de réponse de la machine distante. Nous n’obtenons aucune explication; nous obtenons juste l'épaule froide.

Vous devez appuyer sur Ctrl + C pour revenir à l'invite de commande. Si nous réessayons, nous obtiendrons une réponse différente:

ssh dave@ubuntu20-04.local

ssh dave@ubuntu20-04.local dans une fenêtre de terminal avec connexion refusée. "width =" 646 "height =" 97 "src =" / pagespeed_static / 1.JiBnMqyl6S.gif "onload =" pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this ); "onerror =" this.onerror = null; pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this);

Auparavant, le message d'erreur était «Autorisation refusée». Cette fois, la connexion est carrément refusée. Nous sommes persona non grata. Nous avons été bannis.

Examinons à nouveau les détails de la prison (sshd):

sudo fail2ban-client status sshd

sudo fail2ban-client status sshd dans une fenêtre de terminal. "width =" 646 "height =" 247 "src =" / pagespeed_static / 1.JiBnMqyl6S.gif "onload =" pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this); "onerror =" this.onerror = null; pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this);

Il y a eu trois échecs et une adresse IP (192.168.4.25) a été interdite.

Comme nous l'avons mentionné précédemment, fail2ban applique les interdictions en ajoutant des règles à l'ensemble de règles du pare-feu. Examinons à nouveau le jeu de règles (il était vide auparavant):

sudo iptables -L

sudo iptables -L dans une fenêtre de terminal. "width =" 646 "height =" 367 "src =" / pagespeed_static / 1.JiBnMqyl6S.gif "onload =" pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this); "onerror =" this. onerror = null; pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this);

Une règle a été ajoutée à la politique INPUT, envoyant le trafic SSH au f2b-sshd chaîne. La règle dans le f2b-sshd la chaîne rejette les connexions SSH à partir de 192.168.4.25. Nous n'avons pas modifié le paramètre par défaut pour bantime, donc, dans 10 minutes, cette adresse IP sera interdite et pourra effectuer de nouvelles demandes de connexion.

Si vous définissez une durée d'interdiction plus longue (comme plusieurs heures), mais souhaitez autoriser une adresse IP à effectuer une autre demande de connexion plus tôt, vous pouvez la libérer plus tôt.

Pour cela, nous tapons ce qui suit:

sudo fail2ban-client set sshd unbanip 192.168.5.25

sudo fail2ban-client a défini sshd unbanip 192.168.5.25 dans une fenêtre de terminal.

Sur notre ordinateur distant, si nous faisons une autre demande de connexion SSH et saisissons le mot de passe correct, nous serons autorisés à nous connecter:

ssh dave@ubuntu20-04.local

ssh dave@ubuntu20-04.local dans une fenêtre de terminal. "width =" 646 "height =" 322 "src =" / pagespeed_static / 1.JiBnMqyl6S.gif "onload =" pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this); "onerror = "this.onerror = null; pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this);

Simple et efficace

Plus simple est généralement meilleur, et fail2ban est une solution élégante à un problème délicat. Il prend très peu de configuration et n'impose pratiquement aucune surcharge opérationnelle à vous ou à votre ordinateur.

Articles similaires

Petits poissons dans un grand étang –

Petits poissons dans un grand étang –

Samsung confirme le déploiement du Galaxy S20 et One UI 3 en cours en Europe

Samsung confirme le déploiement du Galaxy S20 et One UI 3 en cours en Europe

Surprise sur le lancement du matériel Apple pour la semaine prochaine – que pourrait-il y avoir en magasin?

Surprise sur le lancement du matériel Apple pour la semaine prochaine – que pourrait-il y avoir en magasin?

Comment configurer un système de son surround

Comment configurer un système de son surround

No Comment

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Articles récents