Recherche de site Web

Comment bloquer les attaques SSH par force brute à l’aide de SSHGUARD


SSHGuard est un démon open source qui protège les hôtes contre les attaques par force brute. Il y parvient en surveillant et en agrégeant les journaux système, en détectant les attaques et en bloquant les attaquants à l’aide de l’un des backends de pare-feu Linux : iptables, FirewallD, pf et ipfw.

Initialement conçu pour fournir une couche supplémentaire de protection pour le service OpenSSH, SSHGuard protège également un large éventail de services tels que Vsftpd et Postfix. Il reconnaît plusieurs formats de journaux, notamment Syslog, Syslog-ng et les fichiers journaux bruts.

SSHGuard est assez similaire à Fail2ban, sauf qu’il est écrit en C (Fail2ban est écrit en Python), qu’il est plus léger et qu’il offre moins de fonctionnalités.

Dans ce guide, nous allons vous montrer comment vous pouvez installer et configurer SSHGuard pour bloquer les attaques par force brute SSH dans votre serveur Linux.

Étape 1 : Installer SSHGuard sur Linux

Nous commençons par l’installation de SSHGuard sur Linux.

Installer SSHGuard sur Debian/Ubuntu

Tout d’abord, mettez à jour les listes de paquets, puis installez SSHGuard à partir des dépôts par défaut à l’aide du gestionnaire de paquets apt.

$ sudo apt update
sudo apt install sshguard

Une fois installé, le service SSHGuard démarre automatiquement, et vous pouvez le vérifier à l’aide de la commande :

$ sudo systemctl status sshguard

Installer SSHGuard sur les systèmes RHEL

Pour les distributions basées sur RHEL telles que CentOS, Rocky et AlmaLinux, commencez par installer le référentiel EPEL comme fourni dans la commande ci-dessous.

$ sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
OR
sudo dnf install epel-release

Avec EPEL en place, allez-y et installez SSHGuard à l’aide du gestionnaire de paquets dnf.

$ sudo dnf install sshguard 

Une fois installé, démarrez et configurez SSHGuard pour qu’il démarre au démarrage ou au redémarrage du système.

$ sudo systemctl start sshguard
sudo systemctl enable sshguard

Assurez-vous de vérifier que SSHGuard s’exécute comme prévu.

$ sudo systemctl status sshguard

Étape 2 : Configuration de SSHGuard sous Linux

SSHGuard surveille activement les fichiers journaux /var/log/auth.log, /var/log/secure systemd et syslog-ng à la recherche d’échecs de tentatives de connexion.

Pour chaque tentative de connexion infructueuse, l’hôte distant est banni pendant une durée limitée qui, par défaut, est fixée à 120 secondes. Par la suite, le temps de bannissement est multiplié par 1,5 à chaque tentative de connexion successivement échouée.

L’heure à laquelle les hôtes incriminés sont bannis, en plus d’autres paramètres, est spécifiée dans le fichier sshguard.conf. Vous pouvez accéder au fichier de configuration à l’aide de l’éditeur vim comme indiqué.

$ sudo vim /etc/sshguard/sshguard.conf

Sur les distributions basées sur RHEL, le fichier de configuration se trouve dans le chemin suivant.

$ sudo vim /etc/sshguard.conf

Voici un exemple du fichier de configuration lorsqu’il est consulté à partir d’Ubuntu/Debian.

Concentrons-nous sur l’option principale.

  • La directive BACKEND pointe vers le chemin complet de l’exécutable backend. Dans cet exemple, nous voyons que IPtables est défini comme backend de pare-feu par défaut.
  • La directive THRESHOLD bloque les attaquants lorsque leur score d’attaque dépasse la valeur spécifiée.
  • L’option BLOCK_TIME est le nombre de secondes pendant lesquelles un attaquant est bloqué après chaque tentative de connexion infructueuse. Par défaut, ce chiffre est fixé à 120 après la première tentative. Cela augmente à chaque tentative de connexion infructueuse.
  • L’option DETECTION_TIME fait référence au temps en secondes pendant lequel l’attaquant est enregistré ou mémorisé par le système avant que son score ne soit réinitialisé.
  • L’option WHITELIST_file pointer vers le chemin complet du fichier de liste blanche qui contient des hôtes qui ne sont pas censés être sur liste noire./li>

