Comment sécuriser le 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 critique à votre serveur, offrant une méthode puissante et cryptée d'administration à distance. Cependant, sa sécurité dépend des mesures prises pour le 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 pour le mettre en œuvre, améliorant ainsi la sécurité de votre serveur et vous procurant une tranquillité d'esprit.
Mais avant de passer à la partie pratique, faisons un peu plus la lumière 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 ciblant 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 infructueuses répétées.
Lorsque SSHGuard détecte un tel comportement suspect, il bloque automatiquement les adresses IP incriminées à l'aide de 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 du 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 présentent 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 vs Fail2Ban : principales différences
SSHGuard et Fail2Ban surveillent tous deux les fichiers journaux à la recherche d'activités suspectes, puis prennent des mesures pour bloquer les adresses IP incriminées. 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 du journal elles-mêmes sans nécessiter d'expressions régulières.
- Fail2Ban, en revanche, s'appuie fortement sur des 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 prend en charge d'autres services tels que les serveurs de messagerie et FTP.
- Fail2Ban peut être configuré pour protéger une large gamme de services au-delà de SSH, notamment les serveurs Web, les serveurs de messagerie, les serveurs de partage de fichiers, FTP, etc.
Mise en œuvre et performances :
- 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 pourrait le rendre légèrement plus lent mais également plus adaptable grâce aux bibliothèques étendues de Python et à la facilité de création de scripts.
Mécanismes de blocage :
- SSHGuard utilise un mécanisme de blocage plus simple qui s'intègre directement aux outils de pare-feu tels que UFW, firewalld, iptables, pf, IPFW, etc.
- Fail2Ban utilise principalement iptables mais peut être configuré pour fonctionner avec diverses autres actions, comme l'envoi d'e-mails, 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 concernés par SSH et quelques autres services, nécessitant souvent moins de personnalisation.
- Fail2Ban peut nécessiter une configuration plus détaillée pour configurer les expressions régulières et définir les règles et actions spécifiques pour différents services, mais cela permet également un meilleur contrôle et une plus grande personnalisation.
Installer SSHGuard sous Linux
Vous trouverez ci-dessous comment installer SHHGuard, en fonction de votre distribution Linux.
Debian/Ubuntu/Linux Mint
sudo apt install sshguard
Feutre
sudo dnf install sshguard
Gardez à l'esprit que l'exécution de la commande ci-dessus installera également le package « sshguard-firewalld » depuis 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 backends de pare-feu alternatifs pour SSHGuard.
Activez et démarrez le service :
sudo systemctl enable --now sshguard.service
Alma Linux/Rocky Linux
Étant donné que le package SSHGuard se trouve dans le référentiel EPEL, ajoutez-le d'abord à votre système (si ce n'est pas déjà fait) et actualisez l'index du package.
sudo dnf install epel-release
sudo dnf update
Vous pouvez ensuite installer SSHGuard en exécutant ce qui suit :
sudo dnf install sshguard
Comme avec Fedora, un package 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 de SSHGuard pour protéger votre serveur. Ce fichier vous permet de spécifier comment SSHGuard se comporte, ce qu'il surveille et comment il répond aux attaques potentielles.
Sur les systèmes basés sur Debian (Debian, Ubuntu, etc.), le fichier se trouve à l'emplacement :
/etc/sshguard/sshguard.conf
Sur les distributions basées sur RHEL telles que Alma Linux, Rocky Linux, Fedora, vous pouvez le trouver sur le chemin suivant :
/etc/sshguard.conf
Voici à quoi cela ressemble par défaut dans Debian :
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 pouvez voir des valeurs telles que « sshg-fw-nft-sets », « sshg-fw-firewalld », « sshg-fw-iptables », « sshg-fw-pf », etc., en fonction du pare-feu de votre système.
- LOGREADER : spécifie la méthode utilisée par SSHGuard pour lire vos fichiers journaux. Il détermine comment SSHGuard traite les entrées du journal pour détecter les activités malveillantes.
- SEUIL : il s'agit du nombre d'activités abusives (comme des tentatives de connexion infructueuses) à partir d'une seule adresse IP qui déclenchent le blocage de cette adresse par SSHGuard. Un réglage plus bas signifie des interdictions plus rapides, mais veillez à ne pas le régler trop bas, ce qui pourrait bloquer les utilisateurs légitimes qui saisissent mal leur mot de passe.
- BLOCK_TIME : ceci définit la durée pendant laquelle (en secondes) une adresse IP sera bloquée après avoir atteint le seuil d'abus, avec le paramètre par défaut de deux minutes (120 secondes). Passé ce délai, le blocage est levé sauf si l'adresse IP déclenche un autre blocage.
- 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. Essentiellement, il définit la période pendant laquelle SSHGuard assure le suivi des activités suspectes à partir d'une adresse IP spécifique.
- WHITELIST_FILE : chemin complet du fichier dans lequel vous pouvez spécifier des adresses IP ou des plages qui ne doivent jamais être bloquées, quel que soit leur comportement. Ceci est utile pour garantir que vous ne bloquez pas accidentellement vous-même ou des adresses IP fiables.
Laissez-moi maintenant vous montrer comment configurer SSHGuard, en fonction du pare-feu que vous utilisez.
Configuration de SSHGuard lors de l'utilisation d'UFW/nftables
Tout d’abord, je veux commencer par une précision importante. De nombreux guides répertorient UFW comme backend pour SSHGuard, ce qui n'est pas tout à fait vrai pour une raison simple : SSHGuard ne propose pas de backend UFW mais, en fait, un nftables.
UFW (Uncomplicated Firewall) est une interface simplement conviviale (couche d'abstraction) pour gérer les règles de pare-feu iptables/nftables sous Linux sous le capot. C'est celui utilisé par défaut dans Ubuntu.
Donc, pour configurer SSHGuard pour qu'il fonctionne avec, assurez-vous que l'option « BACKEND » contient « /usr/libexec/sshguard/sshg-fw-nft-sets » comme paramètre. valeur.
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 telles que SSHGuard. Cela implique l’ajout de 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 « allow all on 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
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 ça. SSHGuard est désormais configuré pour protéger votre serveur contre les attaques SSH par force brute. Essayez d'établir quelques connexions SSH incorrectes à votre serveur pour le tester. Après la troisième tentative infructueuse (« 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 SSHGuard nftables, qui contient une liste d'adresses IP bloquées.
sudo nft list table sshguard
Vous pouvez également surveiller le fichier « /var/log/auth.log » pour afficher les enregistrements des activités et actions de SSHGuard.
sudo tail -f /var/log/auth.log
Configuration de SSHGuard lors de l'utilisation d'iptables
Appelez-moi démodé (je ne discuterai pas parce que vous avez raison), mais je préfère utiliser SSHGuard avec un pare-feu iptables pour le backend. Voici comment procéder.
Tout d'abord, assurez-vous que SSHGuard est configuré pour utiliser iptables en vérifiant le fichier de configuration de SSHGuard, qui doit contenir l'option « BACKEND » définie sur « /usr/libexec/sshguard/sshg-fw-iptables. .”
sudo nano /etc/sshguard/sshguard.conf
Bien entendu, 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 afficher la liste des adresses IP actuellement bloquées par SSHGuard, exécutez ce qui suit :
sudo iptables -L sshguard -n
Vous pouvez également surveiller les actions SSHGuard en temps réel en exécutant :
sudo journalctl -u sshguard -f
Configuration de SSHGuard lors de l'utilisation de pare-feu
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 interfaces réseau. Pour en savoir plus et comment l'utiliser, consultez notre guide détaillé, « Firewalld dans les exemples ». Maintenant, revenons au sujet.
Pour indiquer à SSHGuard d'utiliser le pare-feu 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
De plus, n'oubliez pas de redémarrer le service SSHGuard si vous avez apporté des modifications à la configuration elle-même :
sudo systemctl restart sshguard
Les attaquants bloqués sont ajoutés à deux règles, nommées respectivement « sshguard4 » (pour les adresses IPv4) et « sshguard6 » (pour les adresses IPv6), ajoutées à la zone pare-feu par défaut ( « public »).
Pour afficher la liste des adresses IP actuellement bloquées par SSHGuard, exécutez ce qui suit :
sudo firewall-cmd --info-ipset=sshguard4
Ainsi, 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 autre zone de pare-feu, vous pouvez la configurer en suivant les instructions ci-dessous. Remplacez simplement «
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
La liste blanche des adresses IP 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 adresses IP en qui vous avez confiance, telles que les administrateurs système ou les processus automatisés qui peuvent disposer d'un accès SSH fréquent et légitime. Voici comment 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 n'est pas commentée.
L'emplacement du fichier avec la liste des adresses sur liste blanche 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 systèmes basés sur RHEL, tels qu'Alma, Rocky et Fedora :
/etc/sshguard.whitelist
Là, vous pouvez saisir les hôtes que vous souhaitez ne jamais voir bloqués par SSHGuard de trois manières différentes :
- Une seule adresse IP
- Une gamme 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
La sécurisation de votre serveur SSH à l'aide de SSHGuard fournit une couche de protection robuste contre les attaques par force brute et autres tentatives d'accès non autorisées. N'oubliez pas que la clé du maintien de la sécurité ne réside pas seulement dans la configuration initiale, mais également dans la surveillance et la mise à jour continues 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 commentaires ci-dessous.