Linux Security

Debian SSH-Hardening ohne Aussperren

SSH ist auf Root-Servern der wichtigste administrative Eingang. Dieser Guide zeigt, wie du SSH unter Debian sicher härtest, ohne dich selbst vom Server auszusperren: neuer Admin-User, SSH-Keys, sichere sshd_config, Testsession, Reload, Rollback und Logprüfung.

Grundsatz

Nie SSH härten, ohne eine zweite Session offen zu halten.

kritisch

Der häufigste Fehler beim SSH-Hardening ist nicht eine falsche Direktive, sondern ein schlechter Ablauf: Man ändert die Konfiguration, startet SSH neu und merkt erst dann, dass der eigene Zugang nicht mehr funktioniert. Deshalb gilt: Eine bestehende Root- oder Admin-Session bleibt offen, bis der neue Login erfolgreich getestet wurde.

Step 1 User

Admin-Benutzer erstellen und sudo prüfen.

Step 2 Key

SSH-Key hinterlegen und Login testen.

Step 3 Config

sshd_config ändern und mit sshd -t validieren.

Step 4 Reload

SSH reloaden, neue Session testen, alte Session erst danach schließen.

Vorbereitung

Admin-User erstellen.

Direktes Arbeiten als Root ist bequem, aber unnötig riskant. Besser ist ein eigener Admin-Benutzer mit sudo-Rechten. Der Root-Account bleibt für Notfälle vorhanden, aber nicht direkt per SSH erreichbar.

Befehle

User anlegen und sudo aktivieren

adduser adminuser
usermod -aG sudo adminuser
su - adminuser
sudo whoami

Wenn sudo whoami sauber root ausgibt, funktioniert die Rechtevergabe grundsätzlich.

SSH-Key

Keys statt Passwörter.

Passwort-Logins sind bei öffentlich erreichbaren Servern unnötige Angriffsfläche. Der sichere Standard ist Public-Key-Authentifizierung mit einem modernen Key.

Client

Key auf deinem Admin-Rechner erzeugen

ssh-keygen -t ed25519 -a 100 -C "admin@digital-world.dev"
ssh-copy-id adminuser@SERVER-IP

Server

Key-Rechte prüfen

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chown -R adminuser:adminuser ~/.ssh

Sichere SSH-Konfiguration

Minimal sinnvolle Baseline.

Die konkrete Konfiguration hängt von Umgebung und Zugriffskonzept ab. Für viele Debian-Server ist diese Baseline ein stabiler Ausgangspunkt.

/etc/ssh/sshd_config

Empfohlene Direktiven.

Config

SSH-Hardening-Baseline

PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
X11Forwarding no
MaxAuthTries 3
ClientAliveInterval 300
ClientAliveCountMax 2
AllowUsers adminuser

AllowUsers ist stark, aber auch riskant, wenn du den Benutzernamen falsch schreibst. Deshalb erst testen, dann alte Session schließen.

Validierung

Konfiguration testen, bevor du reloadest.

SSH bietet eine eingebaute Syntaxprüfung. Nutze sie immer, bevor du den Dienst neu lädst. Ein Tippfehler in der Config darf nicht zum Ausfall des Admin-Zugangs führen.

Pflichtcheck

Syntax prüfen und reloaden

sshd -t
systemctl reload ssh
systemctl status ssh --no-pager

Auf manchen Systemen heißt der Dienst sshd statt ssh. Prüfe das mit systemctl status ssh oder systemctl status sshd.

Testsession

Neue Verbindung testen.

Öffne ein neues Terminal und teste den Login mit dem neuen Benutzer. Die alte Session bleibt offen, bis der neue Zugriff erfolgreich ist.

Client-Test

Login prüfen

ssh -i ~/.ssh/id_ed25519 adminuser@SERVER-IP
sudo whoami
exit

Erst wenn dieser Test erfolgreich war, kannst du die alte Root-Session schließen.

Rollback

Wenn etwas schiefgeht.

Notfallplan

Ein sauberer Rollback beginnt vor der Änderung. Lege eine Kopie der SSH-Konfiguration an. Wenn der neue Login nicht funktioniert, kannst du die alte Konfiguration aus der noch offenen Session wiederherstellen.

Backup Config sichern

cp -av /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

Restore Zurückrollen

cp -av /etc/ssh/sshd_config.bak /etc/ssh/sshd_config

Validate Syntax prüfen

sshd -t

Reload Dienst laden

systemctl reload ssh

Logging & Kontrolle

Nach dem Hardening prüfen, was passiert.

SSH-Härtung ist nicht fertig, nur weil der Login funktioniert. Danach prüfst du Logs, fehlgeschlagene Logins und den Zustand des Dienstes.

journalctl

SSH-Service-Logs

journalctl -u ssh --since "24 hours ago"

auth.log

Fehlversuche finden

grep "Failed password" /var/log/auth.log

Status

Dienst prüfen

systemctl status ssh --no-pager

Ports

Listener anzeigen

ss -tulpen | grep ssh

Firewall

SSH-Port kontrollieren

nft list ruleset
ufw status verbose

Fail2Ban/CrowdSec

Brute Force sichtbar machen

cscli alerts list
fail2ban-client status sshd

Typische Fehler

Was dich schnell aussperrt.

Diese Fehler passieren häufig, sind aber vermeidbar, wenn du strukturiert arbeitest.

Fehler 1

Alte Session zu früh geschlossen

Niemals die bestehende Session schließen, bevor der neue Login erfolgreich getestet wurde.

Fehler 2

AllowUsers falsch gesetzt

Ein Tippfehler im Benutzernamen reicht, um legitime Logins zu blockieren.

Fehler 3

Key-Rechte falsch

Falsche Rechte auf ~/.ssh oder authorized_keys führen dazu, dass SSH den Key ignoriert.

Fehler 4

Firewall vergessen

SSH kann korrekt laufen, aber durch Firewall, Provider-Regel oder Security Group blockiert sein.

Fehler 5

Restart statt Reload

Ein Reload ist meist sicherer als ein harter Restart. Vorher immer sshd -t.

Fehler 6

Kein Rettungsweg

Bei Root-Servern sollte klar sein, wie du über Rescue-System, Konsole oder Provider-Zugang zurückkommst.

02

Während Änderung

  • Root-Login deaktivieren
  • Passwortlogin deaktivieren
  • AllowUsers vorsichtig setzen
  • sshd -t ausführen
03

Nach Änderung

  • systemctl reload ssh
  • Neue Session testen
  • sudo erneut prüfen
  • Logs kontrollieren

Fazit

SSH-Hardening ist ein Ablauf, kein einzelner Schalter.

Wer strukturiert vorgeht, kann SSH deutlich härten, ohne unnötiges Risiko. Entscheidend sind Testsession, Key-Login, validierte Konfiguration, Rollback und Kontrolle.