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 Sie PasswordAuthentication no. Starten Sie den SSH-Dienst nach den Änderungen neu:

    sudo sshd -t
    sudo systemctl reload sshd
    

    Wichtig: 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_config die Port-Direktive. Um beispielsweise Port 2222 zu verwenden:

    Port 2222
    

    Denken 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.

  • AllowUsers und AllowGroups: Verwenden Sie diese Direktiven in sshd_config, um explizit anzugeben, wer sich verbinden darf.
    AllowUsers admin benutzer1
    AllowGroups sshusers
    
  • DenyUsers und DenyGroups: 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 no in sshd_config.

5. Leerlauf-Timeout und Keepalives konfigurieren

Verhindern Sie, dass unbeaufsichtigte, aktive SSH-Sitzungen auf unbestimmte Zeit offen bleiben.

  • ClientAliveInterval und ClientAliveCountMax: 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 nach ClientAliveCountMax Versuchen 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. 600 oder 400) 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 ProxyJump oder 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 fail2ban oder sudo 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.