Best Practices zur Härtung der SSH-Sicherheit auf Linux-Servern

Sichern Sie Ihren Linux-Server sofort, indem Sie diese wesentlichen SSH-Härtungstechniken beherrschen. Dieser Expertenleitfaden bietet umsetzbare Schritte, wobei der Schwerpunkt auf Konfigurationsänderungen in `sshd_config` liegt. Erfahren Sie, wie Sie den riskanten Root-Login deaktivieren, eine obligatorische schlüsselbasierte Authentifizierung implementieren, um schwache Passwörter zu eliminieren, den Standardport ändern und Fail2Ban für eine effektive Ratenbegrenzung gegen Brute-Force-Angriffe installieren. Schützen Sie Ihr System, indem Sie SSH in einen robusten, sicheren Kanal umwandeln.

Bewährte Methoden zur Härtung der SSH-Sicherheit auf Linux-Servern

SSH ist normalerweise die erste Tür, die Sie auf einem Linux-Server öffnen. Daher sollte die Härtung der SSH-Sicherheit erfolgen, bevor Sie diesen Host dem Internet aussetzen. Bots versuchen ständig schwache Passwörter, wiederverwendete Anmeldeinformationen und Standardkonten auf Port 22.

Das Ziel ist einfach: Halten Sie den Fernzugriff für Sie nutzbar und für Angreifer schmerzhaft. Beginnen Sie mit einer zweiten Terminalsitzung, behalten Sie Ihre aktuelle SSH-Sitzung offen und testen Sie jede Änderung, bevor Sie den Daemon neu starten.

Sichern und Testen Sie die Konfiguration zuerst

Bevor Sie /etc/ssh/sshd_config bearbeiten, erstellen Sie ein Backup. Ein Tippfehler kann Sie vom Server aussperren.

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak_$(date +%F)

Überprüfen Sie nach der Bearbeitung die Syntax:

sudo sshd -t

Wenn der Test bestanden wird, laden Sie SSH neu oder starten Sie es neu. Der Dienstname ist üblicherweise sshd auf RHEL-basierten Systemen und ssh auf Debian/Ubuntu:

sudo systemctl restart sshd
# oder
sudo systemctl restart ssh

1. Deaktivieren Sie die Root-Anmeldung

Die direkte root-Anmeldung gibt einem Angreifer von vornherein den wertvollsten Benutzernamen. Verwenden Sie ein normales Benutzerkonto und erhöhen Sie dann die Rechte mit sudo, wenn Sie administrative Zugriffe benötigen.

Konfigurationsschritt

Öffnen Sie /etc/ssh/sshd_config und suchen Sie die Direktive PermitRootLogin. Ändern Sie ihren Wert auf no.

# Vorher:
# PermitRootLogin yes

# Nachher (Bewährte Methode):
PermitRootLogin no

Bevor Sie SSH neu starten, bestätigen Sie, dass Sie sich als Standardbenutzer mit sudo-Rechten anmelden können.

2. Erzwingen Sie die schlüsselbasierte Authentifizierung

Passwortauthentifizierung ist im großen Maßstab leicht angreifbar. SSH-Schlüssel sind schwerer zu erraten, einfacher zu rotieren und für die tägliche Administration sicherer, wenn Sie den privaten Schlüssel mit einer Passphrase schützen.

Schlüssel generieren und installieren

  1. Generieren Sie das Schlüsselpaar auf Ihrem lokalen Rechner:
    ssh-keygen -t ed25519 -C "[email protected]"
    
  2. Kopieren Sie den öffentlichen Schlüssel auf den Server:
    ssh-copy-id -i ~/.ssh/id_ed25519 benutzer@ihre_server_ip
    

Deaktivieren Sie die Passwortauthentifizierung

Sobald Sie bestätigt haben, dass Sie sich erfolgreich mit Ihrem SSH-Schlüssel anmelden können, deaktivieren Sie die Passwortauthentifizierung vollständig.

# Passwörter deaktivieren
PasswordAuthentication no

# Sicherstellen, dass Schlüssel aktiviert sind
PubkeyAuthentication yes

Ed25519 ist eine gute Standardeinstellung für neue Schlüssel. Wenn Sie aus Kompatibilitätsgründen mit älteren Systemen RSA benötigen, verwenden Sie einen großen Schlüssel, z. B. 4096 Bit.

3. Erwägen Sie, den Standard-SSH-Port zu ändern

Das Ändern von SSH von TCP-Port 22 auf einen nicht standardmäßigen Port kann laute automatisierte Scans reduzieren. Es ist kein Ersatz für Schlüssel, Zugriffskontrollen oder Rate-Limiting, da jeder den offenen Port dennoch mit einem Scan entdecken kann.

Konfigurationsschritt

Ändern Sie in /etc/ssh/sshd_config die Direktive Port:

# Vorher:
# Port 22

# Nachher (Beispiel für nicht standardmäßigen Port):
Port 22222

Aktualisieren Sie Ihre Firewall und alle Cloud-Sicherheitsgruppen, bevor Sie SSH neu starten. Andernfalls lauscht Ihr neuer SSH-Daemon möglicherweise auf einem Port, den Sie nicht erreichen können.

Beispiel mit firewalld (CentOS/RHEL):

sudo firewall-cmd --permanent --add-port=22222/tcp
sudo firewall-cmd --reload

4. Beschränken Sie den Zugriff auf bestimmte Benutzer und Gruppen

Wenn nur eine kleine Gruppe von Personen SSH verwenden soll, geben Sie dies in der sshd_config an. Dies verhindert, dass vergessene lokale Konten zu entfernten Einstiegspunkten werden.

