Linux VPS oder Root-Server auf Netcup absichern (5-Schichten Defense-in-Depth Blueprint)
Sich auf eine einzige Sicherheitsmaßnahme (wie UFW allein) zu verlassen, macht einen Produktionsserver verwundbar: Ein einziger docker run -p-Befehl kann UFW umgehen, und eine ungepatchte OpenSSL-Bibliothek im RAM bleibt selbst nach einem apt upgrade angreifbar, solange der zugehörige Dienst nicht neu gestartet wird. Dieser Leitfaden implementiert eine 5-schichtige Defense-in-Depth-Architektur speziell für Netcup KVM-Server – von der zustandsbehafteten SCP Hypervisor-Firewall über Dual-Stack-UFW und Fail2ban mit systemd-Backend bis hin zu Kernel-sysctl-Hardening und needrestart.
systemd-Journal-Backend für Fail2ban, needrestart und unattended-upgrades) sowie Netcups zustandsbehafteter SCP Hypervisor-Edge-Firewall. VORAUSSETZUNGEN // ANFORDERUNGEN
CHECKLISTE- ✓ Ein Netcup VPS (G11.5s oder G12.5) oder Root-Server (G12.5) mit Ubuntu 24.04 LTS oder Debian 12
- ✓ Bereits eingerichtete und getestete Ed25519-SSH-Key-Authentifizierung
Wichtige Erkenntnisse (Key Takeaways)
KURZFAZIT-
01 Schicht 1 (Hypervisor-Edge): Konfigurieren Sie die zustandsbehaftete Netcup SCP Firewall, um nicht autorisierte TCP/UDP-Ports außerhalb der VM zu verwerfen, bevor Pakete Ihren Gast-Kernel oder Docker-
PREROUTING-Ketten erreichen. -
02 Schicht 2 (Host-Firewall): Erzwingen Sie Dual-Stack-UFW (
IPV6=yes) innerhalb des Gast-Betriebssystems. -
03 Schicht 3 (Intrusion Prevention): Konfigurieren Sie Fail2ban mit
backend = systemd(zwingend unter Ubuntu 24.04, da/var/log/auth.logdort nicht mehr existiert) und exponentiell steigenden Sperrzeiten (bantime.increment = true). -
04 Schicht 4 & 5 (Kernel-Hardening & Automatisches CVE-Patching): Härten Sie
/etc/sysctl.d/99-netcup-security.confund richten Sieunattended-upgrades+needrestartfür automatische Dienst-Neustarts nach Bibliotheks-Updates ein.
📑 Inhaltsverzeichnis (4 Abschnitte) ▼
- 01 Schicht 1: Die zustandsbehaftete Netcup SCP Hypervisor-Edge-Firewall konfigurieren
- 02 Schicht 2: Fail2ban mit backend = systemd & exponentiellen Sperrzeiten bereitstellen
- 03 Schicht 3: Kernel-Netzwerk- & Speicher-Exploit-Schutz (/etc/sysctl.d/)
- 04 Schicht 4: Automatisches CVE-Patching (unattended-upgrades) & Daemon-Reloads (needrestart)
Schicht 1: Die zustandsbehaftete Netcup SCP Hypervisor-Edge-Firewall konfigurieren
Die im Netcup Server Control Panel (servercontrolpanel.de) für alle Generationen 11/11.5/12/12.5 verfügbare SCP Stateful Firewall filtert Datenverkehr direkt am virtuellen Switch des Host-Hypervisors (tap-Interface), noch bevor Pakete Ihre virtuelle Maschine erreichen. Das bietet zwei entscheidende Sicherheitsvorteile: Erstens werden volumetrische Port-Scans (z. B. auf Port 3306, 5432, 6379 oder 27017) bereits auf dem Host-Switch verworfen, ohne CPU-SoftIRQ-Interrupts oder Conntrack-Tabelleneinträge in Ihrer VM zu verbrauchen; zweitens können Docker-Container selbst bei einem Fehlkonfigurationsfehler (-p 5432:5432) niemals ein Loch in die Hypervisor-Firewall reißen.
Im Gegensatz zu einfachen statischen Paketfiltern arbeitet die Netcup SCP Firewall zustandsbehaftet (Stateful Inspection): Sobald Ihre VM eine ausgehende Verbindung initiiert (etwa für apt update, git clone, ausgehende Webhooks oder DNS-Abfragen), merkt sich die Status-Engine des Hypervisors den Verbindungszustand (ESTABLISHED, RELATED) und lässt die zugehörigen Antwortpakete automatisch passieren, während unangeforderte eingehende Verbindungsversuche (SYN) auf nicht freigegebenen Ports mit DROP verworfen werden. Über die Funktion Firewall Policies / Templates im SCP können Sie ein Standard-Regelwerk einmalig definieren und mit einem Klick oder über die SCP-REST-API auf beliebig viele Netcup-Server anwenden.
Achten Sie beim Anlegen Ihrer Ingress-Regeln darauf, ICMP und insbesondere ICMPv6 (Typen 133 bis 136) ausdrücklich zuzulassen (ACCEPT). IPv6 benötigt die ICMPv6-Pakete *Neighbor Solicitation (Typ 135)*, *Neighbor Advertisement (Typ 136)* sowie *Packet Too Big (Typ 2)* zwingend für die Layer-2-Nachbarschaftsauflösung zum Netcup-Gateway fe80::1 und für Path MTU Discovery (PMTUD). Ein pauschales Blockieren von ICMPv6 führt unweigerlich zu eingefrorenen TLS-Handshakes und IPv6-Routing-Abbrüchen. Konfigurieren Sie unter SCP → Server auswählen → Firewall die folgende Produktions-Matrix:
| Richtung | Protokoll | Quell-IP / CIDR | Zielport | Aktion & Technischer Zweck |
|---|---|---|---|---|
| Ingress (Eingehend) | TCP | 0.0.0.0/0, ::/0 (oder Admin-IP) | 22 (oder Custom SSH) | ACCEPT — OpenSSH Fernwartung |
| Ingress (Eingehend) | TCP | 0.0.0.0/0, ::/0 | 80, 443 | ACCEPT — HTTP/1.1, HTTP/2 TLS Web-Traffic |
| Ingress (Eingehend) | UDP | 0.0.0.0/0, ::/0 | 443 | ACCEPT — HTTP/3 (QUIC) UDP-Transport |
| Ingress (Eingehend) | ICMP / ICMPv6 | 0.0.0.0/0, ::/0 | Alle (insb. Typ 133–136) | ACCEPT — Path MTU Discovery & IPv6 Neighbor Discovery |
| Ingress (Eingehend) | ALL | 0.0.0.0/0, ::/0 | 1 – 65535 | DROP (Standard-Policy) — Blockiert alle internen DB-/Docker-Ports |
| Egress (Ausgehend) | ALL | 0.0.0.0/0, ::/0 | 1 – 65535 | ACCEPT — Ausgehende Paket-Updates, API-Aufrufe & DNS |
Schicht 2: Fail2ban mit backend = systemd & exponentiellen Sperrzeiten bereitstellen
Unter Ubuntu 24.04 LTS und modernen Debian 12 Installationen wird standardmäßig kein klassischer Text-Log-Daemon (rsyslog) mehr installiert – die Datei /var/log/auth.log existiert also nicht! Wenn Sie fail2ban ohne Anpassung installieren, sucht der Dienst nach /var/log/auth.log und bricht den Start entweder mit Failed during configuration: Have not found any log file for sshd jail ab oder übersieht sämtliche fehlgeschlagenen SSH-Anmeldeversuche. Durch die Installation von python3-systemd und das Setzen von backend = systemd liest Fail2ban strukturierte Ereignisse (_SYSTEMD_UNIT=ssh.service) verzögerungsfrei direkt aus dem binären systemd-journald-Index.
Gleichzeitig aktivieren wir im [sshd]-Jail die Einstellung mode = aggressive. Moderne verteilte SSH-Botnetze führen oft keinen vollständigen Passwort-Versuch mehr durch, sondern prüfen nur den SSH-Banner oder brechen den Handshake bereits in der Pre-Auth-Phase (Connection closed by authenticating user root ... [preauth]) ab, um unter dem Radar klassischer Fail2ban-Filter zu bleiben. Mit mode = aggressive erkennt Fail2ban auch diese Pre-Auth-Scanner-Abbrüche und sperrt die Quell-IP über ufw bereits nach drei Versuchen innerhalb von 15 Minuten (findtime = 15m, maxretry = 3).
Anstelle einer starren 10-Minuten-Sperre, nach deren Ablauf dasselbe Botnetz einfach weiterprobiert, schalten wir exponentiell ansteigende Sperrzeiten (bantime.increment = true) frei: Beim ersten Verstoß wird die IP für 1h gesperrt, beim zweiten Mal für 2h, danach für 4h, 8h, 16h bis hin zu einer maximalen Sperrdauer von 5 Wochen (bantime.maxtime = 5w). Tragen Sie Ihre eigene statische Büro- oder WireGuard-VPN-IP in ignoreip ein, um sich niemals versehentlich selbst auszusperren:
sudo apt update
sudo apt install -y fail2ban python3-systemd
# Gehärtete Fail2ban-Konfiguration mit systemd-Backend und exponentiellen Sperrzeiten schreiben
cat << 'EOF' | sudo tee /etc/fail2ban/jail.local
[DEFAULT]
bantime = 1h
bantime.increment = true
bantime.factor = 2
bantime.maxtime = 5w
findtime = 15m
maxretry = 3
backend = systemd
banaction = ufw
banaction_allports = ufw
ignoreip = 127.0.0.1/8 ::1
[sshd]
enabled = true
mode = aggressive
port = ssh
logpath = %(sshd_log)s
backend = systemd
EOF
sudo systemctl enable --now fail2ban
sudo systemctl restart fail2ban
sudo fail2ban-client status sshd Befehlserklärung: Installiert python3-systemd für den direkten Zugriff auf journald, koppelt Sperraktionen an ufw, aktiviert mode = aggressive (erfasst auch Pre-Auth-Scanner-Abbrüche) und schaltet exponentielles Ban-Scaling frei.
Status for the jail: sshd
|- Filter
| |- Currently failed: 0
| `- Total failed: 0
`- Actions
|- Currently banned: 0
`- Total banned: 0 Installieren Sie unter Ubuntu 24.04 LTS immer das Paket python3-systemd zusammen mit fail2ban, damit das systemd-Backend strukturierte _SYSTEMD_UNIT=ssh.service Journal-Events in Echtzeit auswerten kann.
Schicht 4: Automatisches CVE-Patching (unattended-upgrades) & Daemon-Reloads (needrestart)
Selbst die beste Firewall hilft nicht, wenn ein öffentlich erreichbarer Dienst eine bekannte Sicherheitslücke (CVE) aufweist. Wenn das Ubuntu- oder Debian-Sicherheitsteam einen kritischen Patch für libssl3, libc6 (glibc), expat oder openssh-server veröffentlicht, lädt unattended-upgrades das aktualisierte .deb-Paket automatisch herunter und ersetzt die Bibliotheksdatei auf der NVMe-SSD.
Dabei übersehen viele Administratoren jedoch ein entscheidendes Detail des Linux-Speichermanagements: Solange ein bereits laufender Daemon wie nginx, postfix, php-fpm oder postgresql nicht neu gestartet wird, behält er die alte, ungepatchte Version der Shared Library (.so) über gelöschte Inodes (DEL-Mapping in /proc/<pid>/maps) weiterhin aktiv im Arbeitsspeicher! Ihr Server glaubt laut dpkg -l, er sei gepatcht, führt aber im RAM nach wie vor den verwundbaren Code aus.
Das Werkzeug needrestart schließt genau diese Lücke: Nach jedem apt- oder unattended-upgrades-Lauf scannt needrestart sämtliche Prozess-Speicherabbilder auf veraltete Shared-Library-Mappings. Durch die Konfiguration $nrconf{restart} = 'a'; in /etc/needrestart/conf.d/99-netcup-auto.conf startet needrestart betroffene Systemd-Dienste vollautomatisch neu, ohne auf eine interaktive Eingabe zu warten. Für Compliance-Anforderungen können Sie dieses Setup optional um auditd ergänzen (sudo apt install -y auditd), um Schreibzugriffe auf /etc/passwd, /etc/shadow und /etc/ssh/sshd_config.d/ revisionssicher aufzuzeichnen:
sudo apt install -y unattended-upgrades needrestart
# needrestart so konfigurieren, dass Dienste nach Shared-Library-Updates automatisch neu starten
sudo mkdir -p /etc/needrestart/conf.d
cat << 'EOF' | sudo tee /etc/needrestart/conf.d/99-netcup-auto.conf
# Dienste automatisch ('a') statt nach interaktiver Rückfrage ('i') neu starten
$nrconf{restart} = 'a';
EOF
# Unattended-Upgrades per Dry-Run überprüfen
sudo unattended-upgrade --dry-run --debug | tail -n 10 Befehlserklärung: Stellt sicher, dass abhängige Dienste (nginx, ssh, postfix) nach einem Update von libssl oder glibc automatisch mit der gepatchten Bibliothek neu gestartet werden.
Häufige Fehlerbehebung
DIAGNOSE-GUIDE [SYMPTOM] Fail2ban startet unter Ubuntu 24.04 nicht (Failed during configuration: Have not found any log file for sshd jail)
Ursache: Ubuntu 24.04 hat rsyslog und /var/log/auth.log zugunsten von systemd-journald entfernt.
Lösung: Installieren Sie python3-systemd (sudo apt install -y python3-systemd) und setzen Sie backend = systemd in der /etc/fail2ban/jail.local wie in Schicht 2 beschrieben.
[SYMPTOM] Wie entsperre ich eine Entwickler-IP-Adresse, die versehentlich Fail2ban ausgelöst hat?
Ursache: Drei fehlgeschlagene SSH-Anmeldeversuche innerhalb von 15 Minuten haben das sshd-Jail aktiviert.
Lösung: Führen Sie sudo fail2ban-client set sshd unbanip 198.51.100.42 aus und fügen Sie feste Büro-/VPN-IPs zur ignoreip-Liste in /etc/fail2ban/jail.local hinzu.
[SYMPTOM] Ausgesperrt nach dem Anwenden einer zu strikten SCP Hypervisor-Firewall-Regel
Ursache: Port 22/tcp (oder Ihr benutzerdefinierter SSH-Port) wurde vergessen, bevor die Standard-Ingress-Policy im SCP auf DROP gesetzt wurde.
Lösung: Melden Sie sich unter servercontrolpanel.de (SCP) an, öffnen Sie den Reiter Firewall, fügen Sie die ACCEPT-Regel für TCP-Port 22 hinzu und klicken Sie auf Apply Rules – die Änderung greift innerhalb von 2 Sekunden ohne Reboot.
Häufig gestellte Fragen (FAQ)
GEPRÜFTE ANTWORTENBrauche ich UFW in Ubuntu überhaupt noch, wenn ich die Netcup SCP Stateful Firewall nutze?
Ja. Defense-in-Depth bedeutet, sich niemals auf eine einzige Kontrollebene zu verlassen: Die SCP Stateful Firewall schützt das externe Hypervisor-Interface (auch vor Docker-Port-Bypässen), während UFW + Fail2ban angreifende IPs dynamisch auf Betriebssystemebene sperren.
Sollte ich auf einem Netcup VPS eher CrowdSec oder Fail2ban installieren?
Beide Lösungen sind hervorragend. Fail2ban (~25 MB RAM-Bedarf) ist ideal für kleinere Instanzen wie den VPS nano G11.5s (2 GB ECC-RAM) oder den VPS 500 G12.5 (4 GB ECC-RAM). CrowdSec (~120 MB RAM-Bedarf) spielt seine Stärken mit gemeinschaftlichen Blocklisten besonders auf 8 GB+ Servern wie dem VPS 1000 G12.5 oder RS 1000 G12.5 aus.
Kostet die Netcup SCP Stateful Firewall bei VPS- oder Root-Server-Tarifen extra?
Nein! Die zustandsbehaftete SCP-Firewall ist bei allen aktuellen Netcup VPS- (G11.5s / G12.5) und Root-Server-Tarifen (G12.5) kostenlos enthalten und unterstützt wiederverwendbare Regel-Templates.
Sollte ich automatische Reboots nach Kernel-Updates in unattended-upgrades aktivieren?
Für einzelne produktive Datenbankserver empfehlen wir, Unattended-Upgrade::Automatic-Reboot "false"; beizubehalten, sodass needrestart zwar Dienste im laufenden Betrieb neu startet, Sie den 20-sekündigen Kernel-Reboot (nach einem kurzen SCP-Snapshot) aber kontrolliert selbst ausführen.
QUELLEN // GEPRÜFTE TECHNISCHE DOKUMENTATION
- [1] Ubuntu Server Security & Unattended Upgrades Documentation (https://ubuntu.com/server/docs/security-introduction)
- [2] Netcup Helpcenter — SCP Stateful Firewall (https://helpcenter.netcup.com/)