Letmein est un simple heurtoir de port doté d'un mécanisme d'authentification simple et sécurisé. Il peut être utilisé pour se protéger contre les attaques de pré-authentification sur des services tels que SSH, VPN, IMAP et bien d'autres.
Letmein cache les services sur un serveur derrière une barrière d'authentification pour réduire la surface d'attaque d'un service. Le service ne sera accessible que si une authentification par frappe réussit. En cas de frappe réussie, le serveur letmeind ouvrira uniquement le port frappé pour l'adresse IP du client qui a effectué la frappe. Les machines avec des adresses IP différentes n'auront toujours pas accès au service protégé.
Les machines qui ne parviennent pas à authentifier la séquence de frappe ne pourront pas accéder au service protégé. Ils recevront un reject
ICMP sur le port de service protégé avec l'exemple fourni nftables.conf
. (Vous pouvez également décider de drop
les paquets dans votre nftables.conf
à la place).
Letmein nécessite un pare-feu basé sur nftables
. Cela ne fonctionnera pas avec iptables
. Si vous utilisez un pare-feu basé sur iptables
, veuillez le convertir en nftables
avant d'installer letmein. Il existe des descriptions sur la façon de procéder sur Internet. Ce n'est pas aussi difficile et aussi laborieux qu'il y paraît. :)
La communication de contrôle letmein elle-même est par défaut sur le port TCP 5800, mais elle peut être configurée sur n'importe quel port TCP ou UDP. Si vous choisissez un port UDP comme port de contrôle et configurez control-error-policy=basic-auth, alors le service letmein lui-même fonctionne en mode furtif et ne répond pas aux messages entrants non authentifiés.
Page d'accueil
Dépôt Git
Dépôt Github
Sur le serveur, installez le logiciel serveur letmein (voir les sections ci-dessous).
Sur le client, installez le logiciel client letmein (voir les sections ci-dessous).
Veuillez lire l'exemple de fichier de configuration nftables.conf fourni avec ce projet. L'ajout d'une chaîne d'entrée spécifique letmein à votre configuration nftables
existante est requis. Modifiez votre nftables.conf
en conséquence.
Générez une clé secrète partagée et un identifiant utilisateur à installer sur le serveur et le client avec la commande client suivante :
letmein gen-key -u 00000000
La commande gen-key imprimera la chaîne de clé générée sur la console. Par défaut, cela générera une clé aléatoire sécurisée pour l'identifiant utilisateur 00000000
. Vous pouvez modifier manuellement l'identifiant de l'utilisateur, si vous le souhaitez, ou vous pouvez simplement le laisser tel quel.
Ajoutez la chaîne générée (identifiant de l'utilisateur et secret partagé) à la configuration du serveur dans /opt/letmein/etc/letmeind.conf
. Placez la chaîne de clé générée avec l'identifiant de l'utilisateur dans la section [KEYS]
du fichier de configuration.
Ajoutez la même chaîne générée (identifiant d'utilisateur et secret partagé) à la configuration client dans /opt/letmein/etc/letmein.conf
. Placez la chaîne de clé générée avec l'identifiant de l'utilisateur dans la section [KEYS]
du fichier de configuration.
Créez une resource
sur le serveur qui décrit le port sshd
qui peut être ouvert. Dans la section [RESOURCES]
du fichier de configuration du serveur /opt/letmein/etc/letmeind.conf
tous les ports pouvant être ouverts doivent être spécifiés. Une ressource est constituée d'un identifiant de ressource suivi d'un identifiant de port comme celui-ci :
[RESOURCES]
00000022 = port: 22
L'identifiant de la ressource est un nombre hexadécimal à 8 chiffres. Dans cet exemple, il s'agit de 22 (hex), mais il peut s'agir de n'importe quel nombre. Il faut juste que ce soit le même numéro sur le serveur et sur le client. Après port:
le numéro de port (en décimal) pouvant être ouvert est spécifié.
Ajoutez la même ressource avec le même identifiant de ressource et le même numéro de port à la configuration client dans /opt/letmein/etc/letmein.conf
.
Redémarrez le serveur letmein :
systemctl restart letmeind.service
Supprimez maintenant votre port sshd
statique (22) accept
de la configuration de votre pare-feu nftables.conf
. Letmein installera une telle règle dynamiquement dans la chaîne d'entrée letmein après une authentification réussie. Puis redémarrez nftables :
systemctl restart nftables.service
Fait! Vous devriez maintenant pouvoir ouvrir le port sshd
sur votre serveur :
# This must fail! No successful knock authentication, yet.
# If this does not fail, check if you have removed the sshd accept rule from nftables.conf.
ssh your-server.com
# Knock-open port 22 (sshd) on the server using user-id/key 00000000:
# (You do not have to specify -u 00000000 if that is your default user (see config).)
letmein knock -u 00000000 your-server.com 22
# Now you should be able to ssh into your server successfully:
ssh your-server.com
Pour désactiver automatiquement le port avant de vous connecter avec ssh, vous pouvez ajouter une règle Match exec
à votre fichier ~/.ssh/config
:
Match host your-server.com exec "letmein knock -u 00000000 your-server.com 22"
Consultez les instructions d'installation pour plus d'informations sur la façon de créer et d'installer letmein.
Si vous souhaitez supprimer complètement letmein de votre système, consultez les instructions de désinstallation.
L'application client letmein
est portable et doit fonctionner sur toutes les principales plates-formes. Les plateformes testées sont :
L'application serveur letmeind
est uniquement Linux, car elle ne prend en charge que nftables
en tant que backend de pare-feu.
Consultez la documentation de configuration pour obtenir des informations détaillées sur la configuration du serveur et du client letmein.
Veuillez noter que les identifiants utilisateur et les identifiants de ressources issus des fichiers de configuration sont transmis sur le réseau sans cryptage en texte clair.
Assurez-vous que les identifiants d'utilisateur et les identifiants de ressources n'incluent aucune information privée.
Ces identifiants sont simplement destinés à être une identification abstraite pour gérer différentes clés, installations et configurations letmein
.
Les principaux objectifs de conception de letmein sont :
-4
et -6
.Pour plus d'informations sur les vulnérabilités de sécurité et de reporting, veuillez consulter la documentation de sécurité de letmein.
Copyright (c) 2024 Michael Büsch [email protected]
Sous licence Apache License version 2.0 ou licence MIT, à votre choix.