Recherche de site Web

Comment sécuriser un serveur SSH avec SSHGuard : Un guide pratique


Votre guide incontournable pour défendre efficacement les serveurs SSH avec SSHGuard contre les attaques par force brute - découvrez comment !

SSH (Secure Shell) sert de point d'entrée essentiel pour votre serveur, offrant une méthode d'administration à distance puissante et cryptée. Cependant, sa sécurité n'est aussi forte que les mesures prises pour la protéger.

Entrez SSHGuard, un outil robuste conçu pour protéger votre serveur SSH contre les attaques par force brute et d'autres vulnérabilités courantes. Ce guide vous montrera les étapes pratiques à suivre pour l'implémenter, renforçant la sécurité de votre serveur et vous offrant une tranquillité d'esprit.

Mais avant d'entrer dans la partie pratique, éclaircissons un peu plus sur le logiciel lui-même.

Qu'est-ce que SSHGuard ?

SSHGuard est un outil de sécurité qui protège les serveurs des attaques par force brute, principalement celles visant les services SSH. Il fonctionne comme un système de prévention des intrusions basé sur les journaux, surveillant les journaux du serveur à la recherche de signes d'activité malveillante, tels que des tentatives de connexion échouées répétées.

Lorsque SSHGuard détecte un comportement suspect, il bloque automatiquement les adresses IP fautives en utilisant des règles de pare-feu.

De plus, il prend en charge plusieurs formats de journalisation et peut être intégré à divers backends de pare-feu, tels que UFW, firewalld, iptables, nftables, IPFW et pf, pour gérer le blocage et le déblocage de trafic potentiellement malveillant.

Oui, je sais. Cela pourrait vous rappeler ce que fait Fail2Ban (consultez notre guide pour plus de détails). Bien que les deux outils aient des similitudes, ils présentent également des différences clés. Alors, explorons-les brièvement pour vous aider à décider quel outil correspond le mieux à vos besoins.

SSHGuard contre Fail2Ban : différences clés

SSHGuard et Fail2Ban surveillent tous deux les fichiers journaux pour détecter des activités suspectes et prennent ensuite des mesures pour bloquer les adresses IP offensantes. Malgré leurs fonctionnalités similaires, voici cependant les différences entre eux :

Approche de surveillance:

  • SSHGuard surveille directement les fichiers journaux et peut interpréter les entrées de journal elles-mêmes sans nécessiter d'expressions régulières.
  • Fail2Ban, en revanche, s'appuie beaucoup sur les expressions régulières pour analyser les fichiers journaux et identifier les modèles de comportement abusif. Cela le rend très flexible et configurable, car il peut être adapté pour surveiller pratiquement n'importe quel service qui écrit dans un fichier journal.

Services par défaut surveillés:

  • SSHGuard est principalement conçu pour protéger les serveurs SSH, mais il prend en charge d'autres services comme les serveurs de messagerie et FTP.
  • Fail2Ban peut être configuré pour protéger une large gamme de services au-delà de SSH, y compris les serveurs web, les serveurs de messagerie, les serveurs de partage de fichiers, FTP, et plus encore.

Mise en œuvre et performance :

  • SSHGuard est écrit en C, ce qui pourrait offrir de meilleures performances en termes de vitesse et d'utilisation des ressources.
  • Fail2Ban est écrit en Python, ce qui peut le rendre légèrement plus lent mais aussi plus adaptable en raison des nombreuses bibliothèques de Python et de sa facilité de script.

Mécanismes de blocage:

  • SSHGuard utilise un mécanisme de blocage plus simple qui s'intègre directement avec des outils de pare-feu comme UFW, firewalld, iptables, pf, IPFW, etc.
  • Fail2Ban utilise principalement iptables mais peut être configuré pour fonctionner avec diverses autres actions, comme l'envoi d'emails, l'exécution de scripts personnalisés, ou l'intégration avec des paramètres de pare-feu plus complexes.

Facilité de configuration:

  • SSHGuard offre une configuration plus simple pour les utilisateurs principalement préoccupés par SSH et quelques autres services, nécessitant souvent moins de personnalisation.
  • Fail2Ban peut nécessiter une configuration plus détaillée pour mettre en place les expressions régulières et définir les règles et actions spécifiques pour différents services, mais cela permet également un contrôle et une personnalisation accrus.

Installer SSHGuard sur Linux

