Die ersten 10 Schritte nach dem VPS-Kauf: Sicherheit
Wenige Minuten, nachdem ein neuer Server eine öffentliche IP bekommen hat, beginnen Bots, seine Passwörter zu erraten. Hier finden Sie zehn Schritte, die in etwa einer Stunde die häufigsten Lücken schließen: Befehle für Ubuntu und Debian, die Unterschiede bei AlmaLinux und Rocky Linux und die Prüfungen, ohne die Sie sich leicht aus dem eigenen Server aussperren.
Der Server, den Sie gerade bezahlt haben, ist bereits für das ganze Internet sichtbar. Bots gehen Adressen der Reihe nach durch und versuchen, sich per SSH als root mit verbreiteten Passwörtern anzumelden, sodass die ersten fremden Versuche noch in derselben Stunde im Log auftauchen. Die gute Nachricht: Gegen Massenangriffe schützen einfache Dinge – Anmeldung nur per Schlüssel, geschlossene überflüssige Ports und Updates. Alles Folgende erledigen Sie einmalig in etwa einer Stunde, am besten bevor die Website und Daten auf den Server kommen.
Die Befehle gelten für Ubuntu und Debian, Unterschiede bei AlmaLinux und Rocky Linux sind gesondert vermerkt. Führen Sie sie als root oder mit sudo aus.
Vor dem Start: ein Notzugang
Suchen Sie im Panel Ihres Hosters die Serverkonsole: Sie heißt VNC, KVM-Konsole oder Notfallkonsole und zeigt den Bildschirm des Servers direkt im Browser. Darüber können Sie sich anmelden, selbst wenn SSH Sie nicht mehr hineinlässt. Solange Sie die Anmeldeeinstellungen ändern, lassen Sie die aktuelle SSH-Sitzung offen und prüfen jede Änderung in einem zweiten Fenster. So kostet ein Konfigurationsfehler ein paar Minuten und keine Neuinstallation des Systems.
1. Aktualisieren Sie das System
Hoster erstellen ihre Systemvorlagen im Voraus, und bis zur Installation sammelt sich darin oft ein Dutzend nicht eingespielter Sicherheitskorrekturen an.
apt update && apt full-upgrade -y # Ubuntu, Debian
dnf upgrade -y # AlmaLinux, Rocky Linux
Wurde der Kernel aktualisiert, starten Sie den Server neu. Unter Ubuntu und Debian zeigt das die Datei /var/run/reboot-required an: Ist sie vorhanden, ist ein Neustart nötig.
2. Legen Sie einen eigenen Benutzer an
Ständig als root zu arbeiten ist unbequem und gefährlich: Jeder Tippfehler wird mit vollen Rechten ausgeführt, und den Namen root kennt jeder Bot. Legen Sie einen eigenen Benutzer an und geben Sie ihm sudo-Rechte:
adduser deploy
usermod -aG sudo deploy # Ubuntu, Debian
usermod -aG wheel deploy # AlmaLinux, Rocky Linux
Unter AlmaLinux und Rocky Linux fragt der Befehl adduser nichts ab, das Passwort wird separat gesetzt: passwd deploy. Wählen Sie einen beliebigen Namen außer den naheliegenden admin und user.
3. Melden Sie sich per SSH-Schlüssel an
Anders als ein Passwort lässt sich ein Schlüssel nicht durch Ausprobieren erraten. Erzeugen Sie das Schlüsselpaar auf Ihrem eigenen Computer, nicht auf dem Server, und kopieren Sie den öffentlichen Teil auf den Server:
ssh-keygen -t ed25519 -C "laptop"
ssh-copy-id deploy@SERVER_IP
Windows 10 und 11 haben einen eingebauten OpenSSH-Client, aber kein ssh-copy-id. Öffnen Sie dann die .pub-Datei und fügen Sie ihre Zeile auf dem Server in /home/deploy/.ssh/authorized_keys ein; der Ordner .ssh braucht die Rechte 700, die Datei 600, und Eigentümer muss der Benutzer selbst sein. Viele Hoster lassen Sie den Schlüssel schon bei der Bestellung hinzufügen, dann liegt er bereits bei root.
Prüfen Sie in einem neuen Fenster, dass die Anmeldung ohne Passwort funktioniert und sudo verfügbar ist: ssh deploy@SERVER_IP, danach sudo -v. Erst dann gehen Sie zum nächsten Schritt.
4. Verbieten Sie die Anmeldung per Passwort und als root
Am bequemsten bearbeiten Sie nicht die Hauptdatei, sondern legen Ihre Einstellungen als eigene Datei in /etc/ssh/sshd_config.d/ ab. Ein wichtiges Detail: sshd übernimmt für jeden Parameter den zuerst gefundenen Wert und liest die Dateien in diesem Ordner alphabetisch. In Cloud-Images von Ubuntu liegt dort manchmal eine Datei 50-cloud-init.conf mit der Zeile PasswordAuthentication yes. Geben Sie Ihrer Datei deshalb eine Nummer unter 50, zum Beispiel /etc/ssh/sshd_config.d/10-hardening.conf:
PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
Prüfen Sie die Syntax und welche Werte der Server tatsächlich anwendet, und laden Sie dann die Einstellungen neu:
sshd -t && sshd -T | grep -Ei 'permitrootlogin|passwordauthentication'
systemctl reload ssh # Ubuntu, Debian
systemctl reload sshd # AlmaLinux, Rocky Linux
Schließen Sie die alte Sitzung erst, wenn Sie sich im zweiten Fenster als Ihr Benutzer per Schlüssel angemeldet haben. Ein Anmeldeversuch als root muss abgewiesen werden.
Den SSH-Port von 22 auf einen anderen zu ändern, ist nicht nötig. Das entfernt fast alle automatischen Anmeldeversuche aus dem Log, doch den Schutz bietet der Schlüssel, nicht die Portnummer. Wenn Sie ihn trotzdem ändern, öffnen Sie zuerst den neuen Port in der Firewall. Ab Ubuntu 22.10 wird SSH über einen systemd-Socket gestartet, und nach dem Ändern von Port müssen Sie systemctl daemon-reload und systemctl restart ssh.socket ausführen, sonst lauscht der Server weiter auf 22.
5. Aktivieren Sie die Firewall
Die Regel ist einfach: Alle eingehenden Verbindungen sind verboten, außer zu Diensten, die von außen erreichbar sein müssen. Für eine Website sind das SSH, 80 und 443. Unter Ubuntu ist ufw praktisch, unter Debian installieren Sie es mit apt install ufw:
ufw default deny incoming
ufw default allow outgoing
ufw allow OpenSSH
ufw allow 80,443/tcp
ufw enable
ufw status verbose
Die Reihenfolge ist wichtig: Erst SSH erlauben, dann aktivieren. Unter AlmaLinux und Rocky Linux läuft bereits firewalld, und SSH ist dort standardmäßig erlaubt; die Webports öffnen Sie so:
firewall-cmd --permanent --add-service=http --add-service=https
firewall-cmd --reload
firewall-cmd --list-all
Läuft auf dem Server Docker, beachten Sie eine Besonderheit: Docker schreibt eigene iptables-Regeln, und ein veröffentlichter Container-Port wie -p 3306:3306 ist aus dem Internet erreichbar, selbst wenn ufw ihn nicht erlaubt. Veröffentlichen Sie interne Ports nur auf der lokalen Adresse: -p 127.0.0.1:3306:3306. Tarife für Container finden Sie in der Auswahl VPS für Docker.
Viele Hoster bieten im Panel zusätzlich eine Netzwerk-Firewall vor dem Server. Sie ersetzt die System-Firewall nicht, ist aber als zweite Schicht nützlich. DDoS-Schutz ist ein eigener Dienst auf Netzwerkebene des Hosters; Tarife damit finden Sie in der Auswahl VPS mit DDoS-Schutz.
6. Installieren Sie fail2ban
fail2ban liest die Logs und sperrt Adressen vorübergehend, die sich immer wieder falsch anmelden. Bei reiner Schlüsselanmeldung hält es vor allem das Log sauber, ist aber auch für andere Dienste nützlich: Control Panels, E-Mail, die Anmeldeseite der Website.
apt install fail2ban python3-systemd
Schreiben Sie Ihre Einstellungen in /etc/fail2ban/jail.local, nicht in jail.conf, die bei Updates überschrieben wird:
[sshd]
enabled = true
backend = systemd
maxretry = 5
bantime = 1h
Die Zeile backend = systemd ist ab Debian 12 nötig: Dort gibt es standardmäßig keine Datei /var/log/auth.log, das Anmeldelog liegt in journald, und ohne diese Zeile findet fail2ban nichts zum Lesen. Ohne eigene Einstellungen sperrt es eine Adresse für 10 Minuten nach 5 Fehlversuchen innerhalb von 10 Minuten. Führen Sie nach der Änderung systemctl restart fail2ban aus und prüfen Sie: fail2ban-client status sshd. Unter AlmaLinux und Rocky Linux kommt das Paket aus dem EPEL-Repository: dnf install epel-release, dann dnf install fail2ban und systemctl enable --now fail2ban.
7. Aktivieren Sie automatische Sicherheitsupdates
Die meisten Servereinbrüche nutzen Schwachstellen, für die bereits eine Korrektur erschienen ist, die nur nicht eingespielt wurde. Unter Ubuntu ist das Paket unattended-upgrades standardmäßig installiert und aktiv; prüfen Sie das mit systemctl status unattended-upgrades. Unter Debian installieren und aktivieren Sie es so:
apt install unattended-upgrades
dpkg-reconfigure -plow unattended-upgrades
Standardmäßig installiert es nur Sicherheitsupdates. Der Kernel wird ohne Neustart nicht aktualisiert: Starten Sie den Server entweder selbst neu, wenn Sie das Anzeichen aus Schritt 1 sehen, oder aktivieren Sie einen automatischen nächtlichen Neustart mit den Parametern Unattended-Upgrade::Automatic-Reboot und Automatic-Reboot-Time in /etc/apt/apt.conf.d/50unattended-upgrades.
Unter AlmaLinux und Rocky Linux übernimmt das dnf-automatic. Installieren Sie das Paket mit dnf install dnf-automatic, setzen Sie in /etc/dnf/automatic.conf upgrade_type = security und apply_updates = yes (ohne Letzteres werden Updates nur heruntergeladen) und aktivieren Sie den Timer: systemctl enable --now dnf-automatic.timer.
8. Prüfen Sie, worauf der Server lauscht
Vorlagen der Hoster und Control Panels starten manchmal Dienste, um die Sie nicht gebeten haben. Lassen Sie sich alle offenen Ports anzeigen:
ss -tulpn
Alles, was auf 0.0.0.0 oder [::] lauscht, ist von außen erreichbar, wenn die Firewall es durchlässt. Außer SSH und dem Webserver sollte es solche Dienste nicht geben. Die Datenbanken MySQL, MariaDB, PostgreSQL und Redis sollten nur auf 127.0.0.1 lauschen: In den Paketen von Debian und Ubuntu ist das standardmäßig so eingestellt, doch nach einer Installation über Docker oder ein Fremdskript lohnt sich eine Prüfung. Stoppen Sie nicht benötigte Dienste und entfernen Sie sie aus dem Autostart: systemctl disable --now dienstname. Wie ein Außenstehender den Server sieht, prüfen Sie von einem anderen Computer aus: nmap -Pn SERVER_IP.
9. Zeit, Logs und Monitoring
Prüfen Sie mit timedatectl, dass die Uhr synchronisiert wird (die Zeile System clock synchronized: yes). Eine falsche Zeit stört die Prüfung von Zertifikaten, Einmalcodes und die Auswertung von Logs. Wer sich wann am Server angemeldet hat, zeigen last -a | head und journalctl -u ssh --since today (unter AlmaLinux heißt der Dienst sshd).
Richten Sie ein externes Uptime-Monitoring ein: Es gibt viele kostenlose Dienste, die Ihre Website einmal pro Minute aufrufen und Ihnen bei einem Fehler Bescheid geben. Richten Sie zusätzlich eine Warnung für die Festplattenbelegung ein: Eine volle Festplatte ist ein häufiger Grund, warum Website und Datenbank mitten in der Nacht ausfallen.
10. Legen Sie einen Wiederherstellungspunkt an und sichern Sie das Hoster-Panel
Ist der Server eingerichtet, erstellen Sie im Panel des Hosters einen Snapshot der Festplatte, sofern diese Funktion vorhanden ist: So kehren Sie in Minuten zum sauber eingerichteten System zurück. Ein Snapshot ersetzt keine Backups, denn er liegt beim selben Hoster. Wie Sie echte Sicherungen außerhalb des Servers einrichten, erklärt der Artikel VPS-Backups: Strategien und Werkzeuge.
Aktivieren Sie die Zwei-Faktor-Anmeldung für Ihr Kundenkonto beim Hoster. Über das Konto lässt sich der Server neu installieren, das root-Passwort zurücksetzen oder die Konsole öffnen, und ein gut geschütztes SSH nützt nichts, wenn sich das Konto mit einem gestohlenen Passwort öffnen lässt. Bewahren Sie den privaten SSH-Schlüssel nur auf Ihren eigenen Geräten auf und schützen Sie ihn mit einer Passphrase.
Was Sie nicht tun sollten
- Schalten Sie SELinux nicht ab, nur weil unter AlmaLinux oder Rocky Linux der erste Zugriffsfehler auftaucht. Fast immer genügt das richtige Label auf dem Ordner der Website oder eine einzelne Freigabe über
setsebool. - Setzen Sie keine Rechte 777 auf Ordner der Website. Eigentümer der Dateien sollte der Webserver-Benutzer oder ein eigener Benutzer der Website sein, Ordner mit 755, Dateien mit 644.
- Starten Sie Anwendungen nicht als root. Einem Bot, einer Website oder einer Job-Queue genügt ein eigener Benutzer ohne
sudo. - Stellen Sie Control Panel und phpMyAdmin nicht unter Standardadressen für alle bereit. Erlauben Sie den Zugang nur von Ihrer eigenen IP oder über einen SSH-Tunnel.
Ein System für den neuen Server wählen Sie bequem über die Auswahlen VPS mit Ubuntu, VPS mit Debian und VPS mit AlmaLinux. Ist der Server für eine Website aus dem Shared Hosting gedacht, beschreibt der Artikel So ziehen Sie eine Website vom Shared Hosting auf einen VPS um den nächsten Schritt, und worauf Sie bei der Wahl des Tarifs selbst achten sollten, steht in VPS auswählen: die 7 Kriterien, auf die es ankommt.