Tutorial | Jetzt Linux SSH absichern / hardening in 2024

Linux SSH Zugang richtig absichern

Das A und O wenn ihr einen Linux-Server betreibt, ist es meistens für die Administration erforderlich, einen sichereren Zugang via SSH zu etablieren.

Dieses Tutorial soll euch helfen, den Linux SSH Zugriff erfolgreich gegen Angriffe zu schützen.

Natürlich ist das Absichern des SSH-Zugangs nur ein Modul, um euren Server vor Angriffe zu schützen. Weitere Möglichkeiten findet ihr im Tutorial „Raspberry Pi absichern von A-Z“ welches ich hier im Blog veröffentlicht habe.

Video-Tutorial zum Thema ‚Linux SSH absichern‘

Sie sehen gerade einen Platzhalterinhalt von Youtube. Um auf den eigentlichen Inhalt zuzugreifen, klicken Sie auf die Schaltfläche unten. Bitte beachten Sie, dass dabei Daten an Drittanbieter weitergegeben werden.

Mehr Informationen
Video-Tutorial – Linux SSH richtig absichern

Weitere Videos zum Thema Linux Server absichern

Dieses Tutorial ist ein Bestandteil einer Video-Serie rund um das Thema ‚Linux Server absichern‘.

Gerne könnt ihr auch auf YouTube die vollständige Playlist zum Thema anschauen. Hier werden regelmäßig immer neue Videos zur Thematik hinzugefügt.

Sie sehen gerade einen Platzhalterinhalt von Youtube. Um auf den eigentlichen Inhalt zuzugreifen, klicken Sie auf die Schaltfläche unten. Bitte beachten Sie, dass dabei Daten an Drittanbieter weitergegeben werden.

Mehr Informationen
Playlist zum Thema – Linux Server absichern

HowTo – Linux SSH-Zugang richtig absichern

SSH ist ein beliebtes Protokoll, um sich auf entfernten Servern anzumelden und Befehle auszuführen. Doch wie kann man sicherstellen, dass nur berechtigte Personen Zugriff auf den SSH-Dienst haben? In diesem Tutorial möchte ich euch einige Tipps und Tricks vorstellen, wie man seinen SSH-Zugang richtig absichern kann.

Schritt 1 Linux SSH absichern – Standard-Port des SSH-Diensts ändern

Die meistens Angriffe auf den SSH-Port (Port 22) finden automatisiert statt. Daher kann entsprechend einer Port-Änderung des SSH-Ports diese Angriffsmethode ein wenig erschwert werden. Daher zeige ich euch, wie ihr entsprechend den Standard-SSH-Port ändern könnt.

Um den Standard-SSH-Port ändern zu können, ist es erforderlich diesen in der Config-Datei des SSH-Dienstes abzuändern.

Hierzu öffnet ihr wie in diesem Beispiel mit dem Editor ‚Nano‘ die Konfigurationsdatei die sich auf dem Pfad ‚/etc/ssh/sshd_config‚ befindet.

Wichtig! Firewall-Regeln anpassen!

Solltet ihr schon Firewall-Regeln auf eurem Server aktiviert haben, müsst ihr diese entsprechend eurem gewählten Port um diese Regel ergänzen! Ansonsten sperrt ihr euch aus und habt keinen Zugriff mehr via SSH!

# Öffnen der SSH-Config-Datei

sudo nano /etc/ssh/sshd_config

Nachdem aufrufen des oben genannten Befehls, sollte sich ein Editor-Fenster mit folgendem Inhalt öffnen:

Tutorial | Jetzt Linux SSH absichern / hardening in 2024 2

In der Zeile ‚#Port 22‘ entfernt ihr das #-Zeichen (dadurch wird die Funktion / Ziele aktiviert) und ersetzt die Standard-Portnummer durch eure gewählte Portnummer. In diesem Fall ist es Port 2223. Jetzt noch die Änderung mit der Tastenkombination ‚STRG+O‚ speichern und den Editor mit ‚STRG+X‚ verlassen.

Damit die Änderungen übernommen werden, muss der SSH-Service neugestartet werden.

# SSH-Service neustarten

sudo systemctl restart ssh

# Status und Port des SSH-Service überprüfen

sudo systemctl status ssh

