L’auteur a sélectionné le Fonds de logiciels libres et open source pour recevoir un don dans le cadre du programme Écrire pour les Dons.
Introduction
Lorsque vous examinez les journaux d’authentification, vous pouvez voir plusieurs tentatives de connexion échouées à partir de différentes adresses IP. Ces tentatives de connexion échouées proviennent souvent d’un nœud sur un botnet qui scanne l’ensemble du web à la recherche de serveurs vulnérables avec des identifiants par défaut. Bien que la plupart des gens aient un mot de passe sécurisé ou des clés SSH empêchant les attaquants de se connecter à leur serveur, certains serveurs seront vulnérables à ce scan. Bien que vous ne puissiez pas arrêter ces attaques, vous pouvez les ralentir avec des tarpits.
Dans ce tutoriel, vous installerez et configurerez Endlessh, un tarpit qui envoie lentement une bannière infiniment longue à tout utilisateur tentant de se connecter. Vous configurerez également le service SSH pour qu’il s’exécute sur un port différent, ce qui rendra vos journaux d’authentification plus lisibles.
Après avoir terminé ce tutoriel, vous pourrez vous connecter à votre serveur sur un port non standard, tandis que tout bot scannant votre serveur constatera que son temps est gaspillé en frappant à une porte qui ne s’ouvrira jamais.
Prérequis
Pour compléter ce tutoriel, vous aurez besoin des éléments suivants :
- Un serveur Ubuntu avec un utilisateur non-root sudo, un pare-feu et au moins 1 Go de RAM, que vous pouvez configurer en suivant le Guide de Configuration Initiale du Serveur avec Ubuntu 22.04.
- Git installé sur votre serveur, ce que vous pouvez réaliser en suivant le Tutoriel d’Installation de Git.
Étape 1 – Déplacer SSH vers un Port Non-Standard
Dans cette étape, vous allez déplacer SSH vers un port non-standard afin de libérer un port pour Endlessh. Étant donné que les botnets n’ont pas de ressources infinies, ils scannent généralement uniquement le port SSH par défaut (22
). En déplaçant votre SSH vers un port non-standard, vous pouvez piéger le bot dans le piège d’Endlessh.
Pour commencer, sauvegardez votre fichier de configuration SSH depuis votre serveur avec la commande suivante :
Ce fichier peut être utilisé pour restaurer les paramètres d’origine en cas de problème ou si vous décidez de revenir à la configuration par défaut du port SSH.
Ouvrez le fichier de configuration SSH /etc/ssh/sshd_config
à l’aide de nano ou de votre éditeur de texte préféré :
Localisez la ligne #Port 22
. Décommentez cette ligne en supprimant le #
, puis changez le port pour un port inutilisé sur votre serveur :
...
Port 2222
...
Un exemple de port normalement inutilisé est 2222
. Vous pouvez choisir n’importe quel port pour vos connexions SSH récurrentes. Enregistrez et fermez le fichier.
Si votre serveur utilise un pare-feu, tel que ufw
, vous devrez autoriser le trafic vers le nouveau port :
Ensuite, redémarrez le service SSH :
Dans une session de terminal séparée, tentez de vous connecter à votre serveur en utilisant le nouveau port :
Avertissement : Ne fermez pas votre session SSH active tant que vous n’avez pas confirmé que vous pouvez utiliser SSH sur le nouveau port. Si vous ne pouvez pas vous connecter via le nouveau port, vous risquez de perdre l’accès à votre serveur en fermant la session. Si vous ne parvenez pas à vous connecter à votre serveur dans une session de terminal séparée, vous pouvez restaurer vos paramètres SSH d’origine en exécutant les commandes suivantes :
Si vous rencontrez d’autres problèmes, vérifiez que sshd
a redémarré avec succès et examinez les paramètres de votre pare-feu pour vous assurer que le port 2222
accepte le trafic TCP.
Une fois que vous avez vérifié que vous pouvez établir une nouvelle connexion sur le port 2222
, vous pouvez fermer votre terminal d’origine en toute sécurité. Pour vous connecter à votre serveur à l’avenir, vous devrez toujours spécifier le nouveau port, comme ceci :
Maintenant que vous avez déplacé avec succès SSH vers un port non standard, il est temps de configurer Endlessh.
Étape 2 – Installation d’Endlessh
Endlessh n’a pas de package officiel, donc vous allez cloner le dépôt pour le construire manuellement. Vous utiliserez Git pour cloner le dépôt, le package build-essential
(pour compiler le projet) et le package libc6-dev
.
Installez les packages requis en utilisant le gestionnaire de paquets apt :
Confirmez l’installation avec y
lorsque vous y êtes invité.
Ensuite, clonez le dépôt Endlessh depuis GitHub dans votre répertoire personnel :
Déplacez-vous dans le répertoire du projet et utilisez la commande make
pour compiler Endlessh :
Vous pouvez maintenant démarrer Endlessh avec la commande suivante :
Pour tester qu’Endlessh fonctionne, vous pouvez essayer d’établir une connexion SSH sur le port 22
avec le drapeau de verbose -v
, qui montrera la bannière infinie transmise. Dans une nouvelle fenêtre de terminal, établissez une connexion SSH sur le port 22
avec l’une des commandes suivantes :
Lorsque votre nouvelle session SSH tente de se connecter au port 22
, vous verrez une chaîne de caractères aléatoires apparaître dans le terminal de connexion toutes les 10 secondes jusqu’à ce que la session soit fermée, comme le résultat ci-dessous :
Outputdebug1: kex_exchange_identification: banner line 0: NvnHF>]&W4p+tg*"+
debug1: kex_exchange_identification: banner line 1: n<
debug1: kex_exchange_identification: banner line 2: @/O5c0/;>1b{qd(M,vK
debug1: kex_exchange_identification: banner line 3: i+ OZ
debug1: kex_exchange_identification: banner line 4: yn
debug1: kex_exchange_identification: banner line 5: T[V\\[HUg
Une fois que vous avez confirmé que cela fonctionne en essayant de vous connecter avec une nouvelle session, vous pouvez fermer le nouveau terminal et arrêter Endlessh en utilisant Ctrl+C
dans votre session de terminal d’origine.
À cette étape, vous avez téléchargé et construit Endlessh à partir de la source. Ensuite, vous allez le configurer et le déployer en tant que service pour le rendre persistant lors de la déconnexion et du redémarrage de votre serveur.
Étape 3 – Configuration d’Endlessh
Dans cette étape, vous configurerez Endlessh en tant que service qui persistera après la fin de votre session et à travers les redémarrages du système.
Déplacez le binaire compilé dans le répertoire /usr/local/bin
:
Entrez votre mot de passe si vous y êtes invité.
Copiez le fichier de service du projet dans le répertoire /etc/systemd/system
:
Vous modifierez légèrement le fichier de service pour exécuter Endlessh sur des ports inférieurs à 1024
. Ouvrez le fichier de service dans nano ou votre éditeur de texte préféré:
Repérez la section concernant l’exécution d’Endlessh sur des ports inférieurs à 1024
.
Mettez à jour le fichier en supprimant #
au début de la ligne avec AmbientCapabilities=CAP_NET_BIND_SERVICE
et en ajoutant #
au début de la ligne PrivateUsers=true
, comme ceci :
...
## Si vous voulez qu'Endlessh se lie sur les ports < 1024
## 1) exécutez:
## setcap 'cap_net_bind_service=+ep' /usr/local/bin/endlessh
## 2) décommentez la ligne suivante
AmbientCapabilities=CAP_NET_BIND_SERVICE
## 3) commentez la ligne suivante
#PrivateUsers=true
...
Enregistrez et quittez le fichier.
Ensuite, vous permettrez à Endlessh de s’exécuter sur des ports inférieurs à 1024
, également appelés ports privilégiés du domaine Internet. Configurez cette capacité pour le binaire Endlessh avec la commande setcap
:
Vous devrez définir un fichier de configuration pour Endlessh pour lui indiquer quel port utiliser. Créez et ouvrez un fichier de configuration nommé /etc/endlessh/config
:
Dans le fichier de configuration, définissez le port à utiliser comme 22
:
Port 22
Enregistrez et fermez le fichier.
Maintenant, vous pouvez démarrer le service Endlessh de manière persistante:
Y compris --now enable
rendra le service persistant après le redémarrage de votre serveur.
Pour vérifier que le service a démarré avec succès, vous pouvez utiliser la commande systemctl status
:
Si le démarrage est réussi, vous verrez une sortie comme ceci:
Output● endlessh.service - Endlessh SSH Tarpit
Loaded: loaded (/etc/systemd/system/endlessh.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2022-04-22 11:20:39 UTC; 1 months 11 days ago
Docs: man:endlessh(1)
Main PID: 34007 (endlessh)
Tasks: 1 (limit: 1081)
Memory: 380.0K
CGroup: /system.slice/endlessh.service
└─34007 /usr/local/bin/endlessh
S’il est en cours d’exécution, vous pouvez tenter de vous connecter sur le port 22
dans une nouvelle session de terminal:
Comme votre tarpit est en cours d’exécution, la nouvelle session de terminal ne pourra pas se connecter et continuera à s’exécuter indéfiniment jusqu’à ce qu’elle soit arrêtée manuellement avec Ctrl+C
dans le terminal connecté.
Si vous souhaitez arrêter le service, vous pouvez utiliser la commande suivante:
Après avoir arrêté le service, vous pouvez utiliser les instructions de restauration SSH dans l’avertissement de l’étape 1 pour restaurer la configuration originale de votre serveur. Vous pouvez réactiver le service avec sudo systemctl --now enable endlessh
sans passer à nouveau par le processus de configuration, mais assurez-vous que SSH ne fonctionne pas sur le port 22
lorsque vous le faites.
Conclusion
Vous avez installé et configuré avec succès Endlessh, aidé à nettoyer vos journaux d’authentification et vous êtes prêt à gaspiller le temps des bots SSH aléatoires.
Après avoir configuré votre Endlessh tarpit, examinez d’autres Mesures de sécurité recommandées pour protéger vos serveurs.
Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-an-endlessh-tarpit-on-ubuntu-22-04