← Zurück zu allen Tutorials

SSH Server absichern

Schütze deinen Server vor Brute-Force-Angriffen: SSH-Keys, fail2ban, Port-Änderung und weitere Härtungsmaßnahmen.

Schritt 1: SSH-Key erstellen

Auf deinem lokalen Rechner (nicht auf dem Server):

# Ed25519 Key generieren (sicherer und kürzer als RSA)
ssh-keygen -t ed25519 -C "dein@email.de"

# Standardpfad bestätigen: ~/.ssh/id_ed25519
# Passphrase setzen (empfohlen)

Schritt 2: Key auf Server übertragen

# Öffentlichen Schlüssel zum Server kopieren
ssh-copy-id -i ~/.ssh/id_ed25519.pub benutzer@deine-server-ip

# Testen: Login sollte ohne Passwort funktionieren
ssh benutzer@deine-server-ip
Bevor du weitermachst – nicht aussperren: Lass deine aktuelle SSH-Sitzung während aller folgenden Schritte offen und teste jede Änderung in einer zweiten, neuen SSH-Sitzung. Schließe die erste Sitzung erst, wenn der Login über den neuen Port funktioniert. Stelle sicher, dass der Login mit deinem Key (Schritt 2) für einen Benutzer mit sudo-Rechten funktioniert. Falls trotzdem etwas schiefgeht, erreichst du den Server weiterhin über die NoVNC-Konsole im Server-Panel.

Schritt 3: Firewall vorbereiten (alter UND neuer Port)

Gib zuerst sowohl den aktuellen SSH-Port 22 als auch den neuen Port 2222 frei – erst danach wird die Firewall aktiviert. So bleibt deine bestehende Verbindung erhalten.

sudo apt install -y ufw
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp      # Aktueller SSH-Port – bleibt vorerst offen!
sudo ufw allow 2222/tcp    # Neuer SSH-Port
sudo ufw allow 80/tcp      # HTTP (nur bei Webserver)
sudo ufw allow 443/tcp     # HTTPS (nur bei Webserver)
sudo ufw enable

# Regeln prüfen
sudo ufw status verbose

Schritt 4: SSH-Konfiguration härten

Lege deine Einstellungen in einer eigenen Datei unter /etc/ssh/sshd_config.d/ ab. Unter Ubuntu haben Dateien dort Vorrang vor der sshd_config (OpenSSH verwendet bei den meisten Optionen den zuerst gelesenen Wert). Das Präfix 00- sorgt dafür, dass deine Datei vor anderen gelesen wird, z. B. vor einer 50-cloud-init.conf, die den Passwort-Login wieder erlaubt.

sudo nano /etc/ssh/sshd_config.d/00-hardening.conf

# Inhalt der Datei (Kommentare nur in eigenen Zeilen):
# Neuer SSH-Port
Port 2222
# Root-Login verbieten – nur wenn du dich als sudo-Benutzer einloggst!
PermitRootLogin no
# Passwort-Login deaktivieren (inkl. Keyboard-Interactive)
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
# Max. Loginversuche und Idle-Timeout
MaxAuthTries 3
ClientAliveInterval 300
ClientAliveCountMax 2
# Syntax prüfen – keine Ausgabe bedeutet OK
sudo sshd -t

# Tatsächlich wirksame Werte anzeigen
sudo sshd -T | grep -Ei '^(port|permitrootlogin|passwordauthentication) '

Schritt 5: Änderung übernehmen (Ubuntu 22.04 vs. 24.04)

Unter Ubuntu heißt der Dienst ssh (nicht sshd). Seit Ubuntu 22.10 – also auch unter 24.04 – nutzt SSH standardmäßig systemd-Socket-Activation: Den Port öffnet ssh.socket, das ein systemd-Generator aus deiner sshd-Konfiguration erzeugt. Ein einfacher Neustart des Dienstes reicht für einen Portwechsel dann nicht. Prüfe, welcher Modus bei dir aktiv ist:

systemctl is-active ssh.socket
# "active"   -> Socket-Activation (Standard bei Ubuntu 24.04) -> Variante B
# "inactive" -> klassischer Dienst (Ubuntu 22.04)             -> Variante A
# Variante A – Ubuntu 22.04 (ohne Socket-Activation)
sudo systemctl restart ssh

# Variante B – Ubuntu 24.04 (Socket-Activation)
sudo systemctl daemon-reload        # Generator neu ausführen, ssh.socket erhält Port 2222
sudo systemctl restart ssh.socket   # Socket lauscht jetzt auf dem neuen Port
sudo systemctl restart ssh          # übrige Einstellungen laden (z. B. PasswordAuthentication)

# Prüfen: sshd muss jetzt auf 2222 lauschen
sudo ss -tlnp | grep -E ':(22|2222)\b'

Optional: Wenn du unter 24.04 lieber das klassische Verhalten möchtest, kannst du die Socket-Activation stattdessen abschalten (so beschrieben in der README.Debian des Pakets). Danach gilt Variante A:

sudo mkdir -p /etc/systemd/system-generators/
sudo ln -s /dev/null /etc/systemd/system-generators/sshd-socket-generator
sudo systemctl daemon-reload
sudo systemctl disable --now ssh.socket
sudo systemctl enable --now ssh.service

Schritt 6: Neuen Port in zweiter Sitzung testen

Lass die erste Sitzung offen und öffne auf deinem lokalen Rechner ein neues Terminal:

# In einem NEUEN Terminal – die alte Sitzung bleibt offen
ssh -p 2222 benutzer@deine-server-ip

# Nur wenn dieser Login klappt: alten Port 22 schließen
sudo ufw delete allow 22/tcp
sudo ufw status verbose
Login klappt nicht? Schließe die erste Sitzung nicht. Korrigiere dort die Konfiguration (oder entferne vorübergehend /etc/ssh/sshd_config.d/00-hardening.conf) und übernimm die Änderung erneut wie in Schritt 5. Ohne offene Sitzung hilft die NoVNC-Konsole im Server-Panel.

Schritt 7: fail2ban installieren und konfigurieren

Lege /etc/fail2ban/jail.local nur mit deinen eigenen Einstellungen an – die Standardwerte bleiben in der jail.conf. Trage hier den neuen SSH-Port ein, sonst sperrt fail2ban den falschen Port.

sudo apt install -y fail2ban
sudo nano /etc/fail2ban/jail.local

# Inhalt von /etc/fail2ban/jail.local:
[sshd]
enabled = true
port = 2222
maxretry = 3
bantime = 3600
findtime = 600
# fail2ban aktivieren und Konfiguration laden
sudo systemctl enable --now fail2ban
sudo systemctl restart fail2ban

# Status prüfen
sudo fail2ban-client status sshd

Sicherheit beginnt beim Server

Unsere KVM Server bieten DDoS-Schutz und volle Root-Rechte für individuelle Sicherheitskonfiguration.

Sicheren Server bestellen