# Hier muss jetzt erscheinen, dass der Service 'enabled' ist und weiter unten in der Ausgabe wird dann der Listening-Port angegeben


Überprüfung der Möglichkeit einer SSH-Anmeldung auf dem neuen Port

Hierzu öffnet ihr ein neues Terminalfenster und meldet euch per SSH unter Angabe des neuen Ports auf dem Server an.

# Anmeldung SSH mit Portangabe

ssh root@IP-Adresse -p 2223 
# Der Port sowie die IP-Adresse müssen durch eure entsprechenden und gewählten Angaben ergänzt werden.

Geänderter SSH-Port nicht erreichbar

Sollte die SSH-Port-Änderung nicht funktionieren, also der SSH-Zugang ist über den neuen Port nicht erreichbar, dann bitte die folgenden Befehle eingeben.

Dieser Fehler kann beispielsweise bei einem Debian-Proxmox-Container auftauchen. Hier wird bei der Änderung des Ports in der sshd_config nicht automatisch übernommen und der Zugriff über den Standard-Port 22 ist immer noch möglich.

systemctl  disable  ssh.socket
systemctl  stop  ssh.socket
reboot

Eine Liste der standardisierten sowie dynamischen Ports findet ihr zum Beispiel hier im entsprechenden Wikipedia-Post:

https://de.wikipedia.org/wiki/Liste_der_standardisierten_Ports

Schritt 2 Linux SSH absichern – SSH-Schlüsselpaar erzeugen

Wichtiger Hinweis!

Vorab sei erwähnt, dass ihr nur die beiden Methoden RSA 4096 bit (ab 3072 bit oder höher) sowie Ed25519 zur Schlüsselerzeugung nutzen solltet. Ich persönlich nutze immer Ed25519 (basierend auf einer elliptischen Kurve) zusammen mit einem extra Passphrase (zusätzliches Passwort) als zweiten Faktor und würde es auch so empfehlen.

SSH-Schlüsselpaar unter Linux und macOS erzeugen

Öffne ein Terminalfenster und gebe hier den folgenden Befehl ein um eine Schlüsseldatei mittels Ed25519 mit zusätzlichem Passwort sowie mit zusätzlichem Schutz vor Brute Force-Attacken zu erstellen und zu schützen.

# Erstellen eines Schlüsselpaars basierend auf Ed25519 + Passwort und Brute-Force-Schutz

ssh-keygen -o -a 100 -t ed25519

# Ausgabe:
Generating public/private ed25519 key pair.
Enter file in which to save the key (/root/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase): (hier euer gewünschtes Passwort vergeben)
Enter same passphrase again: (hier das Passwort wiederholen)

# Dann wird das Schlüsselpaar erzeugt, und ist über den Pfad '/root/.ssh/id_ed25519' für den privaten Schlüssel, sowie den public_key unter '/root/.ssh/id_ed25519.pub', zu finden. 

Wichtiger Hinweis!

Der Schlüssel mit der Endung id_ed25519 ist der private Schlüssel und darf niemals herausgegeben werden!

Den privaten Schlüssel bitte sicher aufbewahren und zum Beispiel im Passwort-Manager ‚Bitwarden‘ ablegen, oder auf einen verschlüsselten USB-Stick abspeichern und sicher aufbewahren. Ohne diesen privaten Schlüssel habt ihr bei Verlust, keinen Zugriff mehr auf euren Server!

Zum Exportieren ist nur die Schlüsseldatei mit der Endung .pub zu verwenden!!!

SSH-Schlüsselpaar unter Windows erzeugen

Ab Windows 10 in Version 1809, ist ein SSH-Client standardmäßig installiert und ihr könnt somit gleich mit der Schlüsselerzeugung loslegen.

Hierzu gibt ihr in der PowerShell oder auch im Microsoft Terminal (welches ich auch immer in den Videos nutze), mit Administrationsrechte, den folgenden Befehl in der Kommandozeile ein:

# Erstellen eines Schlüsselpaars basierend auf Ed25519 + Passwort und Brute-Force-Schutz unter Windows

ssh-keygen -o -a 100 -t ed25519

# Ausgabe:

Enter passphrase (empty for no passphrase): <hier euer sicheres Passwort eingeben>
Enter same passphrase again: <Passwort bestätigen>
Your identification has been saved in C:\Users\username/.ssh/id_ed25519. <username = Ersetzen durch euren Benutzername>
Your public key has been saved in C:\Users\username/.ssh/id_ed25519.pub. <username = Ersetzen durch euren Benutzername>
The key fingerprint is:
Beispiel: SHA256:OIzc1yE7joL2Bzy8!gS0j8eGK7bYaH1FmF3sDuMeSj8 username@LOCAL-HOSTNAME

Schritt 3 Linux SSH absichern – SSH-Public_key auf den Remote-Server kopieren

Damit in Zukunft eine Anmeldung auf dem Linux-Server mit einem Schlüsselpaar möglich ist, muss der public_key auf dem Remote-Server zunächst kopiert / mitgeteilt werden.

Gespeichert wird dieser public_key bei dem anzumeldenden Nutzer in der Datei ‚.ssh/authorized_keys‘. Diese findet ihr im Wurzelverzeichnis ‚cd .ssh‘.

Sollte das Verzeichnis ‚.ssh/‘ nicht vorhanden sein, dann bitte auf dem Remote-Server mit dem folgenden Befehl anlegen:

mkdir .ssh/

Voraussetzung um den Public_Key auf den Remote-Server zu installieren ist es, dass ihr berechtigt seid, dass ihr euch mit Benutzername und Passwort auf dem Remote-Server anmelden könnt!

public_key in die Datei ‚.ssh/authorized_keys‘ kopieren unter Windows-Powershell / Microsoft Terminal

Um den Kopiervorgang des public_key auf den Remote-Server zu starten, gibt ihr bitte den folgenden Befehl ein:

# Key via Powershell auf einen Remote-Server kopieren

type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh remoteuser@IP-AdresseRemote-Server "cat >> .ssh/authorized_keys"

# Der <remoteuser> wird durch den User auf dem Remote-Server ersetzt, mit dem ihr euch dort Anmelden wollt
# Die <IP-AdresseRemote-Server> wird durch die IP-Adresse von eurem Remote-Server ersetzt

public_key in die Datei ‚.ssh/authorized_keys‘ kopieren unter Linux / macOS

Voraussetzung um den Public_Key auf den Remote-Server zu installieren ist es, dass ihr berechtigt seid, dass ihr euch mit Benutzername und Passwort auf dem Remote-Server anmelden könnt!

Um unter Linux und macOS (basiert ja auch auf ein Unix-System) den public_key auf den Remote-Server zu kopieren, öffnet ihr ein Terminalfenster und gibt den folgernden Befehl ein:

# public_key unter Linux und macOS auf einen Remote-Server kopieren
# Das Attribut -p gibt den SSH-Port des Remote Server an

ssh-copy-id -i .ssh/id_ed25519.pub -p 2223 remoteuser@IP-AdresseRemote-Server

Überprüfung der authorized_keys auf dem Remote-Server

Zu guter Letzt, müssen wir unbedingt die Datei ‚authorized_keys‘ auf dem Remote-Server überprüfen, ob hier auch wirklich der öffentliche Schlüssel als Eintrag hinzugefügt wurde!

Dazu meldet ihr euch per Benutzer + Passwort auf dem Remote-Server an und ruft den Inhalt der Datei ‚authorized_keys‘ mit folgendem Befehl auf:

# Inhalt der Datei 'authorized_keys' anzeigen

nano .ssh/authorized_keys

# Ausgabe:
Die Ausgabe des Editor-Fenster sollte wie folgt aussehen beziehungsweise beginnen:

ssh-ed25519 AAAAC3N........

Schritt 4 Linux SSH absichern – SSH-Anmeldung via SSH-Schlüssel aktivieren

Nachdem der Public_Key auf dem Remote-Server erfolgreich kopiert sowie überprüft wurde, können wir jetzt die Anmeldemethode via Schlüsselpaar auf diesem Server aktivieren.

Hierzu werden wir die Config-Datei ’sshd_config‘ entsprechend anpassen.

# Anpassen der SSH-Config-Datei auf dem Remote-Server

# Öffnen der sshd-config

sudo nano /etc/ssh/sshd_config

# Nun im Editor-Fenster die folgende Zeile auf 'Yes' setzen und da #-Zeichen entfernen

PubkeyAuthentication yes

# Des Weiteren muss noch überprüft werden, ob der richtige Pfad zu der Datei 'authorized_keys' angeben und auch aktiviert ist
# Hierfür muss die Zeile für diese Datei wie folgt aussehen sowie das Zeichen '#' entfernt sein:

AuthorizedKeysFile      .ssh/authorized_keys

# Dann die Datei mit 'STRG+O' die Eingaben speichern und mit 'STRG+X' das Editor-Fenster verlassen.

Nach diesen Veränderungen an der ’sshd_config‘ muss noch der SSH-Dienst neu gestartet werden:

# SSH-Service neu starten, um die Änderungen zu übernehmen

sudo systemctl restart ssh

# Bei Red-Had-basierenden Distributionen wie CentOS, Fedora, Rocky Linux usw. ist der Service 'sshd' neu zu starten

sudo service sshd restart

Schritt 5 Linux SSH absichern – SSH-Anmeldung mit Schlüsselpaar überprüfen

Um jetzt den SSH-Zugang via SSH-Schlüssel zu überprüfen, melden wir uns an dem Remote-Server genauso wie gewohnt an:

# Anmeldung via SSH-Schlüssel an den Remote-Server

ssh benutzer@IP-AdresseRemoteServer

# Solltet ihr euch zum ersten Mal mit diesem Benutzer am Remote-Server anmelden, erhaltet ihr die folgende Abfrage:

The authenticity of host 'IP-Adresse des Remote-Server' can't be established.
ED25519 key fingerprint is SHA256:ElsjpajVayeK.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])?

# Hier müsst ihr dann mit 'yes' bestätigen und dann den Passphrase (euer Passwort zum oben erstellten SSH-Schlüssel) eingeben

Enter passphrase for key 'C:\Users\marcel/.ssh/id_ed25519': <Passwort für den SSH-Schlüssel eingeben>

# Nun solltet ihr mit dem Remote-Server verbunden sein

Schritt 6 Linux SSH absichern – Linux SSH absichern durch Deaktivieren der Anmeldung durch Passwort

Achtung

Diesen Schritt nur durchführen, wenn die Anmeldung via SSH-Schlüssel funktioniert hat und ihr einen weiteren Benutzer mit erhöhten Rechten wie im Beitrag ‚Raspberry Pi absichern von A -Z‚ angelegt habt!

Ansonsten sperrt ihr euch vom Server aus!

Nach erfolgreicher Anmeldung mit dem SSH-Schlüssel können wir nun endlich die unsichere Anmeldung mittels Passworts beim Remote-Server deaktivieren.

Dazu müssen wir wieder eine Anpassung an der ’sshd_config‘ vornehmen und auch gleichzeitig wie im nächsten Abschnitt beschrieben, die Anmeldung als ‚root-user‘ deaktivieren.

# SSH-Anmeldung mittels Passworts am Remote-Server deaktivieren

sudo nano /etc/ssh/sshd_config # sshd_config-Datei zum Bearbeiten öffnen

# Die folgende Zeile '#PasswordAuthentication yes' in 'PasswordAuthentication no' abändern

# Und mit 'STRG+O' speichern und mit 'Strg+X' den Editor verlassen

# SSH-Dienst neu Starten

sudo systemctl restart ssh

Natürlich könnt ihr die Änderungen vom nächsten Absatz in diesem Tutorial gleich mit ändern, aber zur Verständlichkeit werde ich extra alle Schritte einzeln durchführen!

Schritt 7 Linux SSH absichern – Anmeldung als Root-User via SSH deaktivieren

Ein wirklich wichtiger Sicherheitsaspekt bei der Absicherung des SSH-Zugangs ist es, dass der volle root-Zugang via SSH-Zugang deaktiviert wird! Dieses gilt nicht nur für die Anmeldung via SSH-Schlüssel auf dem Remote-Server wie wir es in diesem Tutorial gelernt haben, sondern sollte immer in der ’sshd_config-Datei‘ deaktiviert werden.

Ein fremder Nutzer der sich mit zum Beispiel gestohlenen Anmeldedaten auf eurem Server via SSH anmelden kann und dann gleich alles Privilegien für Änderungen hat, ist der absolute Alptraum!

Um diesen Alptraum zu vermeiden, öffnen wir wieder die Konfigurationsdatei für den SSH-Dienst und passen diese wie folgt an:

