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.

41 Aufrufe

Best Practices für die Härtung der SSH-Sicherheit auf Linux-Servern

Secure Shell (SSH) ist das Rückgrat der Remote-Verwaltung für praktisch jeden Linux-Server. Obwohl unglaublich leistungsstark und im Allgemeinen standardmäßig sicher, ist SSH auch das primäre Ziel für böswillige Akteure, die versuchen, unautorisierten Zugriff durch Brute-Force-Angriffe, Wörterbuchangriffe und Credential-Stuffing zu erlangen.

Die Härtung Ihrer SSH-Konfiguration ist der wohl kritischste Schritt zur Absicherung einer neuen Linux-Bereitstellung. Durch die Implementierung einiger zentraler Best Practices – die über die einfache Benutzername-Passwort-Authentifizierung hinausgehen – können Sie Ihre Angriffsfläche drastisch reduzieren, das Rauschen in Ihren Protokollen minimieren und sicherstellen, dass nur autorisierte Benutzer, die sichere Methoden verwenden, auf Ihr System zugreifen können.

Dieser Leitfaden beschreibt wesentliche, umsetzbare Schritte zur Absicherung des SSH-Dienstes auf jeder Linux-Distribution, wobei der Fokus auf der primären Konfigurationsdatei liegt: /etc/ssh/sshd_config.


Voraussetzung: Sicherung der Konfiguration

Bevor Sie Änderungen an der Konfiguration des SSH-Daemons (sshd_config) vornehmen, ist es entscheidend, eine Sicherung zu erstellen. Eine falsche Konfiguration kann Sie von Ihrem Server ausschließen. Testen Sie Änderungen immer gründlich.

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

Nach dem Bearbeiten der Datei prüfen Sie die Syntax, bevor Sie den Dienst neu starten:

sudo sshd -t

Wenn der Test erfolgreich ist, können Sie den SSH-Dienst sicher neu starten (Befehl variiert je nach Distribution):

# Für Systeme, die systemd verwenden (die meisten modernen Distributionen)
sudo systemctl restart sshd

1. Root-Login deaktivieren

Das direkte Anmelden als root-Benutzer ist eines der größten Sicherheitsrisiken. Wenn ein Angreifer erfolgreich ein Passwort per Brute-Force knackt, hat er sofort die vollständige Kontrolle über das System. Stattdessen sollten sich Nicht-Root-Benutzer zuerst anmelden und Berechtigungen mit sudo erhöhen.

Konfigurationsschritt

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

# Vorher:
# PermitRootLogin yes

# Nachher (Best Practice):
PermitRootLogin no

Wichtiger Hinweis

Stellen Sie sicher, dass Sie vor dem Deaktivieren des Root-Logins mindestens einen Standardbenutzer mit sudo-Berechtigungen erstellt und konfiguriert haben. Andernfalls werden Sie vom administrativen Zugriff ausgeschlossen.

2. Obligatorische schlüsselbasierte Authentifizierung implementieren

Die Passwortauthentifizierung ist anfällig für Brute-Force-Angriffe und Wörterbuchangriffe. SSH-Schlüssel, bestehend aus einem öffentlichen Schlüssel (auf dem Server) und einem privaten Schlüssel (auf dem Client), bieten eine wesentlich stärkere Sicherheit aufgrund ihrer extremen Komplexität und Länge.

A. Schlüssel generieren und installieren

  1. Schlüsselpaar generieren (auf Ihrer lokalen Client-Maschine):
    bash ssh-keygen -t ed25519 -C "[email protected]"
  2. Öffentlichen Schlüssel kopieren (auf den Server):
    bash ssh-copy-id -i ~/.ssh/id_ed25519 user@your_server_ip

B. Passwortauthentifizierung deaktivieren

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

Best Practice: Verwenden Sie starke Schlüsseltypen wie Ed25519 oder RSA 4096-Bit. Schützen Sie den privaten Schlüssel immer mit einer starken Passphrase.

3. Den Standard-SSH-Port ändern (Mehrschichtige Verteidigung)

Der Standard-SSH-Port (TCP-Port 22) wird ständig von automatisierten Bots gescannt. Das Ändern des Ports auf eine hohe, nicht standardmäßige Nummer (z. B. 2222, 22222 oder 30000+) reduziert die Menge an Rauschen in Ihren Serverprotokollen erheblich und macht Sie für Gelegenheits-Scanner unsichtbar.

Konfigurationsschritt

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

# Vorher:
# Port 22

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

Warnung: Firewall-Anpassung erforderlich

Wenn Sie den Port ändern, müssen Sie Ihre Firewall (z. B. iptables, firewalld oder AWS Security Groups) aktualisieren, um den Traffic auf dem neuen Port zuzulassen. Andernfalls führt dies zu einem sofortigen Verbindungsverlust.

