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.