Voici comment installer SHHGuard, en fonction de votre distribution Linux.

Debian/Ubuntu/Linux Mint

sudo apt install sshguard

Fédération

sudo dnf install sshguard

Gardez à l'esprit que l'exécution de la commande ci-dessus installera également le package « sshguard-firewalld » puisque Firewalld est le pare-feu par défaut utilisé sur les systèmes Fedora. Si nécessaire, vous pouvez également installer les packages « sshguard-iptables » ou « sshguard-nftables » comme alternatives de pare-feu pour SSHGuard.

Activez et démarrez le service :

sudo systemctl enable --now sshguard.service

Alma Linux/Rocky Linux

Étant donné que le paquet SSHGuard se trouve dans le dépôt EPEL, ajoutez-le d'abord à votre système (si ce n'est pas déjà fait) et rafraîchissez l'index des paquets.

sudo dnf install epel-release
sudo dnf update

Vous pouvez ensuite installer SSHGuard en exécutant ce qui suit :

sudo dnf install sshguard

Tout comme avec Fedora, un paquet supplémentaire « sshguard-firewalld » sera installé comme backend par défaut pour l'utilisation de SSHGuard. Les deux autres options, « sshguard-iptables » et « sshguard-nftables » sont également disponibles.

Enfin, activez et démarrez le service :

sudo systemctl enable --now sshguard.service

Configurer SSHGuard

Le fichier « sshguard.conf » est l'endroit où vous configurez les paramètres pour SSHGuard afin de protéger votre serveur. Ce fichier vous permet de spécifier comment SSHGuard se comporte, ce qu'il surveille et comment il réagit face à des attaques potentielles.

Sur les systèmes basés sur Debian (Debian, Ubuntu, etc.), le fichier se trouve à :

/etc/sshguard/sshguard.conf

Sur les distributions basées sur RHEL telles qu'Alma Linux, Rocky Linux, Fedora, vous pouvez le trouver au chemin suivant :

/etc/sshguard.conf

C'est comme cela que cela apparaît par défaut dans Debian :

Fichier de configuration SSHGuard.

Voici une explication de ses options courantes :

  • BACKEND : Cette option spécifie le type de backend de pare-feu que SSHGuard doit utiliser pour bloquer les attaquants. Par exemple, vous pourriez voir des valeurs comme « sshg-fw-nft-sets, » « sshg-fw-firewalld, » « sshg-fw-iptables, » « sshg-fw-pf, » etc., selon le pare-feu de votre système.
  • LECTEUR DE JOURNAL: Spécifie la méthode utilisée par SSHGuard pour lire vos fichiers journaux. Cela détermine comment SSHGuard traite les entrées de journal pour détecter une activité malveillante.
  • SEUIL : C'est le nombre d'activités abusives (comme les tentatives de connexion échouées) depuis une seule adresse IP qui déclenche SSHGuard pour bloquer cette adresse. Fixer ce seuil plus bas signifie des interdictions plus rapides, mais faites attention à ne pas le régler trop bas, ce qui pourrait bloquer des utilisateurs légitimes qui se trompent en saisissant leur mot de passe.
  • BLOCK_TIME : Cela définit la durée (en secondes) pendant laquelle une adresse IP sera bloquée après avoir atteint le seuil d'abus, avec une configuration par défaut de deux minutes (120 secondes). Après ce délai, le blocage est levé, à moins que l'adresse IP ne déclenche un autre bloc.
  • DETECTION_TIME : Cela définit la période (en secondes) pendant laquelle les infractions répétées par la même adresse IP sont prises en compte pour atteindre le seuil de blocage. En gros, cela fixe la période pendant laquelle SSHGuard surveille les activités suspectes d'une adresse IP spécifique.
  • FICHIER_DE_WHITELIST: Le chemin complet vers le fichier dans lequel vous pouvez spécifier des adresses IP ou des plages qui ne devraient jamais être bloquées, peu importe leur comportement. Cela est utile pour s'assurer que vous ne vous bloquez pas accidentellement ou que vous ne bloquez pas des adresses IP de confiance.

Permettez-moi maintenant de vous montrer comment configurer SSHGuard, en fonction du pare-feu que vous utilisez.

Configuration de SSHGuard lors de l'utilisation de UFW/nftables