Beispiel mit firewalld (CentOS/RHEL):

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

4. Zugriff auf bestimmte Benutzer und Gruppen beschränken

Um eine strenge Zugriffskontrolle durchzusetzen, sollten Sie explizit definieren, welche Benutzer oder Gruppen sich via SSH verbinden dürfen. Dies begrenzt potenzielle Eintrittspunkte, selbst wenn ein Konto kompromittiert oder ungenutzt ist.

Konfigurationsdirektiven

Verwenden Sie eine oder beide der folgenden Direktiven in sshd_config:

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

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

5. Stärkeres Protokoll und Chiffren erzwingen

Stellen Sie sicher, dass Sie das moderne und sichere SSH-Protokoll 2 verwenden und erzwingen Sie die Verwendung starker kryptografischer Chiffren und Nachrichtenauthentifizierungscodes (MACs).

Konfigurationsschritte

Überprüfen Sie, ob ältere, anfällige Protokolle deaktiviert sind:

Protocol 2

# Unsichere ältere Authentifizierungsmethoden verweigern
HostbasedAuthentication no
IgnoreRhosts yes

Obwohl moderne SSH-Implementierungen oft standardmäßig gut konfiguriert sind, kann das explizite Definieren starker Chiffren und MACs Downgrade-Angriffe verhindern. Ein empfohlener Mindestsatz umfasst:

Ciphers [email protected],[email protected]
MACs hmac-sha2-512,hmac-sha2-256

6. Ratenbegrenzung und Intrusion Detection implementieren (Fail2Ban)

Selbst bei schlüsselbasierter Authentifizierung verbraucht das kontinuierliche Sondieren durch Bots Ressourcen und überfüllt Protokolle. Fail2Ban ist ein kritisches Werkzeug, das Protokolle auf fehlgeschlagene Anmeldeversuche (oder andere verdächtige Aktivitäten) überwacht und die Firewall dynamisch anpasst, um die Ursprungs-IP-Adresse temporär oder dauerhaft zu sperren.

Installation und Konfiguration (Allgemeine Schritte)

  1. Fail2Ban installieren:
    ```bash
    # Debian/Ubuntu
    sudo apt update && sudo apt install fail2ban

    RHEL/CentOS/Fedora

    sudo dnf install fail2ban
    `` 2. **Das SSH-Jail konfigurieren:** Fail2Ban verwendet Konfigurationen, die als 'Jails' bezeichnet werden. Das Standard-sshd-Jail ist sehr effektiv bei der Überwachung von/var/log/auth.log` (oder Äquivalent) auf wiederholte Fehler beim SSH-Dienst und wendet automatisch temporäre Sperren an.

  2. Sicherstellen, dass der Dienst läuft:
    bash sudo systemctl enable fail2ban sudo systemctl start fail2ban

Fail2Ban mindert automatisierte Brute-Force-Angriffe erheblich und gilt als obligatorisch für mit dem Internet verbundene Server.

7. Weitere wesentliche SSH-Härtungsdirektiven

Diese kleineren Anpassungen helfen, Sitzungen zu verwalten und das potenzielle Angriffsfenster zu reduzieren:

Direktive Empfohlener Wert Zweck
ClientAliveInterval 300 Sendet alle 300 Sekunden (5 Minuten) ein Null-Paket, um die Sitzung am Leben zu erhalten.
ClientAliveCountMax 3 Maximale Anzahl fehlgeschlagener 'Alive'-Checks vor der Trennung (insgesamt 15 Minuten Leerlaufzeit).
UsePAM yes Aktiviert Pluggable Authentication Modules (PAM) für zusätzliche lokale Systemsicherheitsrichtlinien.
PermitEmptyPasswords no Verbietet Benutzern mit leeren Passwörtern die Anmeldung (sollte standardmäßig no sein).

Zusammenfassung der Härtungs-Checkliste

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

  1. [ ] sshd_config vor Änderungen sichern.
  2. [ ] PermitRootLogin no setzen.
  3. [ ] PasswordAuthentication no setzen (nach der Schlüssel-Einrichtung).
  4. [ ] Den Port auf einen nicht standardmäßigen Wert ändern.
  5. [ ] Die Firewall aktualisieren, um den neuen Port zuzulassen.
  6. [ ] AllowUsers oder AllowGroups verwenden, um den Zugriff einzuschränken.
  7. [ ] Protocol 2 setzen.
  8. [ ] Fail2Ban installieren und konfigurieren.
  9. [ ] Konfiguration mit sshd -t vor dem Neustart prüfen.

Durch die Implementierung dieser Best Practices wird SSH von einer potenziellen Schwachstelle zu einem hochsicheren Kanal für die Remote-Administration.