Étape 3 : Configurer SSHGuard pour bloquer les attaques SSH par force brute

Pour parer aux attaques par force brute, vous devez configurer les pare-feu suivants pour qu’ils fonctionnent avec sshguard.

Bloquer les attaques SSH à l’aide d’UFW

Si UFW est installé et activé sur votre système Ubuntu/Debian, modifiez le fichier /etc/ufw/before.rules.

$ sudo vim etc/ufw/before.rules

Ajoutez les lignes suivantes juste après la section Autoriser tout sur le bouclage.

# allow all on loopback
-A ufw-before-input -i lo -j ACCEPT
-A ufw-before-output -o lo -j ACCEPT

hand off control for sshd to sshguard
:sshguard - [0:0]
-A ufw-before-input -p tcp --dport 22 -j sshguard

Enregistrez le fichier et redémarrez UFW.

$ sudo systemctl restart ufw

Essayez maintenant de vous connecter au serveur à partir d’un autre système avec des informations d’identification incorrectes et notez que vous serez bloqué pendant 120 secondes après l’échec de la première tentative de connexion.

Vous pouvez le vérifier en consultant le fichier journal auth.log.

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

Après l’échec de la prochaine tentative de journalisation, la durée du blocage passe à 240 secondes, puis à 480 secondes, puis à 960 secondes, et ainsi de suite.

Bloquer les attaques SSH à l’aide de Firewalld

Si vous exécutez firewalld, assurez-vous qu’il est configuré et activé. Exécutez ensuite la commande suivante pour activer sshguard sur votre zone préférée.

$ sudo firewall-cmd --permanent --zone=public --add-rich-rule="rule source ipset=sshguard4 drop"

Pour appliquer les modifications, rechargez Firewalld et sshguard.

$ sudo firewall-cmd --reload
sudo systemctl restart sshguard

Vérifiez ensuite la règle comme suit :

$ sudo firewall-cmd —-info-ipset=sshguard4

Bloquer les attaques SSH à l’aide d’iptables

Si vous utilisez toujours Iptables, commencez par créer une nouvelle règle de dérivation pour sshguard dans Iptables afin de commencer à bloquer les méchants.

# iptables -N sshguard

Ensuite, mettez à jour la chaîne INPUT pour diriger le trafic vers sshguard et bloquer tout le trafic provenant de parties malveillantes.

# iptables -A INPUT -j sshguard

Pour bloquer des ports spécifiques tels que SSH, POP et IMAP contre les abus, exécutez la commande :

# iptables -A INPUT -m multiport -p tcp --destination-ports 22,110,143 -j sshguard

Enfin, conservez la règle pour que les modifications entrent en vigueur.

# iptables-save > /etc/iptables/iptables.rules

Étape 4 : Comment mettre en liste blanche les hôtes bloqués SSH

Pour mettre un hôte bloqué sur liste blanche, il suffit de spécifier son nom d’hôte ou son adresse IP dans le fichier de liste blanche qui se trouve dans :

/etc/sshguard/whitelist - Ubuntu/Debian 
/etc/sshguard.whitelist - RHEL-based distros

Par la suite, assurez-vous de redémarrer le démon sshguard et le backend du pare-feu pour que les modifications s’appliquent.

Dans ce guide, nous avons montré comment vous pouvez bloquer les attaques SSH Bruteforce à l’aide du démon SSHGuard sur les serveurs Linux. Vos commentaires sont les bienvenus.

Articles connexes: