Wissensdatenbank

Deinen VPS absichern

Ein frischer VPS ist vom Moment des Hochfahrens an dem öffentlichen Internet ausgesetzt. Automatisierte Scanner finden ihn innerhalb von Minuten und versuchen Brute-Force-Logins sowie das Abtasten offener Dienste. Dieser Leitfaden behandelt die wichtigsten Härtungsschritte, die du nach deinem ersten Login durchführen solltest.

1. SSH-Schlüssel statt Passwörter verwenden

Passwortbasierter SSH-Login ist der häufigste Angriffsvektor. Der Umstieg auf schlüsselbasierte Authentifizierung eliminiert Brute-Force-Passwortangriffe vollständig.

Schlüsselpaar generieren auf deinem lokalen Rechner (falls noch nicht vorhanden):

ssh-keygen -t ed25519 -C "deine-email@example.com"

Öffentlichen Schlüssel kopieren auf deinen Server:

ssh-copy-id root@deine-server-ip

Überprüfe, dass du dich mit dem Schlüssel anmelden kannst, dann deaktiviere die Passwort-Authentifizierung:

# /etc/ssh/sshd_config
PasswordAuthentication no
PubkeyAuthentication yes

SSH-Dienst neustarten:

sudo systemctl restart sshd

Du kannst SSH-Schlüssel auch über das Sitequest-Dashboard verwalten.

2. Root-Login deaktivieren (optional, aber empfohlen)

Statt dich als root anzumelden, erstelle einen regulären Benutzer mit sudo-Rechten:

adduser deploy
usermod -aG sudo deploy

Kopiere deinen SSH-Schlüssel zum neuen Benutzer und deaktiviere dann den Root-Login:

# /etc/ssh/sshd_config
PermitRootLogin no

Starte SSH nach der Änderung neu. Falls du dich aussperrst, kannst du die VNC-Konsole für den Notfallzugriff nutzen.

3. Standard-SSH-Port ändern (optional)

Das Verlegen von SSH auf einen nicht standardmäßigen Port reduziert das Rauschen von automatisierten Scannern. Es ist allein keine Sicherheitsmaßnahme, reduziert aber den Log-Spam erheblich:

# /etc/ssh/sshd_config
Port 2222

Denke daran, deine Firewall-Regeln zu aktualisieren, um den neuen Port freizugeben, bevor du SSH neustartest.

4. Firewall konfigurieren

Eine Firewall begrenzt, welche Ports aus dem Internet erreichbar sind. Öffne nur das, was dein Server tatsächlich braucht.

Auf Debian/Ubuntu (ufw)

sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp    # SSH (oder dein benutzerdefinierter Port)
sudo ufw allow 80/tcp    # HTTP
sudo ufw allow 443/tcp   # HTTPS
sudo ufw enable

Auf AlmaLinux/Rocky (firewalld)

sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload

Du kannst Firewall-Regeln auch über das Sitequest-Dashboard konfigurieren.

5. System aktuell halten

Ungepatchte Software ist einer der am häufigsten ausgenutzten Angriffsvektoren. Aktualisiere regelmäßig:

# Debian/Ubuntu
sudo apt update && sudo apt upgrade -y

# AlmaLinux/Rocky
sudo dnf update -y

Automatische Sicherheitsupdates aktivieren

Auf Debian/Ubuntu installiere unattended-upgrades:

sudo apt install unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades

Auf AlmaLinux/Rocky aktiviere dnf-automatic:

sudo dnf install dnf-automatic
sudo systemctl enable --now dnf-automatic-install.timer

So werden kritische Sicherheitspatches auch dann eingespielt, wenn du manuelle Updates vergisst.

6. fail2ban installieren

fail2ban überwacht Logdateien auf wiederholte fehlgeschlagene Anmeldeversuche und sperrt die angreifenden IP-Adressen temporär. Es ist effektiv gegen Brute-Force-Angriffe auf jeden exponierten Dienst.

# Debian/Ubuntu
sudo apt install fail2ban

# AlmaLinux/Rocky
sudo dnf install epel-release
sudo dnf install fail2ban

Dienst starten und aktivieren:

sudo systemctl enable --now fail2ban

Die Standardkonfiguration schützt SSH sofort. Du kannst benutzerdefinierte Jails für andere Dienste (Nginx, Postfix usw.) in /etc/fail2ban/jail.local hinzufügen.

7. Angriffsfläche reduzieren

Jeder laufende Dienst ist ein potenzieller Eintrittspunkt. Minimiere, was exponiert ist:

  • Unbenutzte Pakete entfernen: Deinstalliere Software, die du nicht brauchst.
  • Unbenutzte Dienste deaktivieren: Prüfe laufende Dienste mit systemctl list-units --type=service --state=running und deaktiviere alles Unnötige.
  • Unbenutzte Ports schließen: Wenn ein Dienst nur lokal benötigt wird, binde ihn an 127.0.0.1 statt 0.0.0.0.
  • DDoS-Schutz nutzen: Aktiviere Layer-4- und Layer-7-Schutz für Produktions-Workloads.

8. Starke Authentifizierung überall verwenden

Wende über SSH hinaus dasselbe Prinzip auf alle Dienste an:

  • Datenbankserver (MySQL, PostgreSQL) — an 127.0.0.1 binden, starke Passwörter verwenden, Remote-Root-Zugriff deaktivieren
  • Web-Panels — immer HTTPS verwenden, Zwei-Faktor-Authentifizierung aktivieren, wenn verfügbar
  • APIs — Token-basierte Authentifizierung verwenden, Rate-Limiting implementieren

Sicherheits-Checkliste

Schritt Status
SSH-Schlüssel-Authentifizierung aktiviert
Passwort-Authentifizierung deaktiviert
Firewall konfiguriert, nur benötigte Ports offen
Automatische Sicherheitsupdates aktiviert
fail2ban installiert und läuft
Unbenutzte Dienste deaktiviert
Datenbank an localhost gebunden
DDoS-Schutz aktiviert

Arbeite jeden Punkt nach dem Einrichten eines neuen Servers ab. Überprüfe die Liste regelmäßig, um sicherzustellen, dass nichts abgedriftet ist.

Nächste Schritte