Der Autor hat den Free and Open Source Fund ausgewählt, um eine Spende im Rahmen des Write for Donations-Programms zu erhalten.
Einführung
Wenn Sie sich Authentifizierungsprotokolle ansehen, sehen Sie möglicherweise mehrere fehlgeschlagene Anmeldeversuche von verschiedenen IP-Adressen. Diese fehlgeschlagenen Anmeldeversuche stammen oft von einem Knoten in einem Botnetz, das das gesamte Web nach verwundbaren Servern mit Standardanmeldeinformationen durchsucht. Während die meisten Personen ein sicheres Passwort oder SSH-Schlüssel haben, die verhindern, dass Angreifer sich auf ihren Servern anmelden, können einige Server für diese Scans anfällig sein. Obwohl Sie diese Angriffe möglicherweise nicht stoppen können, können Sie sie mit Tarpits verlangsamen.
In diesem Tutorial installieren und konfigurieren Sie Endlessh, eine Tarpit, die einem Benutzer, der sich anmelden möchte, langsam einen unendlich langen Banner sendet. Sie konfigurieren auch den SSH-Dienst, um auf einem anderen Port zu laufen, was Ihre Authentifizierungsprotokolle lesbarer macht.
Nach Abschluss dieses Tutorials können Sie eine Verbindung zu Ihrem Server über einen nicht standardmäßigen Port herstellen, während Bots, die Ihren Server scannen, feststellen werden, dass ihre Zeit verschwendet wird, indem sie an einer Tür klopfen, die sich nie öffnen wird.
Voraussetzungen
Um dieses Tutorial abzuschließen, benötigen Sie Folgendes:
- Einen Ubuntu-Server mit einem sudo-Benutzer ohne Root-Berechtigungen, einer Firewall und mindestens 1 GB RAM, den Sie durch Befolgen des Initial Server Setup mit Ubuntu 22.04 einrichten können.
- Git installiert auf Ihrem Server, was Sie mit dem Git-Installations-Tutorial abschließen können.
Schritt 1 – Verschieben von SSH auf einen Nicht-Standard-Port
In diesem Schritt verschieben Sie SSH auf einen Nicht-Standard-Port, um einen Port für Endlessh freizugeben. Da Botnets nicht endlos viele Ressourcen haben, scannen sie in der Regel nur den Standard-SSH-Port (22
). Indem Sie SSH auf einen Nicht-Standard-Port verschieben, können Sie den Bot in der Endlessh-Tarpit gefangen nehmen.
Beginnen Sie damit, eine Sicherung Ihrer SSH-Konfigurationsdatei von Ihrem Server mit dem folgenden Befehl zu erstellen:
Diese Datei kann verwendet werden, um die ursprünglichen Einstellungen wiederherzustellen, falls etwas nicht funktioniert oder wenn Sie sich entscheiden, SSH wieder auf den Standardport zurückzusetzen.
Öffnen Sie die SSH-Konfigurationsdatei /etc/ssh/sshd_config
mit Nano oder Ihrem bevorzugten Texteditor:
Suchen Sie die Zeile #Port 22
. Entkommentieren Sie diese Zeile, indem Sie das #
entfernen, und ändern Sie dann den Port auf einen unbenutzten Port auf Ihrem Server:
...
Port 2222
...
Ein Beispiel für einen normalerweise unbenutzten Port ist 2222
. Sie können jeden Port wählen, den Sie für Ihre wiederkehrenden SSH-Verbindungen verwenden möchten. Speichern und schließen Sie die Datei.
Wenn Ihr Server eine Firewall wie ufw
verwendet, müssen Sie den Datenverkehr zum neuen Port zulassen:
Anschließend starten Sie den SSH-Dienst neu:
In einer separaten Terminalsession versuchen Sie, eine Verbindung zu Ihrem Server über den neuen Port herzustellen:
Warnung: Schließen Sie Ihre aktive SSH-Sitzung nicht, es sei denn, Sie haben bestätigt, dass Sie SSH auf dem neuen Port verwenden können. Wenn Sie keine Verbindung über den neuen Port herstellen können, riskieren Sie den Zugriff auf Ihren Server durch Schließen der Sitzung zu verlieren. Wenn Sie keine Verbindung zu Ihrem Server in einer separaten Terminalsession herstellen können, können Sie Ihre ursprünglichen SSH-Einstellungen wiederherstellen, indem Sie die folgenden Befehle ausführen:
Wenn Sie weitere Probleme haben, überprüfen Sie, ob sshd
erfolgreich neu gestartet wurde, und überprüfen Sie Ihre Firewall-Einstellungen, um sicherzustellen, dass Port 2222
TCP-Verkehr akzeptiert.
Nachdem Sie überprüft haben, dass Sie eine neue Verbindung zum Port 2222
herstellen können, können Sie Ihr ursprüngliches Terminal sicher schließen. Bei zukünftigen Verbindungen zu Ihrem Server müssen Sie immer den neuen Port angeben, wie folgt:
Jetzt, da Sie SSH erfolgreich auf einen nicht standardmäßigen Port verschoben haben, ist es an der Zeit, Endlessh einzurichten.
Schritt 2 – Installation von Endlessh
Endlessh hat kein offizielles Paket, daher werden Sie das Repository klonen, um es manuell zu erstellen. Sie werden Git verwenden, um das Repository zu klonen, das Paket build-essential
(um das Projekt zu kompilieren) und das Paket libc6-dev
.
Installieren Sie die erforderlichen Pakete mit dem Paketmanager apt:
Bestätigen Sie die Installation mit y
, wenn Sie dazu aufgefordert werden.
Klonen Sie dann das Endlessh-Repository von GitHub in Ihr Home-Verzeichnis:
Wechseln Sie in das Projektverzeichnis und verwenden Sie den Befehl make
, um Endlessh zu kompilieren:
Sie können Endlessh jetzt mit dem folgenden Befehl starten:
Um zu testen, ob Endlessh funktioniert, können Sie versuchen, eine SSH-Verbindung zum Port 22
mit dem -v
verbose-Flag herzustellen, das das endlose Banner anzeigt. In einem neuen Terminalfenster stellen Sie eine SSH-Verbindung zum Port 22
mit einem der folgenden Befehle her:
Wenn Ihre neue SSH-Sitzung versucht, eine Verbindung zum Port 22
herzustellen, werden alle 10 Sekunden eine Reihe von Zufallszeichen im Verbindungsterminal angezeigt, bis die Sitzung geschlossen wird, wie im folgenden Ausgabebereich gezeigt:
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
Nachdem Sie bestätigt haben, dass es funktioniert, indem Sie versuchen, eine neue Sitzung herzustellen, können Sie das neue Terminal schließen und Endlessh mit Ctrl+C
in Ihrer Originalterminalsession stoppen.
In diesem Schritt haben Sie Endlessh aus den Quellen heruntergeladen und erstellt. Als nächstes konfigurieren Sie es und setzen es als Dienst ein, damit es persistent bleibt, wenn Sie sich abmelden und Ihren Server neu starten.
Schritt 3 – Konfigurieren von Endlessh
In diesem Schritt richten Sie Endlessh als Dienst ein, der nach dem Ende Ihrer Sitzung und bei Systemneustarts bestehen bleibt.
Verschieben Sie die kompilierte Binärdatei in das Verzeichnis /usr/local/bin
:
Geben Sie Ihr Passwort ein, wenn Sie dazu aufgefordert werden.
Kopieren Sie die Service-Datei aus dem Projekt in das Verzeichnis /etc/systemd/system
:
Sie ändern die Service-Datei geringfügig, um Endlessh auf Ports unter 1024
auszuführen. Öffnen Sie die Service-Datei in nano oder Ihrem bevorzugten Texteditor:
Finden Sie den Abschnitt über das Ausführen von Endlessh auf Ports unter 1024
.
Aktualisieren Sie die Datei, indem Sie das #
am Anfang der Zeile mit AmbientCapabilities=CAP_NET_BIND_SERVICE
entfernen und das #
am Anfang der Zeile PrivateUsers=true
hinzufügen, wie folgt:
...
## Wenn Sie möchten, dass Endlessh auf Ports < 1024 bindet
## 1) ausführen:
## setcap 'cap_net_bind_service=+ep' /usr/local/bin/endlessh
## 2) folgende Zeile auskommentieren
AmbientCapabilities=CAP_NET_BIND_SERVICE
## 3) folgende Zeile kommentieren
#PrivateUsers=true
...
Speichern und schließen Sie die Datei.
Als nächstes erlauben Sie Endlessh, auf Ports unterhalb von 1024
zu laufen, die auch als Internetdomänen-Privilegien-Ports bezeichnet werden. Legen Sie diese Fähigkeit für die Endlessh-Binärdatei mit dem Befehl setcap
fest:
Sie müssen eine Konfigurationsdatei für Endlessh definieren, um ihm mitzuteilen, welchen Port er verwenden soll. Erstellen und öffnen Sie eine Konfigurationsdatei namens /etc/endlessh/config
:
In der Konfigurationsdatei definieren Sie den zu verwendenden Port als 22
:
Port 22
Speichern und schließen Sie die Datei.
Jetzt können Sie den Endlessh-Dienst dauerhaft starten:
Wenn Sie --now enable
einschließen, wird der Dienst nach dem Neustart Ihres Servers bestehen bleiben.
Um zu überprüfen, ob der Dienst erfolgreich gestartet wurde, können Sie den Befehl systemctl status
verwenden:
Wenn der Dienst erfolgreich gestartet wurde, sehen Sie eine Ausgabe wie diese:
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
Wenn er läuft, können Sie versuchen, eine Verbindung auf Port 22
in einer neuen Terminalsession herzustellen:
Weil Ihre Tarpit läuft, wird die neue Terminalsession keine Verbindung herstellen können und wird bis zum manuellen Stoppen mit Strg+C
in dem verbindenden Terminal fortlaufend ausgeführt.
Wenn Sie den Dienst beenden möchten, können Sie den folgenden Befehl verwenden:
Nachdem Sie den Dienst gestoppt haben, können Sie die SSH-Wiederherstellungsinstruktionen im Warnhinweis von Schritt 1 verwenden, um Ihre ursprüngliche Serverkonfiguration wiederherzustellen. Sie können den Dienst mit sudo systemctl --now enable endlessh
wieder aktivieren, ohne den Einrichtungsprozess erneut durchlaufen zu müssen, aber stellen Sie sicher, dass SSH nicht auf Port 22
läuft, wenn Sie dies tun.
Abschluss
Sie haben Endlessh erfolgreich installiert und konfiguriert, Ihre Authentifizierungsprotokolle aufgeräumt und sich darauf vorbereitet, die Zeit zufälliger SSH-Bots zu verschwenden.
Nachdem Sie Ihre Endlessh-Tarpit eingerichtet haben, überprüfen Sie weitere Empfohlene Sicherheitsmaßnahmen zum Schutz Ihrer Server.
Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-an-endlessh-tarpit-on-ubuntu-22-04