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
- Schlüsselpaar generieren (auf Ihrer lokalen Client-Maschine):
bash ssh-keygen -t ed25519 -C "[email protected]" - Ö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,firewalldoder 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:
- Bestimmte Benutzer zulassen:
config AllowUsers alice bob - 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)
-
Fail2Ban installieren:
```bash
# Debian/Ubuntu
sudo apt update && sudo apt install fail2banRHEL/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. -
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:
- [ ]
sshd_configvor Änderungen sichern. - [ ]
PermitRootLogin nosetzen. - [ ]
PasswordAuthentication nosetzen (nach der Schlüssel-Einrichtung). - [ ] Den
Portauf einen nicht standardmäßigen Wert ändern. - [ ] Die Firewall aktualisieren, um den neuen Port zuzulassen.
- [ ]
AllowUsersoderAllowGroupsverwenden, um den Zugriff einzuschränken. - [ ]
Protocol 2setzen. - [ ] Fail2Ban installieren und konfigurieren.
- [ ] Konfiguration mit
sshd -tvor 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.