SSH-Sicherheitsbest Practices: Härten Ihres Servers und Clients
Härten Sie SSH mit Schlüsselauthentifizierung, Zugriff mit geringsten Privilegien, sichereren Client-Gewohnheiten, Firewall-Regeln, MFA und Brute-Force-Schutz.
SSH-Sicherheits-Best Practices: Härten Ihres Servers und Clients
SSH-Sicherheits-Best Practices sind wichtig, weil SSH oft die Haustür zu Ihren Servern ist. Eine schwache SSH-Konfiguration kann aus einem erratenen Passwort, einem gestohlenen Schlüssel oder einem Fehler bei vertrauenswürdigen Hosts vollen Shell-Zugriff machen.
Sie benötigen keine exotischen Einstellungen, um SSH gut zu härten. Beginnen Sie mit schlüsselbasiertem Login, eingeschränkten Benutzern, keinem direkten Root-Login, vorsichtigem Client-Verhalten und Protokollen, die Ihnen zeigen, wenn etwas nicht stimmt.
Serverseitige Sicherheitshärtung
Ihre SSH-Serverkonfiguration (sshd_config) legt die Regeln fest, wie Clients sich verbinden und authentifizieren.
1. Passwortauthentifizierung deaktivieren
Passwortauthentifizierung ist von Natur aus anfällig für Brute-Force-Angriffe. Der Ersatz durch SSH-Schlüsselauthentifizierung ist eine der effektivsten Sicherheitsverbesserungen, die Sie vornehmen können.
Warum: SSH-Schlüssel sind weitaus komplexer als Passwörter und können nicht leicht erraten oder durch Brute-Force-Methoden geknackt werden. Sie bieten eine viel stärkere Form der Authentifizierung.
Wie: Bearbeiten Sie Ihre
sshd_config-Datei (normalerweise unter/etc/ssh/sshd_config) und setzen SiePasswordAuthentication no. Starten Sie den SSH-Dienst nach den Änderungen neu:sudo sshd -t sudo systemctl reload sshdWichtig: Stellen Sie sicher, dass Sie die SSH-Schlüsselauthentifizierung erfolgreich eingerichtet und getestet haben, bevor Sie die Passwortauthentifizierung deaktivieren, um sich nicht auszusperren.
Auf einigen Distributionen heißt der Dienst ssh, nicht sshd. Verwenden Sie den Dienstnamen, den Ihr System bereitstellt, und halten Sie eine bestehende Sitzung offen, während Sie einen neuen Login testen.
2. Portänderungen als Rauschunterdrückung behandeln
Die Änderung des Standard-SSH-Ports von 22 kann automatisches Scan-Rauschen reduzieren. Es ist kein Ersatz für Schlüssel, Patches und Zugriffskontrolle.
Wie: Ändern Sie in
sshd_configdiePort-Direktive. Um beispielsweise Port2222zu verwenden:Port 2222Denken Sie daran, Ihre Firewall-Regeln zu aktualisieren, um Verkehr auf dem neuen Port zuzulassen, und geben Sie den Port beim Verbinden von Ihrem Client an:
ssh -p 2222 benutzer@ihre_server_ip
3. Benutzer- und Gruppen-Zugriff einschränken
Kontrollieren Sie, welche Benutzer und Gruppen sich über SSH anmelden dürfen.
AllowUsersundAllowGroups: Verwenden Sie diese Direktiven insshd_config, um explizit anzugeben, wer sich verbinden darf.AllowUsers admin benutzer1 AllowGroups sshusersDenyUsersundDenyGroups: Alternativ können Sie diese verwenden, um bestimmte Benutzer oder Gruppen zu blockieren.
4. Root-Login deaktivieren
Direkter Root-Login über SSH sollte deaktiviert werden, um zu verhindern, dass Angreifer sofort das mächtigste Konto angreifen. Stattdessen sollten sich Benutzer mit ihren eigenen Konten anmelden und sudo für administrative Aufgaben verwenden.
- Wie: Setzen Sie
PermitRootLogin noinsshd_config.
5. Leerlauf-Timeout und Keepalives konfigurieren
Verhindern Sie, dass unbeaufsichtigte, aktive SSH-Sitzungen auf unbestimmte Zeit offen bleiben.
ClientAliveIntervalundClientAliveCountMax: Diese serverseitigen Einstellungen senden in regelmäßigen Abständen Null-Pakete an den Client, um zu überprüfen, ob die Verbindung noch aktiv ist. Wenn der Client nachClientAliveCountMaxVersuchen nicht antwortet, trennt der Server die Sitzung.ClientAliveInterval 300 # Sende alle 5 Minuten ein Paket ClientAliveCountMax 2 # Trenne nach 2 fehlenden Antworten (10 Minuten)
6. Host-Schlüssel härten
Stellen Sie sicher, dass die Host-Schlüssel Ihres Servers geschützt und ordnungsgemäß verwaltet werden.
- Berechtigungen: Überprüfen Sie, ob die Host-Schlüsseldateien (z. B.
/etc/ssh/ssh_host_rsa_key) restriktive Berechtigungen (z. B.600) haben und root gehören. - Algorithmen: Bevorzugen Sie moderne Host-Schlüssel wie Ed25519, wenn Ihre Clients sie unterstützen. Löschen Sie keine vorhandenen Host-Schlüssel ohne Planung, da Clients dies als Änderung der Host-Identität betrachten.
- Rotation: Rotieren Sie Host-Schlüssel bewusst und kündigen Sie die neuen Fingerabdrücke über einen vertrauenswürdigen Kanal an.
Client-seitige Sicherheits-Best Practices
Die Sicherung Ihres Client-Rechners und Ihrer SSH-Schlüssel ist genauso wichtig wie die serverseitige Härtung.
1. Schützen Sie Ihre privaten Schlüssel
Ihr privater SSH-Schlüssel ist das Tor zu Ihren Servern. Behandeln Sie ihn mit größter Sorgfalt.
- Berechtigungen: Stellen Sie sicher, dass Ihre private Schlüsseldatei (z. B.
~/.ssh/id_rsa) strenge Berechtigungen (z. B.600oder400) hat, sodass nur Sie sie lesen können.chmod 600 ~/.ssh/id_rsa - Passphrasen: Verwenden Sie immer eine starke Passphrase, um Ihren privaten Schlüssel zu verschlüsseln. Dies fügt eine zusätzliche Sicherheitsebene hinzu, die die Passphrase erfordert, selbst wenn die Schlüsseldatei kompromittiert ist.
- Vermeiden Sie Kopieren: Teilen Sie Ihren privaten Schlüssel mit niemandem und speichern Sie ihn nicht an unsicheren Orten.
2. SSH-Agent-Weiterleitung vorsichtig verwenden
SSH-Agent-Weiterleitung ermöglicht es Ihnen, Ihre lokalen SSH-Schlüssel zu verwenden, um sich bei entfernten Servern zu authentifizieren, ohne Ihre privaten Schlüssel auf diese Server zu kopieren. Obwohl praktisch, kann es ein Sicherheitsrisiko darstellen, wenn der entfernte Server kompromittiert ist.
- Aktivieren:
ssh -A benutzer@ihre_server_ip - Best Practice: Deaktivieren Sie die Agent-Weiterleitung standardmäßig. Verwenden Sie sie nur für Hosts, denen Sie vertrauen, und bevorzugen Sie Alternativen wie Deploy-Keys, Bastion
ProxyJumpoder kurzlebige Anmeldeinformationen, wenn sie zu Ihrem Workflow passen.
3. Host-Schlüssel-Fingerabdrücke überprüfen
Wenn Sie sich zum ersten Mal mit einem SSH-Server verbinden, fordert Ihr Client Sie auf, den Host-Schlüssel-Fingerabdruck des Servers zu überprüfen. Dies hilft, Man-in-the-Middle-Angriffe zu verhindern.
- Wie: Überprüfen Sie den Fingerabdruck immer gegen eine vertrauenswürdige Quelle, wie Ihre Cloud-Konsole, Bereitstellungsprotokolle oder einen Administrator. Wenn sich der Fingerabdruck unerwartet ändert, stoppen Sie und untersuchen Sie, bevor Sie ihn akzeptieren.
4. SSH-Client-Software aktualisiert halten
Stellen Sie sicher, dass Ihre SSH-Client-Software (OpenSSH, PuTTY usw.) auf dem neuesten Stand ist, um von den neuesten Sicherheitspatches und Funktionen zu profitieren.
Fortgeschrittene Sicherheitsmaßnahmen
Über die grundlegenden Schritte hinaus sollten Sie diese fortgeschrittenen Techniken in Betracht ziehen:
1. Multi-Faktor-Authentifizierung
Fügen Sie MFA für menschlichen SSH-Zugriff hinzu, wo Ihre Umgebung dies unterstützt. Dies kombiniert normalerweise SSH-Schlüssel mit einem Einmalcode, Push-Genehmigung oder hardwaregestützter Authentifizierung.
- Werkzeuge: PAM-Module, Duo, Authentifikator-Apps und Hardware-Sicherheitsschlüssel können alle Teil eines SSH-MFA-Designs sein.
2. Fail2ban
Fail2ban durchsucht Protokolle nach wiederholten fehlgeschlagenen Authentifizierungsversuchen und kann temporäre Firewall-Blöcke für die Quell-IP hinzufügen. Protokollpfade variieren je nach Distribution; Debian und Ubuntu verwenden häufig /var/log/auth.log, während viele RHEL-Familien-Systeme über journald oder /var/log/secure protokollieren.
- Installation: Normalerweise über Paketmanager verfügbar (
sudo apt install fail2banodersudo yum install fail2ban). - Konfiguration: Konfigurieren Sie Jails in
/etc/fail2ban/jail.local, um SSH-Protokolle zu überwachen und Bannzeiten und Schwellenwerte zu definieren.
3. Firewall-Konfiguration
Setzen Sie eine Firewall (wie ufw, firewalld oder iptables) ein, um den Zugriff auf Ihren SSH-Port (ob Standard oder benutzerdefiniert) nur von vertrauenswürdigen IP-Adressen oder Bereichen zu beschränken.
- Beispiel (ufw):
sudo ufw allow from vertrauenswuerdige_ip to any port 22 sudo ufw enable
Fazit
Die Sicherung von SSH ist eine fortlaufende Gewohnheit. Verwenden Sie schlüsselbasierte Authentifizierung, deaktivieren Sie direkten Root-Login, beschränken Sie, wer sich verbinden kann, schützen Sie Ihre privaten Schlüssel und überprüfen Sie Host-Fingerabdrücke. Fügen Sie dann Firewall-Beschränkungen, MFA und Brute-Force-Schutz hinzu, wo das Risiko den zusätzlichen Aufwand rechtfertigt.