Konfigurationsdirektiven

Verwenden Sie eine oder beide der folgenden Direktiven in der sshd_config:

  1. Bestimmte Benutzer zulassen:
    AllowUsers alice bob
    
  2. Bestimmte Gruppen zulassen:
    AllowGroups sshaccess admins
    

Wenn diese Direktiven vorhanden sind, wird jedem Benutzer oder jeder Gruppe, der/die nicht explizit aufgeführt ist, der Zugriff verweigert.

5. Behalten Sie moderne SSH-Standardeinstellungen bei und deaktivieren Sie Legacy-Methoden

Aktuelle OpenSSH-Versionen verwenden bereits SSH-Protokoll 2; die Unterstützung für das ältere Protokoll 1 wurde aus modernen OpenSSH-Versionen entfernt. Vermeiden Sie es, alte Härtungsausschnitte zu kopieren, die nicht unterstützte Protocol-Direktiven oder eine veraltete Chiffreliste enthalten. Diese können SSH nach einem Upgrade beschädigen.

Konzentrieren Sie sich darauf, Legacy-Vertrauensmechanismen zu deaktivieren, es sei denn, Sie wissen, dass Sie sie benötigen:

HostbasedAuthentication no
IgnoreRhosts yes
PermitEmptyPasswords no

Wenn Ihre Organisation eine benutzerdefinierte Chiffre-, MAC- oder Schlüsselaustauschrichtlinie benötigt, überprüfen Sie, was Ihr installierter Server unterstützt, bevor Sie es ändern:

sshd -T | grep -E '^(ciphers|macs|kexalgorithms) '

Wenden Sie dann nur eine getestete Richtlinie an, die zu Ihrer Client-Basis passt. Eine zu strenge Liste kann ältere Automatisierungshosts aussperren.

6. Fügen Sie Rate-Limiting mit Fail2Ban hinzu

Selbst bei schlüsselbasierter Authentifizierung verschwenden wiederholte Sondierungen Ressourcen und überladen Protokolle. Fail2Ban überwacht Authentifizierungsprotokolle und fügt nach wiederholten Fehlversuchen temporäre Firewall-Sperren hinzu.

  1. Installieren Sie Fail2Ban:

    # Debian/Ubuntu
    sudo apt update && sudo apt install fail2ban
    
    # RHEL/CentOS/Fedora
    sudo dnf install fail2ban
    
  2. Aktivieren Sie den sshd-„Jail“. Viele Systeme werden mit einer Standardkonfiguration ausgeliefert, aber Sie sollten lokale Überschreibungen in /etc/fail2ban/jail.local oder einer Datei unter /etc/fail2ban/jail.d/ vornehmen.

    [sshd]
    enabled = true
    port = 22222
    maxretry = 5
    bantime = 1h
    
  3. Starten Sie den Dienst:

    sudo systemctl enable --now fail2ban
    

Wenn Sie den SSH-Port geändert haben, lassen Sie den Fail2Ban-Jail mit dem neuen Port übereinstimmen.

7. Optimieren Sie Sitzungs- und Authentifizierungseinstellungen

Diese Einstellungen helfen, inaktive Sitzungen zu schließen und schwache Authentifizierungspfade zu entfernen:

Direktive Empfohlener Wert Zweck
ClientAliveInterval 300 Sendet alle 300 Sekunden eine serverseitige Keepalive-Überprüfung.
ClientAliveCountMax 3 Trennt die Verbindung nach drei unbeantworteten Überprüfungen.
UsePAM yes Aktiviert Pluggable Authentication Modules (PAM) für zusätzliche lokale Systemsicherheitsrichtlinien.
PermitEmptyPasswords no Blockiert Konten mit leeren Passwörtern bei der Anmeldung.
MaxAuthTries 3 Begrenzt wiederholte Authentifizierungsversuche pro Verbindung.
X11Forwarding no Deaktiviert X11-Weiterleitung, es sei denn, Sie verwenden sie tatsächlich.

Härtungs-Checkliste

Verwenden Sie diese Checkliste, um sicherzustellen, dass Ihr Server die grundlegenden SSH-Härtungsstandards erfüllt:

  1. Erstellen Sie ein Backup der sshd_config, bevor Sie Änderungen vornehmen.
  2. Setzen Sie PermitRootLogin no.
  3. Setzen Sie PasswordAuthentication no (nach der Schlüsseleinrichtung).
  4. Ändern Sie den Port auf einen nicht standardmäßigen Wert.
  5. Aktualisieren Sie die Firewall, um den neuen Port zuzulassen.
  6. Verwenden Sie AllowUsers oder AllowGroups, um den Zugriff einzuschränken.
  7. Deaktivieren Sie Legacy-Vertrauensmethoden wie HostbasedAuthentication.
  8. Installieren und konfigurieren Sie Fail2Ban.
  9. Überprüfen Sie die Konfiguration mit sshd -t, bevor Sie neu starten.

Die Härtung der SSH-Sicherheit funktioniert am besten als abgestufte Verteidigung. Schlüssel stoppen Passwortraten, Benutzereinschränkungen reduzieren, wer sich verbinden kann, Firewall-Regeln begrenzen, woher Verbindungen kommen, und Fail2Ban verlangsamt wiederholte Sondierungen. Behalten Sie eine funktionierende Sitzung offen, während Sie testen, und dokumentieren Sie dann den neuen Port und die Anmeldemethode für jeden, der den Server betreibt.