Post

🛡️SSHGuard, outil pour protéger le serveur SSH (Secure Shell)

🛡️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
Firewall is active and enabled on system startup

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.

Cet article est sous licence CC BY 4.0 par l'auteur.