đĄïžSSHGuard, outil pour protĂ©ger le serveur SSH (Secure Shell)
SSHGuard, un outil robuste conçu pour protĂ©ger votre serveur SSH (Secure Shell) contre les attaques par force brute et dâautres vulnĂ©rabilitĂ©s courantes.
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, comme 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, pare-feu, iptables, nftables, IPFW et pf, pour gĂ©rer le blocage et le dĂ©blocage du trafic potentiellement malveillant.
SSHGuard vs Fail2Ban
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, par contre, 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 un large Ă©ventail 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 rendement :
- 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 un peu plus lent, mais aussi 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, pare-feu, iptables, pf, IPFW, etc.
- Fail2Ban utilise principalement iptables, mais peut ĂȘtre configurĂ© pour fonctionner avec diverses autres actions, comme lâenvoi de courriels, 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.
Linux Installation SSHGuard
Voici comment installer SHHGuard, en fonction de votre distribution Linux.
Debian/Ubuntu/Linux Mint
1
sudo apt install sshguard
Activez et démarrez le service :
1
sudo systemctl enable --now sshguard.service
Fedora
1
sudo dnf install sshguard
Gardez Ă lâesprit que lâexĂ©cution de la commande ci-dessus installera Ă©galement le paquet « 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 :
1
sudo systemctl enable --now sshguard.service
Alma Linux/Rocky Linux
Ătant donnĂ© que le paquet 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.
1
2
sudo dnf install epel-release
sudo dnf update
Vous pouvez ensuite installer SSHGuard en exécutant ce qui suit :
1
sudo dnf install sshguard
Comme avec Fedora, un paquet supplĂ©mentaire « sshguard-firewalld » sera installĂ© comme serveur principal 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 :
1
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Ă©agit 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 :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#### REQUIRED CONFIGURATION ####
# Full path to backend executable (required, no default)
BACKEND="/usr/libexec/sshguard/sshg-fw-nft-sets"
# Shell command that provides logs on standard output. (optional, no default)
# Example 1: ssh and sendmail from systemd journal:
LOGREADER="LANG=C journalctl -afb -p info -n1 -o cat SYSLOG_FACILITY=4 SYSLOG_FACILITY=10"
#### OPTIONS ####
# Block attackers when their cumulative attack score exceeds THRESHOLD.
# Most attacks have a score of 10. (optional, default 30)
THRESHOLD=30
# Block attackers for initially BLOCK_TIME seconds after exceeding THRESHOLD.
# Subsequent blocks increase by a factor of 1.5. (optional, default 120)
BLOCK_TIME=120
# Remember potential attackers for up to DETECTION_TIME seconds before
# resetting their score. (optional, default 1800)
DETECTION_TIME=1800
# IP addresses listed in the WHITELIST_FILE are considered to be
# friendlies and will never be blocked.
WHITELIST_FILE=/etc/sshguard/whitelist
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., selon le 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Ă© Ă moins que lâadresse IP dĂ©clenche un autre blocage.
- DĂTECTION_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.
- FILE_WHITELIST : 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 vous assurer que vous ne vous bloquez pas accidentellement 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
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 lâajout de crochets pour SSHGuard dans la configuration dâUFW. Pour ce faire, modifiez le fichier UFW « before.rules » :
1
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 :
1
2
3
4
5
# Create a chain for SSHGuard
:SSHGUARD - [0:0]
-A ufw-before-input -j SSHGUARD
-A ufw-before-output -j SSHGUARD
-A ufw-before-forward -j SSHGUARD
Sauvegardez et quittez le fichier. Ensuite, exécutez les commandes suivantes
1
2
3
sudo ufw disable
sudo ufw enable
sudo systemctl restart ufw
Si vous avez modifié la configuration de SSHGuard, redémarrez aussi son service.
1
sudo systemctl restart sshguard
SSHGuard est maintenant configuré pour protéger votre serveur contre les attaques SSH par force brute.
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, comme les administrateurs systĂšme ou les processus automatisĂ©s qui peuvent avoir 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.
1
2
3
# IP addresses listed in the WHITELIST_FILE are considered to be
# friendlies and will never be blocked.
WHITELIST_FILE=/etc/sshguard/whitelist
Lâemplacement du fichier avec la liste des adresses sur la liste blanche peut varier selon votre distribution Linux. Pour ceux qui utilisent des systĂšmes basĂ©s sur Debian comme Ubuntu, il se trouve Ă lâadresse :
1
/etc/sshguard/whitelist
Pour les systÚmes basés sur RHEL, comme 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 de réseaux
- Le nom de domaine complet (FQDN) dâun hĂŽte
Ajouter
1
2
3
192.168.0.0/24
192.168.10.0/24
2a01:e0a:95a:e2f0::/64
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.
1
sudo systemctl restart sshguard
Tests
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.
1
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.
1
sudo tail -f /var/log/auth.log
Conclusion
La sĂ©curisation de votre serveur SSH Ă lâaide de 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 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.