Tout d'abord, je veux commencer par une clarification importante. De nombreux guides mentionnent UFW comme un backend pour SSHGuard, ce qui n'est pas tout à fait vrai pour une simple raison - SSHGuard n'offre pas de backend UFW mais, en fait, un backend nftables.

UFW (Uncomplicated Firewall) est une interface conviviale (couche d'abstraction) pour gérer les règles de pare-feu iptables/nftables sur Linux en arrière-plan. C'est celle qui est utilisée par défaut dans Ubuntu.

Donc, pour configurer SSHGuard afin qu'il fonctionne avec cela, assurez-vous que l'option « BACKEND » contient « /usr/libexec/sshguard/sshg-fw-nft-sets » comme valeur.

Configuration de SSHGuard utilisant UFW/nftables.

Cependant, avant que SSHGuard puisse manipuler les règles UFW, vous devez vous assurer qu'UFW est configuré pour être géré par des applications externes comme SSHGuard. Cela implique d'ajouter des hooks pour SSHGuard dans la configuration d'UFW. Pour ce faire, éditez le fichier UFW "before.rules" :

sudo nano /etc/ufw/before.rules

Ajoutez les lignes suivantes après la section « autoriser tout sur loopback » pour créer une nouvelle chaîne pour SSHGuard :

Create a chain for SSHGuard
-A ufw-before-input -j SSHGUARD
-A ufw-before-output -j SSHGUARD
-A ufw-before-forward -j SSHGUARD

Configuration de SSHGuard utilisant UFW/nftables.

Enregistrez et quittez le fichier. Ensuite, redémarrez le service UFW.

sudo systemctl restart ufw

Si vous avez modifié la configuration de SSHGuard, redémarrez également son service.

sudo systemctl restart sshguard

C'est tout. SSHGuard est maintenant configuré pour protéger votre serveur contre les attaques par force brute SSH. Essayez de faire quelques connexions SSH incorrectes à votre serveur pour le tester. Après la troisième tentative échouée ("THRESHOLD=30"), SSHGuard bloquera votre connexion pendant deux minutes ("BLOCK_TIME=120").

Vous voulez vérifier quelles adresses ont été bloquées ? Le moyen le plus simple est de lister directement la table nftables de SSHGuard, qui contient une liste des adresses IP bloquées.

sudo nft list table sshguard

Listez les adresses IP bloquées par SSHGuard.

Vous pouvez également surveiller le fichier « /var/log/auth.log » pour voir les enregistrements des activités et actions de SSHGuard.

sudo tail -f /var/log/auth.log

Les activités et actions de SSHGuard sont également enregistrées dans le fichier journal.

Configuration de SSHGuard lors de l'utilisation d'iptables

Appelez-moi démodé (je ne vais pas contester car vous avez raison), mais je préfère utiliser SSHGuard avec un pare-feu iptables pour l'arrière-plan. Voici comment faire.

Tout d'abord, assurez-vous qu'SSHGuard est configuré pour utiliser iptables en vérifiant le fichier de configuration d'SSHGuard, qui doit contenir l'option « BACKEND » définie sur « /usr/libexec/sshguard/sshg-fw-iptables ».

sudo nano /etc/sshguard/sshguard.conf

Configuration de SSHGuard utilisant iptables pour le backend.

Bien sûr, si vous avez apporté des modifications à la configuration de SSHGuard, assurez-vous de le redémarrer :

sudo systemctl restart sshguard

Ensuite, créez une nouvelle chaîne iptables pour SSHGuard :

sudo iptables -N sshguard

Assurez-vous que tout le trafic SSH passe par la chaîne « sshguard » :

sudo iptables -A INPUT -p tcp --dport 22 -j sshguard

Pour rendre vos modifications permanentes (disponibles après un redémarrage), consultez ce guide ou suivez les commandes ci-dessous :

sudo apt install iptables-persistent
sudo iptables-save -f /etc/iptables/rules.v4

Pour voir la liste des adresses IP actuellement bloquées par SSHGuard, exécutez ce qui suit :

sudo iptables -L sshguard -n

Listez les adresses IP bloquées par le backend iptables de SSHGuard.

Vous pouvez également surveiller les actions en temps réel de SSHGuard en exécutant :

sudo journalctl -u sshguard -f

Actions de SSHGuard.

Configuration de SSHGuard lors de l'utilisation de firewalld

Firewalld est un outil de gestion de pare-feu pour Linux. Il est principalement utilisé dans les distributions basées sur RHEL comme Alma Linux, Rocky Linux et Fedora. L'outil prend en charge les zones de pare-feu, qui définissent le niveau de confiance des connexions ou des interfaces réseau. Pour en savoir plus à son sujet et comment l'utiliser, consultez notre guide détaillé, « Firewalld en exemples. » Maintenant, revenons au sujet.

Pour indiquer à SSHGuard d'utiliser firewalld comme backend, assurez-vous que l'option « BACKEND » dans le fichier « sshguard.conf » est définie sur « /usr/libexec/sshguard/sshg-fw-firewalld ».

sudo nano /etc/sshguard.conf

Configuration de SSHGuard utilisant firewalld pour le backend.

De plus, n'oubliez pas de redémarrer le service SSHGuard si vous avez modifié la configuration elle-même :

sudo systemctl restart sshguard

Les attaquants bloqués sont ajoutés à deux règles, nommées « sshguard4 » (pour les adresses IPv4) et « sshguard6 » (pour les adresses IPv6), respectivement, ajoutées à la zone par défaut de firewalld (« public »).

Nom des règles firewalld de SSHGuard.

Pour voir la liste des adresses IP actuellement bloquées par SSHGuard, exécutez ce qui suit :

sudo firewall-cmd --info-ipset=sshguard4

Listez les adresses IP bloquées par le backend firewalld de SSHGuard.

En conséquence, pour les adresses IPv6, la commande est :

sudo firewall-cmd --info-ipset=sshguard6

Enfin, vous pouvez surveiller les actions SSHGuard en temps réel en exécutant :

sudo journalctl -u sshguard -f

Cependant, si vous utilisez une zone de pare-feu différente, vous pouvez la configurer en suivant les instructions ci-dessous. Remplacez simplement "<nom-zone>" par le nom de votre zone spécifique.

sudo firewall-cmd --zone=<zone-name> --permanent --add-rich-rule="rule source ipset=sshguard4 drop"
sudo firewall-cmd --zone=<zone-name> --permanent --add-rich-rule="rule source ipset=sshguard6 drop"

Liste blanche des adresses IP

L'ajout d'adresses IP à la liste blanche dans SSHGuard vous permet de vous assurer que certaines adresses IP ne sont jamais bloquées, quelle que soit leur activité. Cela peut être important pour les IP que vous considérez comme fiables, comme les administrateurs système ou les processus automatisés qui peuvent avoir un accès SSH fréquent et légitime. Voici comment vous pouvez ajouter des adresses IP à la liste blanche dans SSHGuard.

Tout d'abord, assurez-vous que l'option « WHITELIST_FILE » dans le fichier « sshguard.conf » est active et non commentée.

L'option « WHITELIST_FILE » doit être activée.

L'emplacement du fichier contenant la liste des adresses autorisées peut varier en fonction de votre distribution Linux. Pour ceux qui utilisent des systèmes basés sur Debian comme Ubuntu, il se trouve à l'adresse :

/etc/sshguard/whitelist

Pour les distributions basées sur RHEL, telles qu'Alma, Rocky et Fedora :

/etc/sshguard.whitelist

Là, vous pouvez entrer les hôtes que vous ne voulez jamais voir bloqués par SSHGuard de trois manières différentes :

  • Une seule adresse IP
  • Une plage de réseau
  • Le nom de domaine complet (FQDN) d'un hôte

Par exemple :

192.168.0.34
192.168.0.0/24
myhost.domain.com

Alors, ouvrez le fichier avec votre éditeur de texte, entrez les adresses dont vous avez besoin, enregistrez le fichier et quittez. Bien sûr, après cela, n'oubliez pas de redémarrer le service SSHGuard.

sudo systemctl restart sshguard

Conclusion

Sécuriser votre serveur SSH en utilisant SSHGuard offre une couche de protection robuste contre les attaques par force brute et autres tentatives d'accès non autorisées. N'oubliez pas, la clé du maintien de la sécurité ne réside pas seulement dans la configuration initiale mais dans la surveillance continue et la mise à jour de vos configurations à mesure que de nouvelles menaces apparaissent.

Pour plus d'informations, visitez le site Web du projet ou consultez la documentation de SSHGuard.

Merci pour votre temps ! Si vous avez des questions, veuillez les laisser dans la section des commentaires ci-dessous.