# Anmeldung als Root-User via SSH-Verbindung deaktivieren

sudo nano /etc/ssh/sshd_config

# Im Editor-Fenster nun die Zeile '#PermitRootLogin' in 'PermitRootLogin no' ändern

# Dann wieder die Änderungen speichern und den SSH-Dienst neustarten

sudo systemctl restart ssh

Schritt 8 Linux SSH absichern – Neueste Protokolle zur Authentifizierung erzwingen

Ein weiterer Schritt um die Sicherheit der SSH-Anmeldung zu erhöhen ist es, die Erzwingung der Nutzung der neuesten Protokolle (SSH-Protocol-Version 2) zur Anmeldung zu nutzen.

Hierfür muss natürlich wieder die SSH-Config-Datei angepasst werden und der SSH-Dienst neu gestartet werden.

# Folgende Einträge sollten in der SSH-Config-Datei noch hinzugefügt bzw. angepasst werden.

ChallengeResponseAuthentication no

# und

UsePAM no

# Dann wieder den SSH-Dienst neu starten

sudo systemctl restart ssh

Linux Server absichern – SSH mit Fail2ban vor Brute Force-Attacken schützen

SSH mit fail2ban absichern

Wie ihr euren Server (insbesondere SSH) vor Brute Force-Attacken schützen könnt, erfahrt ihr in diesem Tutorial…

Fazit – Linux SSH absichern

Wir haben in diesem Tutorial gelernt, wie wir den SSH-Zugang zu einem Linux-Server effektiv und nach neustem Stand der Technik vor Angriffe schützen können.

Ich kann nur jedem ans Herz legen, alle SSH-Zugänge (auch im internen Netzwerk) so abzusichern! Weiterhin habt ihr noch die Möglichkeit Brute Force-Attacken auf den SSH-Service mit zum Beispiel ‚Fail2ban‘ zu schützen. Wie das funktioniert, habe ich euch ja schon in dem Tutorial ‚Raspberry Pi absichern von A-Z | 2023‚ (funktioniert bei allen debian-basierten Systemen) gezeigt und habe auf eine Wiederholung in diesem Tutorial darauf verzichtet.

Wichtig ist noch zu erwähnen, dass diese in diesem Tutorial behandelte Methode nur eine Möglichkeit widerspiegelt, einen Linux-Server richtig abzusichern. Also nur ein Baustein in der IT-Sicherheit ist!

Sollte euch dieses Tutorial ein wenig gefallen haben, so würde ich mich über ein Abo von meinem YouTube-Kanal sehr freuen!

Jede Unterstützung ist Willkommen…

Gerne würde ich euch noch mehr kostenfreie und vor allem werbefreie Inhalte hier sowie auf anderen Kanälen bereitstellen, doch ist der Aufwand für die Erstellung dieser Inhalte schon sehr zeitintensiv und vor allem langsam auch sehr kostenintensiv geworden (Kosten für Hosting, Equipment, Software und Arbeitszeit) und daher wird euch hier auf diesem Blog momentan noch Werbung angezeigt.

Daher möchte ich euch darum bitten, mich vielleicht durch eine kleine Spende zu Unterstützen.

Vielen Dank und lieben Gruß

Marcel

Patreon Spendenbild_250_114_transparent

Hi mein Name ist Marcel und ich bin der Herausgeber von diesem Blog ‚SecureBits‘. Ich selbst bin schon ewig mit der IT verbunden und interessiere mich hauptsächlich für die Themen IT-Sicherheit, Programmierung und Gesellschaft und betreibe diesen Blog aus Leidenschaft. Gerne setze ich mich mit meinen Beiträgen für eine sichere IT-Landschaft ein, um so das Recht auf Privatsphäre auch mit kleinen Mitteln zu schützen. Freue mich immer über Kommentare von euch und wenn es mir möglich ist, helfe ich gerne und kostenlos (im privaten Bereich, ansonsten bitte mir eine Anfrage schicken) weiter. Meine Idee ist es, Interessierten der Informationstechnik, einfache Schritt- für Schritt-Anleitungen hier im Blog sowie auf meine noch jungen YouTube-Kanal zur Verfügung zu stellen, damit ihr diese Anleitungen für eure Projekte nutzen könnt. Viel Spaß beim Lesen. Gruß Marcel

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert