Letmein ist ein einfacher Portklopfer mit einem einfachen und sicheren Authentifizierungsmechanismus. Es kann zur Abwehr von Vorauthentifizierungsangriffen auf Dienste wie SSH, VPN, IMAP und viele mehr verwendet werden.
Letmein versteckt Dienste auf einem Server hinter einer Klopfauthentifizierungsbarriere, um die Angriffsfläche eines Dienstes zu verringern. Der Dienst ist nur dann zugänglich, wenn eine Klopfauthentifizierung erfolgreich ist. Im Falle eines erfolgreichen Klopfens öffnet der letmeind-Server nur den geklopften Port für die Client-IP-Adresse, die den Klopfen durchgeführt hat. Maschinen mit unterschiedlichen IP-Adressen haben weiterhin keinen Zugriff auf den geschützten Dienst.
Maschinen, die die Klopfsequenz nicht erfolgreich authentifizieren können, können nicht auf den geschützten Dienst zugreifen. Sie erhalten eine ICMP- reject
auf dem geschützten Service-Port mit dem bereitgestellten Beispiel nftables.conf
. (Sie können sich stattdessen auch dafür entscheiden, die Pakete in Ihrer nftables.conf
zu drop
.)
Letmein erfordert eine nftables
basierte Firewall. Es wird nicht mit iptables
funktionieren. Wenn Sie eine iptables
basierte Firewall verwenden, konvertieren Sie bitte vor der Installation von letmein zu nftables
. Es gibt Beschreibungen dazu im Internet. Es ist nicht so schwer und arbeitsintensiv, wie es sich anhört. :) :)
Die Letmein-Steuerungskommunikation selbst verwendet standardmäßig den TCP-Port 5800, kann jedoch für jeden TCP- oder UDP-Port konfiguriert werden. Wenn Sie einen UDP-Port als Kontrollport wählen und control-error-policy=basic-auth konfigurieren, dann arbeitet der letmein-Dienst selbst im Stealth-Modus und antwortet nicht auf nicht authentifizierte eingehende Nachrichten.
Homepage
Git-Repository
Github-Repository
Installieren Sie auf dem Server die letmein-Serversoftware (siehe Abschnitte unten).
Installieren Sie auf dem Client die Letmein-Client-Software (siehe Abschnitte unten).
Bitte lesen Sie die mit diesem Projekt bereitgestellte Beispielkonfigurationsdatei nftables.conf. Das Hinzufügen einer Letmein-spezifischen Eingabekette zu Ihrer vorhandenen nftables
-Konfiguration ist erforderlich. Ändern Sie Ihre nftables.conf
entsprechend.
Generieren Sie mit dem folgenden Client-Befehl einen gemeinsamen geheimen Schlüssel und eine Benutzerkennung, die auf dem Server und dem Client installiert werden soll:
letmein gen-key -u 00000000
Der Befehl gen-key gibt die generierte Schlüsselzeichenfolge auf der Konsole aus. Standardmäßig wird dadurch ein sicherer Zufallsschlüssel für die Benutzerkennung 00000000
generiert. Sie können die Benutzerkennung bei Bedarf manuell bearbeiten oder sie einfach unverändert lassen.
Fügen Sie die generierte Zeichenfolge (Benutzerkennung und gemeinsames Geheimnis) zur Serverkonfiguration in /opt/letmein/etc/letmeind.conf
hinzu. Fügen Sie die generierte Schlüsselzeichenfolge zusammen mit der Benutzerkennung in den Abschnitt [KEYS]
der Konfigurationsdatei ein.
Fügen Sie die gleiche generierte Zeichenfolge (Benutzer-ID und gemeinsames Geheimnis) zur Client-Konfiguration in /opt/letmein/etc/letmein.conf
hinzu. Fügen Sie die generierte Schlüsselzeichenfolge zusammen mit der Benutzerkennung in den Abschnitt [KEYS]
der Konfigurationsdatei ein.
Erstellen Sie auf dem Server eine resource
, die den sshd
-Port beschreibt, der geöffnet werden kann. Im Abschnitt [RESOURCES]
der Serverkonfigurationsdatei /opt/letmein/etc/letmeind.conf
müssen alle Ports angegeben werden, die geöffnet werden dürfen. Eine Ressource besteht aus einer Ressourcenkennung, gefolgt von einer Portkennung wie dieser:
[RESOURCES]
00000022 = port: 22
Die Ressourcenkennung ist eine 8-stellige Hexadezimalzahl. In diesem Beispiel ist es 22 (hex), es kann aber eine beliebige Zahl sein. Es muss lediglich auf dem Server und dem Client dieselbe Nummer sein. Nach port:
wird die Portnummer (in Dezimalzahl) angegeben, die geöffnet werden kann.
Fügen Sie dieselbe Ressource mit derselben Ressourcenkennung und derselben Portnummer zur Clientkonfiguration in /opt/letmein/etc/letmein.conf
hinzu.
Starten Sie den Letmein-Server neu:
systemctl restart letmeind.service
accept
Sie nun Ihren statischen sshd
Port (22) aus Ihrer nftables.conf
Firewallkonfiguration. Letmein installiert eine solche Regel nach erfolgreicher Klopfauthentifizierung dynamisch in die Letmein-Eingabekette. Dann starten Sie nftables neu:
systemctl restart nftables.service
Erledigt! Sie sollten nun in der Lage sein, den sshd
-Port auf Ihrem Server zu öffnen:
# 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
Um den Port automatisch anzuklopfen, bevor eine Verbindung mit SSH hergestellt wird, können Sie Ihrer Datei ~/.ssh/config
eine Match exec
Regel hinzufügen:
Match host your-server.com exec "letmein knock -u 00000000 your-server.com 22"
Weitere Informationen zum Erstellen und Installieren von letmein finden Sie in den Installationsanweisungen.
Wenn Sie letmein vollständig von Ihrem System entfernen möchten, lesen Sie die Deinstallationsanweisungen.
Die Client-Anwendung letmein
ist portierbar und sollte auf allen wichtigen Plattformen laufen. Getestete Plattformen sind:
Die Serveranwendung letmeind
ist nur für Linux verfügbar, da sie nur nftables
als Firewall-Backend unterstützt.
Ausführliche Informationen zur Konfiguration des Letmein-Servers und -Clients finden Sie in der Konfigurationsdokumentation.
Bitte beachten Sie, dass die Benutzerkennungen und Ressourcenkennungen aus den Konfigurationsdateien unverschlüsselt im Klartext über das Netzwerk übertragen werden.
Stellen Sie sicher, dass die Benutzer-IDs und Ressourcen-IDs keine privaten Informationen enthalten.
Diese Identifikatoren sind lediglich als abstrakte Identifikation für die Verwaltung verschiedener letmein
-Schlüssel, Installationen und Setups gedacht.
Die wichtigsten Designziele von letmein sind:
-4
und -6
angepasst werden.Weitere Informationen zur Sicherheit und zum Melden von Schwachstellen finden Sie in der Sicherheitsdokumentation von letmein.
Copyright (c) 2024 Michael Büsch [email protected]
Lizenziert unter der Apache-Lizenz Version 2.0 oder der MIT-Lizenz, nach Ihrer Wahl.