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.