Secure Shell (SSH)

Secure Shell (SSH) ist ein essentielles Tool in der Linux-Welt, das es Administratoren und Benutzern ermöglicht, sichere Verbindungen zu entfernten Servern herzustellen. SSH bietet nicht nur verschlüsselte Verbindungen für sichere Remote-Anmeldungen, sondern auch weitere Funktionen wie sichere Dateiübertragungen und Tunneling. In diesem Blog-Beitrag werden wir die Grundlagen von SSH erklären, sowie erweiterte Techniken zur Absicherung und Konfiguration von SSH vorstellen.

1. Was ist SSH?

SSH (Secure Shell) ist ein Netzwerkprotokoll, das sichere Kommunikation zwischen zwei Systemen über ein unsicheres Netzwerk ermöglicht. Es ersetzt ältere Protokolle wie Telnet, die Benutzerdaten im Klartext übertragen und daher anfällig für Angriffe sind.

SSH arbeitet standardmäßig auf Port 22 und verwendet asymmetrische Kryptographie, um Verbindungen zu authentifizieren und zu verschlüsseln. Das bedeutet, dass ein Schlüsselpaar – ein öffentlicher und ein privater Schlüssel – verwendet wird, um eine sichere Verbindung herzustellen.

2. SSH installieren

SSH ist bei den meisten Linux-Distributionen bereits vorinstalliert. Falls es jedoch fehlt, kann der SSH-Server mit folgendem Befehl installiert werden:

Auf Debian/Ubuntu-basierten Systemen:

sudo apt update
sudo apt install openssh-server

Auf CentOS/Fedora-basierten Systemen:

sudo yum install openssh-server

Nach der Installation können Sie den SSH-Dienst starten:

sudo systemctl start ssh

Um sicherzustellen, dass SSH beim Booten gestartet wird:

sudo systemctl enable ssh

3. Verbindung zu einem Remote-Server herstellen

Um eine Verbindung zu einem Remote-Server herzustellen, verwenden Sie den folgenden Befehl:

ssh username@hostname_or_ip_address

Beispiel:

ssh user@192.168.1.100

Dabei wird der Benutzer user auf dem Server mit der IP-Adresse 192.168.1.100 angemeldet. SSH fragt nach dem Passwort des Benutzers, und nach erfolgreicher Authentifizierung wird eine sichere Verbindung hergestellt.

4. SSH-Schlüsselpaare für Passwortlose Anmeldung

Eine der besten Sicherheitspraktiken für SSH ist die Verwendung von Schlüsselpaaren anstelle von Passwörtern. SSH-Schlüsselpaare bestehen aus einem öffentlichen Schlüssel, der auf dem Remote-Server gespeichert wird, und einem privaten Schlüssel, der sicher auf dem lokalen System aufbewahrt wird. Der Vorteil hierbei ist, dass Sie sich ohne Passwort anmelden können, solange Sie den privaten Schlüssel besitzen.

Generieren eines SSH-Schlüsselpaares

Um ein neues Schlüsselpaar zu erstellen, verwenden Sie den Befehl ssh-keygen:

ssh-keygen -t rsa -b 4096

Dieser Befehl erstellt einen RSA-Schlüssel mit einer Länge von 4096 Bit. Sie können den Pfad für die Schlüsseldateien angeben oder die Standardwerte akzeptieren (normalerweise in ~/.ssh/ gespeichert).

Öffentlichen Schlüssel auf den Server kopieren

Verwenden Sie ssh-copy-id, um den öffentlichen Schlüssel auf den Remote-Server zu kopieren:

ssh-copy-id user@remote_server_ip

Dadurch wird der öffentliche Schlüssel dem Server hinzugefügt. Danach können Sie sich ohne Passwort mit SSH anmelden:

ssh user@remote_server_ip

5. SSH absichern

Da SSH häufig das Ziel von Brute-Force-Angriffen ist, sollten einige Sicherheitsmaßnahmen implementiert werden, um den Dienst zu schützen.

a) Ändern des Standardports

Da der SSH-Dienst standardmäßig auf Port 22 läuft, ist es ratsam, diesen zu ändern, um einfache automatisierte Angriffe zu vermeiden. Bearbeiten Sie die sshd_config-Datei:

sudo nano /etc/ssh/sshd_config

Suchen Sie die Zeile Port 22 und ändern Sie den Wert auf einen anderen, weniger bekannten Port, zum Beispiel Port 2222

Port 2222

Speichern Sie die Datei und starten Sie den SSH-Dienst neu:

sudo systemctl restart ssh

Nun müssen Sie bei der Verbindung den neuen Port angeben:

ssh -p 2222 user@remote_server_ip
b) Passwort-Authentifizierung deaktivieren

Wenn Sie ausschließlich SSH-Schlüssel zur Authentifizierung verwenden, können Sie die Passwort-Authentifizierung komplett deaktivieren, um zusätzliche Sicherheit zu gewährleisten. Bearbeiten Sie die sshd_config:

PasswordAuthentication no

Nachdem Sie die Änderung gespeichert haben, starten Sie den SSH-Dienst neu:

sudo systemctl restart ssh
c) Root-Zugriff deaktivieren

Ein weiterer wichtiger Sicherheitsaspekt ist es, direkte Root-Anmeldungen über SSH zu verbieten. Dies erschwert es Angreifern, sich mit den höchsten Privilegien auf Ihrem System anzumelden. In der sshd_config-Datei finden Sie den Eintrag PermitRootLogin und ändern ihn auf no:

PermitRootLogin no

Dies verhindert, dass sich der Root-Benutzer direkt per SSH anmeldet.

d) Fail2ban für SSH-Brute-Force-Schutz

Fail2ban ist ein Dienst, der wiederholte fehlgeschlagene Anmeldeversuche erkennt und die IP-Adresse vorübergehend sperrt. Installieren Sie Fail2ban:

sudo apt install fail2ban

Erstellen Sie eine Konfigurationsdatei für SSH:

sudo nano /etc/fail2ban/jail.local

Fügen Sie die folgende Konfiguration hinzu:

[sshd]
enabled = true
port = 2222 # Falls Sie den Standardport geändert haben
maxretry = 5

Starten Sie Fail2ban neu:

sudo systemctl restart fail2ban

Nun wird jede IP-Adresse, die mehr als fünfmal versucht, sich über SSH anzumelden, automatisch für eine bestimmte Zeit gesperrt.

6. SSH-Tunneling und Port-Weiterleitung

Eine erweiterte Funktion von SSH ist das Tunneling. Es ermöglicht, über eine sichere SSH-Verbindung andere Dienste zu tunneln, die normalerweise unsicher wären. Zum Beispiel können Sie einen Webserver auf Ihrem lokalen Computer über SSH zugänglich machen:

ssh -L 8080:localhost:80 user@remote_server_ip

Dieser Befehl leitet den lokalen Port 8080 an den Port 80 auf dem Remote-Server weiter, sodass Sie über http://localhost:8080 auf die Website des Remote-Servers zugreifen können.

7. SFTP – Sichere Dateiübertragung

Neben der Remote-Anmeldung ermöglicht SSH auch die sichere Übertragung von Dateien mittels SFTP (SSH File Transfer Protocol). Um eine Datei sicher auf einen Remote-Server zu kopieren, verwenden Sie den folgenden Befehl:

sftp user@remote_server_ip

Einmal eingeloggt, können Sie Dateien mit den Befehlen put und get übertragen. Zum Beispiel:

put /pfad/zur/datei.txt
get /remote/pfad/datei.txt

8. SSH-Logs und Überwachung

Es ist wichtig, die SSH-Logs regelmäßig zu überprüfen, um verdächtige Aktivitäten zu erkennen. Die SSH-Logs befinden sich normalerweise in /var/log/auth.log (Debian/Ubuntu) oder /var/log/secure (CentOS/Fedora). Um die letzten Anmeldeversuche zu überprüfen, verwenden Sie den Befehl:

sudo cat /var/log/auth.log | grep "sshd"

9. Zusammenfassung

SSH ist ein leistungsstarkes und sicheres Werkzeug, um Remote-Verbindungen zu Linux-Systemen zu verwalten. Durch das Einrichten von SSH-Schlüsseln, die Änderung des Standard-Ports, das Deaktivieren der Passwort-Authentifizierung und das Hinzufügen zusätzlicher Schutzmechanismen wie Fail2ban, können Sie die Sicherheit Ihres SSH-Dienstes erheblich verbessern. Mit SSH können Sie nicht nur auf entfernte Server zugreifen, sondern auch sichere Dateiübertragungen und Tunneling durchführen, was es zu einem unverzichtbaren Werkzeug in der Systemadministration macht.

Schreibe einen Kommentar

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