10 essentielle Best Practices zur Härtung Ihres SSH-Servers
Secure Shell (SSH) ist das Rückgrat der Remote-Serveradministration und bietet ein kryptografisches Netzwerkprotokoll für sichere Datenkommunikation, Remote-Befehlsausführung und andere Netzwerkdienste. Seine allgegenwärtige Natur macht es jedoch auch zu einem Hauptziel für Angreifer. Ein unzureichend gesicherter SSH-Server kann eine kritische Schwachstelle darstellen, die zu unbefugtem Zugriff, Datenlecks und Systemkompromittierung führt. Der Schutz Ihrer Remote-Zugriffsumgebung ist nicht nur eine gute Praxis; es ist eine Notwendigkeit.
Dieser Artikel beschreibt 10 essentielle Best Practices zur Härtung Ihrer SSH-Serverkonfiguration. Durch die Implementierung dieser kritischen Konfigurationsdirektiven, empfohlenen Berechtigungseinstellungen und Sicherheitstipps können Sie die Abwehrmaßnahmen Ihres Servers gegen unbefugten Zugriff und gängige Angriffsvektoren wie Brute-Force-Versuche und Credential Stuffing erheblich stärken. Die Befolgung dieser Richtlinien trägt dazu bei, dass Ihre Remote-Administration sicher bleibt und Ihre Serverinfrastruktur geschützt ist.
1. Ändern Sie den Standard-SSH-Port
Der Standard-SSH-Port ist 22. Dies ist allgemein bekannt und wird ständig von automatisierten Bots gescannt, die nach anfälligen Servern suchen. Das Ändern des Standardports bietet eine einfache, aber effektive Ebene der Obskurität. Obwohl dies allein keine Sicherheitsmaßnahme ist, reduziert es das Rauschen automatisierter Scans erheblich und hilft, viele opportunistische Angriffe zu vermeiden.
Um den Port zu ändern, bearbeiten Sie die Datei sshd_config, die sich normalerweise unter /etc/ssh/sshd_config befindet.
sudo nano /etc/ssh/sshd_config
Suchen Sie die Zeile Port 22 (oder fügen Sie sie hinzu, falls sie nicht existiert) und ändern Sie 22 in eine nicht standardmäßige, nicht zugewiesene Portnummer (z. B. sind 2222, 49152-65535 Benutzer-/dynamische Ports).
#Port 22
Port 2222
Starten Sie nach dem Speichern der Datei den SSH-Dienst neu. Denken Sie daran, Ihre Firewall-Regeln zu aktualisieren, um Datenverkehr auf dem neuen Port zuzulassen und den alten zu blockieren.
sudo systemctl restart sshd
# Für UFW (Uncomplicated Firewall):
sudo ufw allow 2222/tcp
sudo ufw deny 22/tcp
sudo ufw reload
# Für Firewalld:
sudo firewall-cmd --permanent --add-port=2222/tcp
sudo firewall-cmd --permanent --remove-port=22/tcp
sudo firewall-cmd --reload
Tipp: Halten Sie immer mindestens eine SSH-Sitzung geöffnet, während Sie Konfigurationsänderungen testen. Wenn Sie ausgesperrt werden, können Sie Änderungen in der aktiven Sitzung rückgängig machen.
2. Deaktivieren Sie den Root-Login
Der direkte Root-Login über SSH wird dringend abgeraten. Der Benutzer root hat uneingeschränkte Berechtigungen, was ihn zu einem Hauptziel für Angreifer macht. Wenn ein Angreifer Root-Zugriff erhält, hat er die volle Kontrolle über Ihr System. Melden Sie sich stattdessen als normaler, nicht privilegierter Benutzer an und verwenden Sie dann sudo, um administrative Aufgaben auszuführen.
In sshd_config suchen Sie die Direktive PermitRootLogin und setzen sie auf no.
PermitRootLogin no
Speichern und starten Sie den SSH-Dienst neu:
sudo systemctl restart sshd
3. Verwenden Sie schlüsselbasierte Authentifizierung
Passwortbasierte Authentifizierung ist anfällig für Brute-Force-Angriffe und Wörterbuchangriffe, insbesondere wenn Benutzer schwache Passwörter wählen. Die SSH-schlüsselbasierte Authentifizierung ist eine weitaus sicherere Alternative. Sie verwendet ein Paar kryptografischer Schlüssel: einen öffentlichen Schlüssel, der auf dem Server gespeichert ist, und einen privaten Schlüssel, der auf Ihrem lokalen Rechner aufbewahrt wird. Nur Clients mit dem übereinstimmenden privaten Schlüssel können sich authentifizieren.
Schritte zur Implementierung der schlüsselbasierten Authentifizierung (kurz):
- Generieren Sie ein Schlüsselpaar auf Ihrem lokalen Rechner:
bash ssh-keygen -t ed25519 -b 4096 -C "[email protected]"ed25519ist ein moderner, sicherer Algorithmus.rsaist ebenfalls üblich, oft mit-b 4096für die Schlüsselfestigkeit.
- Kopieren Sie den öffentlichen Schlüssel auf Ihren Server:
bash ssh-copy-id -i ~/.ssh/id_ed25519.pub benutzer@ihre_server_ip
Alternativ können Sie den Inhalt von~/.ssh/id_ed25519.pubmanuell an~/.ssh/authorized_keysauf dem Server für den Benutzer anhängen, als den Sie sich anmelden möchten. -
Stellen Sie die richtigen Berechtigungen auf dem Server sicher:
~/.ssh-Verzeichnis:700(nur Lese-/Schreib-/Ausführrechte für den Besitzer)~/.ssh/authorized_keys-Datei:600(nur Lese-/Schreibrechte für den Besitzer)
bash chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
4. Deaktivieren Sie die Passwortauthentifizierung
Sobald Sie die schlüsselbasierte Authentifizierung für alle notwendigen Benutzer erfolgreich eingerichtet und getestet haben, sollten Sie die Passwortauthentifizierung vollständig deaktivieren. Dadurch wird die schwächste Stelle der SSH-Sicherheit beseitigt, indem Brute-Force-Passwortangriffe unmöglich gemacht werden.
Setzen Sie in sshd_config PasswordAuthentication auf no.
PasswordAuthentication no
Speichern und starten Sie den SSH-Dienst neu:
sudo systemctl restart sshd
Warnung: Deaktivieren Sie niemals die Passwortauthentifizierung, bevor Sie überprüft haben, ob die schlüsselbasierte Authentifizierung für alle Benutzer, die Zugriff benötigen, korrekt funktioniert. Andernfalls riskieren Sie, sich selbst vom Server auszusperren.
5. Beschränken Sie den Benutzerzugriff
Standardmäßig kann jedes Benutzerkonto auf dem Server versuchen, sich über SSH anzumelden. Sie können den SSH-Zugriff auf bestimmte Benutzer oder Gruppen beschränken und so die Angriffsfläche minimieren.
Verwenden Sie die Direktiven AllowUsers oder AllowGroups in sshd_config.
Um nur bestimmten Benutzern (z. B. adminuser, devuser) den Zugriff zu erlauben:
AllowUsers adminuser devuser
Um nur Mitgliedern einer bestimmten Gruppe (z. B. sshusers) den Zugriff zu erlauben:
AllowGroups sshusers
Tipp: Es ist im Allgemeinen besser, AllowGroups zu verwenden, wenn Sie mehrere Benutzer haben. Erstellen Sie eine dedizierte Gruppe für den SSH-Zugriff und fügen Sie autorisierte Benutzer hinzu.
sudo groupadd sshusers
sudo usermod -aG sshusers adminuser
sudo usermod -aG sshusers devuser
Speichern und starten Sie SSH nach den Änderungen neu.
6. Verwenden Sie starke Passphrasen für SSH-Schlüssel
Obwohl die schlüsselbasierte Authentifizierung robust ist, ist Ihr privater Schlüssel immer noch ein kritisches Gut. Wenn ein Angreifer Zugriff auf Ihren lokalen Rechner erhält, könnte er Ihren privaten Schlüssel stehlen. Eine starke Passphrase verschlüsselt Ihren privaten Schlüssel und erfordert die Passphrase, um ihn vor der Verwendung zu entsperren. Dies fügt eine weitere Sicherheitsebene hinzu und schützt Ihren Schlüssel, selbst wenn er in die falschen Hände gerät.
Wenn Sie Ihren SSH-Schlüssel generieren (wie in Schritt 3), werden Sie aufgefordert, eine Passphrase einzugeben. Wählen Sie eine lange, komplexe und einprägsame Passphrase, die sich von allen anderen von Ihnen verwendeten Passwörtern unterscheidet.
7. Implementieren Sie Verbindungslimitierung (Fail2Ban)
Selbst mit schlüsselbasierter Authentifizierung ist ein SSH-Server immer noch Verbindungsversuchen ausgesetzt. Tools wie Fail2Ban können SSH-Protokolle auf wiederholte fehlgeschlagene Anmeldeversuche von derselben IP-Adresse überwachen und diese IP-Adresse automatisch für einen bestimmten Zeitraum über Firewall-Regeln blockieren.
Installation (Beispiel für Debian/Ubuntu):
sudo apt update
sudo apt install fail2ban
Fail2Ban funktioniert out-of-the-box mit Standard-SSH-Regeln, aber Sie können seine Konfiguration anpassen, indem Sie jail.conf nach jail.local kopieren und bearbeiten.
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
Innerhalb von jail.local können Sie bantime, findtime und maxretry für den Abschnitt [sshd] anpassen.
[sshd]
enabled = true
port = 2222 # Ihr neuer SSH-Port
logpath = %(sshd_log)s
maxretry = 3
bantime = 1h # Sperre für 1 Stunde
findtime = 10m # Suche nach 3 Fehlern innerhalb von 10 Minuten
Starten Sie Fail2Ban nach Konfigurationsänderungen neu:
sudo systemctl restart fail2ban
8. Halten Sie Ihre SSH-Server-Software auf dem neuesten Stand
Software-Schwachstellen werden ständig entdeckt und gepatcht. Wenn Sie veraltete SSH-Daemon-Software (OpenSSH) ausführen, sind Sie möglicherweise bekannten Exploits ausgesetzt. Das regelmäßige Aktualisieren der Software Ihres Servers, einschließlich des OpenSSH-Serverpakets, ist entscheidend für die Behebung von Sicherheitslücken.
# Für Debian/Ubuntu:
sudo apt update && sudo apt upgrade
# Für CentOS/RHEL:
sudo yum update
# oder
sudo dnf update
Konfigurieren Sie Ihr System so, dass Sicherheitsupdates gegebenenfalls automatisch angewendet werden, oder legen Sie eine Routine für manuelle Updates fest.
9. Überwachen Sie SSH-Protokolle auf verdächtige Aktivitäten
Auch mit robusten präventiven Maßnahmen ist Wachsamkeit entscheidend. Überprüfen Sie regelmäßig die SSH-Authentifizierungsprotokolle, um ungewöhnliche Muster, fehlgeschlagene Anmeldeversuche oder unbefugte Zugriffsversuche zu erkennen. Dies hilft Ihnen, potenzielle Sicherheitsverletzungen oder laufende Angriffe zu identifizieren.
SSH-Protokolle befinden sich normalerweise unter:
/var/log/auth.log(Debian/Ubuntu)/var/log/secure(CentOS/RHEL)- Mit
journalctl(systemd-Systeme):
bash sudo journalctl -u sshd -f
Suchen Sie nach wiederholten fehlgeschlagenen Authentifizierungsversuchen, Anmeldungen von ungewöhnlichen IP-Adressen oder erfolgreichen Anmeldungen von unbekannten Benutzern. Tools wie Logwatch oder Elastic Stack (ELK) können die Protokollanalyse und Alarmierung für größere Umgebungen automatisieren.
10. Konfigurieren Sie Firewall-Regeln, um den Zugriff einzuschränken
Eine Firewall ist Ihre erste Verteidigungslinie. Standardmäßig sollte sie allen eingehenden Datenverkehr blockieren, mit Ausnahme der Dienste, die Sie explizit freigeben müssen. Für SSH bedeutet dies, Verbindungen nur auf Ihrem gewählten Port (z. B. 2222) zuzulassen und idealerweise nur von bestimmten vertrauenswürdigen IP-Adressen oder Netzwerken.
Beispiel mit UFW (Uncomplicated Firewall):
SSH von einer bestimmten IP-Adresse 192.168.1.100 auf Port 2222 zulassen:
sudo ufw allow from 192.168.1.100 to any port 2222
SSH von einem bestimmten Subnetz 192.168.1.0/24 zulassen:
sudo ufw allow from 192.168.1.0/24 to any port 2222
Beispiel mit Firewalld (CentOS/RHEL):
SSH von einer bestimmten IP-Adresse 192.168.1.100 auf Port 2222 zulassen:
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port port=2222 protocol="tcp" accept'
sudo firewall-cmd --reload
Warnung: Wenn Sie einen Server von einer dynamischen IP-Adresse aus verwalten, seien Sie vorsichtig mit strengen Firewall-Regeln. Möglicherweise müssen Sie den Zugriff aus einem größeren Bereich zulassen oder ein VPN verwenden.
Zusätzliche Härtungstipps
Erwägen Sie über die essentiellen 10 hinaus folgende Direktiven für noch mehr Sicherheit:
MaxAuthTries: Begrenzt die Anzahl der Authentifizierungsversuche pro Verbindung. Standard ist 6. Eine niedrigere Einstellung (z. B.3) reduziert die Chancen für Brute-Force-Angriffe. Wird insshd_configfestgelegt.
config MaxAuthTries 3LoginGraceTime: Begrenzt die Zeit, die einem Benutzer für die Authentifizierung zur Verfügung steht. Standard sind 2 Minuten. Eine niedrigere Einstellung (z. B.30s) reduziert das Zeitfenster für langsame Angriffe.
config LoginGraceTime 30sClientAliveIntervalundClientAliveCountMax: Verhindert, dass ruhende SSH-Sitzungen unbegrenzt offen bleiben.ClientAliveIntervalsendet alle X Sekunden ein Null-Paket. WennClientAliveCountMax(Standard 3) Antworten ausbleiben, wird die Verbindung beendet.
config ClientAliveInterval 300 ClientAliveCountMax 0 # Deaktivieren Sie die Client-Alive-Überprüfung, wenn Sitzungen unbegrenzt bestehen bleiben sollenBanner: Zeigt eine Warnmeldung vor der Authentifizierung an. Dies dient als rechtlicher Hinweis für potenzielle unbefugte Benutzer.
config Banner /etc/issue.net
Erstellen Sie die Datei/etc/issue.netmit Ihrer gewünschten Warnmeldung.
Fazit
Die Härtung Ihres SSH-Servers ist ein fortlaufender Prozess, keine einmalige Einrichtung. Durch die Implementierung dieser 10 essentiellen Best Practices – vom Ändern von Standardports und Deaktivieren des Root-Logins bis hin zur Erzwingung der schlüsselbasierten Authentifizierung und der Bereitstellung von Firewalls – schaffen Sie eine robuste Sicherheitslage für Ihren Remote-Zugriff. Denken Sie immer daran, Änderungen sorgfältig zu testen, Ihre Systeme auf dem neuesten Stand zu halten und regelmäßig Protokolle auf verdächtige Aktivitäten zu überwachen. Konsequente Wachsamkeit ist der Schlüssel zur Aufrechterhaltung einer sicheren und zuverlässigen Remote-Administrationsumgebung.
Diese Praktiken sind grundlegend für jeden Serveradministrator und reduzieren Ihre Anfälligkeit für gängige Cyberbedrohungen erheblich und schützen Ihre Serverinfrastruktur vor unbefugtem Zugriff und potenzieller Kompromittierung.