VPS-Sicherheit von Grund auf: SSH-Schlüssel, Firewall und Fail2ban
Ein neuer VPS ist direkt nach der Installation von Ubuntu nicht automatisch geschützt. Noch bevor der Zugriff eingerichtet ist, ist der Server für Scanner sichtbar: Sie probieren SSH-Passwörter durch, suchen nach offenen Administrationsoberflächen und prüfen typische Schwachstellen. In dieser Anleitung richten wir eine grundlegende VPS-Sicherheit von Anfang an ein: Wir erstellen einen separaten Benutzer, konfigurieren die Anmeldung per SSH-Schlüssel, begrenzen Netzwerkports mit UFW und fügen Fail2ban hinzu. Alle Schritte eignen sich für Ubuntu 22.04 und 24.04, sofern die Befehle mit einem Benutzer ausgeführt werden, der über sudo-Rechte verfügt.
Vor der Konfiguration: Erstellen Sie eine Portliste
Öffnen Sie Ports nicht „vorsichtshalber“. Für einen gewöhnlichen Webserver werden benötigt:
22/tcp— SSH, möglichst nach IP-Adresse begrenzen oder nur als zusätzliche Maßnahme auf einen anderen Port verlegen;80/tcp— HTTP, normalerweise für die Weiterleitung auf HTTPS und die Zertifikatsprüfung erforderlich;443/tcp— HTTPS.
Ein Anwendungsport wie 3000, 8080 oder 9000 sollte nicht aus dem Internet erreichbar sein, wenn davor Nginx oder Caddy läuft. Binden Sie die Anwendung an 127.0.0.1 oder erlauben Sie ihren Port nur im internen Netzwerk. Ermitteln Sie zunächst, worauf der Server lauscht:
sudo ss -tulpnPrüfen Sie nach der Installation von Docker zusätzlich dessen iptables-Regeln: Die Veröffentlichung mit -p 3000:3000 kann einen Port entgegen der erwarteten Konfiguration öffnen. Für einen öffentlichen Dienst ist es sicherer, einen HTTPS-Proxy einzusetzen und den internen Port zu verbergen.
Schritt 1. Aktualisieren Sie das System und erstellen Sie einen Administrator
Verbinden Sie sich mit dem VPS über das bereitgestellte Benutzerkonto und installieren Sie die Updates:
sudo apt update
sudo apt full-upgrade -y
sudo apt install -y ufw fail2ban unattended-upgradesErstellen Sie einen persönlichen Benutzer. Ersetzen Sie alex durch Ihren eigenen Namen:
sudo adduser alex
sudo usermod -aG sudo alexLöschen Sie den ursprünglichen Zugang erst, wenn Sie das neue Benutzerkonto in einem separaten Terminalfenster geprüft haben. Das ist eine wichtige Regel: Einen Fehler in SSH lässt sich leichter beheben, solange die aktuelle Sitzung noch geöffnet ist.
Schritt 2. Erstellen Sie einen SSH-Schlüssel und installieren Sie ihn auf dem Server
Führen Sie auf Ihrem Computer mit Linux, macOS oder Windows PowerShell Folgendes aus:
ssh-keygen -t ed25519 -C "alex@my-computer"Drücken Sie Enter, um den Schlüssel in der Standarddatei zu speichern, und legen Sie eine Passphrase fest. Der private Schlüssel darf nicht in einen Chat gesendet, in ein Repository gelegt oder auf den VPS kopiert werden. Auf den Server darf nur die Datei mit der Erweiterung .pub übertragen werden:
ssh-copy-id alex@SERVER_IPFalls ssh-copy-id nicht verfügbar ist, zeigen Sie den öffentlichen Schlüssel mit Get-Content $env:USERPROFILE\.ssh\id_ed25519.pub in PowerShell an und fügen Sie ihn anschließend auf dem Server hinzu:
sudo install -d -m 700 -o alex -g alex /home/alex/.ssh
sudo nano /home/alex/.ssh/authorized_keys
sudo chown alex:alex /home/alex/.ssh/authorized_keys
sudo chmod 600 /home/alex/.ssh/authorized_keysFügen Sie den Schlüssel in einer einzigen Zeile ein und prüfen Sie die Anmeldung, bevor Sie Passwörter deaktivieren:
ssh alex@SERVER_IP
sudo whoamiDas erwartete Ergebnis des letzten Befehls ist root. Wenn der SSH-Client den Schlüssel nicht findet, geben Sie ihn ausdrücklich an: ssh -i ~/.ssh/id_ed25519 alex@SERVER_IP.
Schritt 3. Deaktivieren Sie root und die Anmeldung per Passwort
Erstellen Sie eine Sicherungskopie der SSH-Konfiguration:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
sudo nano /etc/ssh/sshd_configStellen Sie sicher, dass die Datei folgende Parameter enthält:
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
KbdInteractiveAuthentication no
MaxAuthTries 3Unter Ubuntu können sich Einstellungen in /etc/ssh/sshd_config.d/*.conf befinden. Prüfen Sie deshalb die resultierende Konfiguration:
sudo sshd -t
sudo sshd -T | grep -E 'permitrootlogin|passwordauthentication|pubkeyauthentication|maxauthtries'Wenn sshd -t einen Fehler ausgibt, starten Sie den Dienst nicht neu, bevor Sie die Syntax korrigiert haben. Wenden Sie die Einstellungen nach erfolgreicher Prüfung an:
sudo systemctl reload sshLassen Sie die alte SSH-Verbindung geöffnet und prüfen Sie in einem neuen Fenster die Anmeldung mit dem Schlüssel. Passwörter ohne zuvor getesteten Schlüssel zu deaktivieren, ist der häufigste Weg, den Zugriff auf den Server zu verlieren.
Schritt 4. Richten Sie UFW ein, ohne SSH zu blockieren
UFW ist eine komfortable Oberfläche für die Netzwerkregeln von Linux. Legen Sie zunächst sichere Standardwerte fest und erlauben Sie anschließend SSH sowie die Webports:
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp comment 'SSH'
sudo ufw allow 80/tcp comment 'HTTP'
sudo ufw allow 443/tcp comment 'HTTPS'
sudo ufw enableBestätigen Sie die Aktivierung erst, nachdem die SSH-Regel bereits hinzugefügt wurde. Sehen Sie sich anschließend das Ergebnis an:
sudo ufw status verbose
sudo ufw status numberedFür eine dauerhafte Büro-IP-Adresse können Sie SSH auf diese Adresse begrenzen:
sudo ufw delete allow 22/tcp
sudo ufw allow from YOUR.PUBLIC.IP to any port 22 proto tcp comment 'SSH office'Verwenden Sie diese Variante nur bei einer festen IP-Adresse und wenn eine Provider-Konsole verfügbar ist: Bei einer Änderung der Adresse können Sie sich selbst aussperren.
Einen Anwendungsport vorübergehend öffnen
Wenn Sie einen Dienst direkt prüfen müssen, erstellen Sie eine Regel mit einer eingeschränkten Quelle:
sudo ufw allow from YOUR.PUBLIC.IP to any port 8080 proto tcpLöschen Sie die Regel nach dem Test anhand ihrer Nummer aus ufw status numbered:
sudo ufw delete RULE_NUMBERVerwenden Sie nicht sudo ufw allow 1:65535/tcp: Eine solche Regel macht die Firewall praktisch wirkungslos.
Schritt 5. Aktivieren Sie Fail2ban für SSH
Fail2ban analysiert Protokolle und fügt nach mehreren fehlgeschlagenen Anmeldeversuchen vorübergehend eine blockierende Regel hinzu. Es ersetzt weder SSH-Schlüssel noch die Firewall, reduziert aber den Lärm durch automatisierte Brute-Force-Versuche.
Erstellen Sie eine lokale Konfiguration, damit ein Paket-Update Ihre Einstellungen nicht überschreibt:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.localLegen Sie im Abschnitt [DEFAULT] sinnvolle Werte fest:
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
backend = systemd
banaction = ufw
[sshd]
enabled = true
port = 22Starten Sie den Dienst und prüfen Sie das Jail:
sudo systemctl enable --now fail2ban
sudo fail2ban-client status
sudo fail2ban-client status sshdSehen Sie in der Ausgabe von sshd die Anzahl fehlgeschlagener Versuche und die gesperrten Adressen an. Fügen Sie Ihre eigene IP-Adresse nicht zur Sperrliste hinzu. Für einen dauerhaften Ausschluss verwenden Sie im Abschnitt [DEFAULT] den Parameter ignoreip = 127.0.0.1/8 YOUR.PUBLIC.IP.
Schritt 6. Aktivieren Sie automatische Updates
Automatische Updates sind für Sicherheitspakete sinnvoll. Einen Neustart des Kernels müssen Sie trotzdem überwachen:
sudo dpkg-reconfigure -plow unattended-upgrades
sudo systemctl status unattended-upgradesPrüfen Sie einmal pro Woche, ob ein Neustart erforderlich ist:
test -f /var/run/reboot-required && echo 'Требуется перезапуск'Vergewissern Sie sich vor einem manuellen Neustart, dass Ihr Schlüssel funktioniert und Sie Zugriff auf die VPS-Konsole haben. Prüfen Sie nach dem Neustart die Anwendungsdienste, Nginx, UFW und Fail2ban.
Schritt 7. Prüfen Sie das Ergebnis von außen
Testen Sie den Schutz von einem anderen Computer aus und verlassen Sie sich nicht nur auf den Inhalt der Konfigurationsdateien:
ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no alex@SERVER_IPDer Befehl muss mit einer Ablehnung enden. Eine funktionierende Anmeldung per Schlüssel prüfen Sie separat:
ssh -o IdentitiesOnly=yes -i ~/.ssh/id_ed25519 alex@SERVER_IPPrüfen Sie auf dem VPS die lauschenden Adressen und die Regeln:
sudo ss -lntup
sudo ufw status numbered
sudo fail2ban-client status sshdDer Anwendungsport sollte auf 127.0.0.1 lauschen, wenn kein direkter Zugriff aus dem Internet vorgesehen ist. Von einem externen System aus können Sie nmap SERVER_IP verwenden, aber scannen Sie ausschließlich Ihren eigenen Server: Die Prüfung fremder Infrastruktur ohne Erlaubnis kann gegen Gesetze und Providerregeln verstoßen.
Backups und Wiederherstellung
Der SSH-Schutz bewahrt Sie nicht vor gelöschten Daten, einem Administratorfehler oder einer kompromittierten Anwendung. Speichern Sie Kopien der Datenbank, Konfigurationen und Benutzerdaten getrennt vom VPS. Ein Mindestkonzept besteht aus einer täglichen Kopie, mehreren Versionen der vergangenen Tage und einer regelmäßigen Prüfung der Wiederherstellung.
Schreiben Sie Passwörter und Tokens nicht in offene Skripte. Widerrufen Sie ein Secret bei einem Leck sofort und erstellen Sie ein neues.
Wie Sie einen VPS für ein geschütztes Projekt auswählen
Sicherheit beginnt mit der Kontrolle über die Infrastruktur. Auf einem VPS können Sie Betriebssystem, Firewall-Regeln, Zugriffsart, Backups und die Platzierung der Dienste selbst festlegen. Für eine kleinere Website oder API sind ein stabiles Netzwerk, SSD-Speicher und eine Wiederherstellungskonsole wichtiger als eine übermäßige Anzahl virtueller Kerne.
Wenn Sie ein Projekt auf einem VPS bei tropic.host starten, legen Sie seine öffentlichen Einstiegspunkte im Voraus fest: Meistens reichen SSH, HTTP und HTTPS aus. Datenbanken und Administrationsoberflächen sollten im internen Netzwerk bleiben. Bei einem wachsenden Projekt können separate VPS für Anwendung, Datenbank und Monitoring die Ausfallbereiche voneinander trennen.
Häufige Fehler
- Das Passwort deaktivieren, bevor die Anmeldung per Schlüssel geprüft wurde. Lassen Sie die aktuelle Sitzung offen und testen Sie den neuen Zugang separat.
22/tcpfür die ganze Welt öffnen, obwohl eine Freigabe nur für vertrauenswürdige Adressen möglich wäre.- Docker-Ports direkt veröffentlichen. Prüfen Sie zuerst die Docker- und UFW-Regeln.
- Fail2ban installieren und anschließend nie wieder die Protokolle ansehen. Prüfen Sie
journalctl -u sshund den Status des Jails nach Änderungen.
Fazit
Die grundlegende VPS-Absicherung nimmt wenig Zeit in Anspruch, wenn Sie in der richtigen Reihenfolge vorgehen: separaten Benutzer erstellen, SSH-Schlüssel installieren, Zugriff prüfen, root und Passwörter deaktivieren, UFW aktivieren, Fail2ban und automatische Updates konfigurieren. Ergänzen Sie anschließend Backups, Protokollierung und ein externes Monitoring.
Diese Schritte machen den Server nicht unangreifbar, schließen aber die häufigsten Fehler bei der Ersteinrichtung. Danach müssen Sie das Sicherheitsprofil an die konkrete Anwendung anpassen: Abhängigkeiten aktualisieren, Rechte der Dienste begrenzen, Administrationsoberflächen schützen und offene Ports regelmäßig überprüfen.
FAQ
Muss der Standardport von SSH geändert werden?
Nein, das ist nicht zwingend erforderlich. Das Verlegen des Ports reduziert automatisierten Hintergrundverkehr, ersetzt aber weder Schlüssel noch die Deaktivierung von Passwörtern, UFW und Fail2ban. Wenn Sie den Port ändern, aktualisieren Sie die Firewall-Regel und den Parameter port im Fail2ban-Jail.
Was kann ich tun, wenn ich nach der UFW-Konfiguration den Zugriff verloren habe?
Verwenden Sie die Web- oder Rescue-Konsole des Providers und prüfen Sie die SSH-Regel sowie die sshd-Konfiguration. Schließen Sie die alte funktionierende Sitzung nicht, bevor der neue Zugang bestätigt ist.
Reicht Fail2ban zum Schutz von SSH aus?
Nein. Fail2ban reagiert auf bereits fehlgeschlagene Anmeldeversuche. Die Grundlage sollten SSH-Schlüssel, deaktivierte Passwortauthentifizierung, minimale Benutzerrechte und eine eingeschränkte Firewall sein.
Kann ich SSH nur von einer einzigen IP-Adresse erlauben?
Ja, wenn die Adresse dauerhaft gleich bleibt: Fügen Sie in UFW eine allow from-Regel für diese IP-Adresse hinzu. Planen Sie vorher eine Provider-Konsole oder einen alternativen Zugang ein, da die Verbindung nach einem IP-Wechsel blockiert wird.
Wie oft sollte ich die Sicherheit des VPS überprüfen?
Führen Sie nach jeder Änderung an SSH, der Firewall oder einer Docker-Portveröffentlichung eine Portprüfung und einen Anmeldetest durch. Prüfen Sie Updates und Protokolle planmäßig mindestens einmal pro Woche und testen Sie die Wiederherstellung aus Backups regelmäßig.