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
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
/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