VPSSPark Blog
← Zurück zum Tagebuch

Leichtgewichtige Firewall auf Ihrem Cloud-Server einrichten (UFW-Anleitung)

Server-Notizen · 2026.07.20 · ~12 Min. Lesezeit

Häufig gesucht: UFW Firewall · Cloud-Server Firewall · Ubuntu VPS Sicherheit

Server-Racks und Netzwerkkabel—Cloud-Server-Firewall und Netzwerkgrenze
Bei einem neuen Cloud-Server steht nicht die App-Installation an erster Stelle, sondern die Netzwerkgrenze—UFW ist der einfachste Einstieg.

Frisch installiertes Linux-VPS, öffentliche IP – und schon landet der Server im Visier automatischer Scanner. Wir haben einen frisch gebooteten Ubuntu-22.04-Server beobachtet: Innerhalb von vier Stunden tauchten in /var/log/auth.log über tausend SSH-Brute-Force-Versuche aus aller Welt auf. Die Security Group des Cloud-Anbieters fängt einen Teil ab, aber die Firewall auf Systemebene ist die zweite Verteidigungslinie, die Sie wirklich selbst kontrollieren.

Auf Ubuntu- und Debian-Servern ist UFW (Uncomplicated Firewall) praktisch die Standardlösung: einfache Syntax, nahtlose Anbindung an iptables, gute Dokumentation. Dieser Artikel erklärt nicht dutzende iptables-Kettenregeln, sondern fasst einen in Produktion erprobten UFW-Workflow als Checkliste zusammen – von Installation und SSH-Freigabe über Web-Ports und Docker-Koexistenz bis zur Zusammenarbeit mit Cloud-Security-Groups. Und vor allem: wie Sie die Firewall konfigurieren, ohne sich auszusperren.

Voraussetzung: Sie sind per SSH oder Cloud-Konsole (VNC) eingeloggt und haben sudo-Rechte. Wenn SSH bereits nicht mehr funktioniert, lesen Sie zuerst unseren Leitfaden zur Fehlerbehebung bei SSH-Verbindungsabbrüchen auf Linux-Servern, klären Sie Netzwerk- vs. Firewall-Problem – und kommen Sie dann hierher zurück.

2 Ebenen
Security Group + UFW
5 Schritte
Standard-Workflow
~2 Min.
Basisregeln live

Warum braucht ein Cloud-Server eine Firewall?

Viele denken: „Ich habe eine Security Group, im System muss ich nichts mehr tun.“ Tatsächlich haben die beiden Ebenen unterschiedliche Aufgaben: Die Cloud-Security-Group filtert außerhalb der virtuellen NIC, verwaltet über die Web-Konsole; UFW filtert auf Kernel-Ebene (netfilter), verwaltet über die Kommandozeile. Nur eine Ebene zu nutzen, ist wie ein Haustor zu verriegeln, aber die Schlafzimmertür offen zu lassen – laterale Bewegung im internen Netz, versehentlich exponierte Dienste und Reverse Shells nach einem Einbruch brauchen Regeln auf Systemebene.

UFW ist laut der offiziellen Ubuntu-UFW-Dokumentation ein iptables-Frontend: ufw allow 22 wird in entsprechende ACCEPT-Regeln übersetzt. Die Syntax ist nahe an natürlicher Sprache, ufw status numbered zeigt die aktuelle Policy auf einen Blick, und Regeln lassen sich ändern, ohne den Überblick zu verlieren.

UFW-Firewall-Setup in fünf Schritten: Installation, SSH freigeben, Default-Policy, Dienstports öffnen, aktivieren und prüfen
Die Reihenfolge zählt: Erst den Admin-Zugang freigeben, dann Default-Deny setzen, erst danach enable – sonst sperren Sie sich schnell aus.
Ebene Tool Verwaltung Typischer Einsatz
Cloud-Anbieter (außen) Security Group / Network ACL Web-Konsole Grob: nur 22/80/443 eingehend
Betriebssystem (innen) UFW / firewalld SSH-Kommandozeile Fein: nach IP, Port, Rate-Limit
Anwendung fail2ban / CrowdSec Konfigurationsdateien Dynamisches Sperren von Brute-Force-IPs

Schritt 1: UFW installieren und prüfen

Ubuntu Desktop und die meisten Server-Images haben UFW vorinstalliert; minimale Images oft nicht. Zuerst prüfen:

UFW installieren (Debian/Ubuntu)
sudo apt update
                sudo apt install ufw -y

                # Aktuellen Status anzeigen (inactive = noch nicht aktiv)
                sudo ufw status verbose

                # Autostart (Regeln vor enable konfigurieren)
                sudo systemctl enable ufw

Zeigt die Ausgabe Status: inactive, können Sie Regeln sicher einzeln hinzufügen – sie greifen noch nicht. Das ist das beste Konfigurationsfenster. Führen Sie niemals ufw enable aus, bevor SSH freigegeben ist – sonst verlieren Sie sofort die Remote-Verbindung.

Goldene Regel gegen Aussperrung
Bevor Sie UFW aktivieren, öffnen Sie eine zweite SSH-Sitzung (oder lassen Sie die Cloud-Konsole/VNC offen). Nach der Konfiguration testen Sie die neue Verbindung, bevor Sie die alte schließen. „Ein Befehl und ausgesperrt“ ist einer der häufigsten Support-Fälle.

Schritt 2: SSH freigeben (die wichtigste Regel)

SSH ist Ihr Admin-Kanal und muss als Erstes freigegeben werden. Wenn sshd auf einem Nicht-Standard-Port läuft (z. B. 2222), muss der Port in der Regel mit sshd_config übereinstimmen – und die Security Group muss ebenfalls angepasst werden.

SSH freigeben
# Standard-Port 22
                sudo ufw allow 22/tcp comment 'SSH'

                # Benutzerdefinierter Port
                sudo ufw allow 2222/tcp comment 'SSH custom'

                # Nur Büro-Exit-IP (empfohlen in Produktion)
                sudo ufw allow from 203.0.113.50 to any port 22 proto tcp

                # Nach Dienstname (wenn in /etc/services definiert)
                sudo ufw allow OpenSSH

Prüfen, ob sshd wirklich lauscht: sudo ss -tlnp | grep ssh. Sehen Sie 0.0.0.0:22 oder [::]:22, läuft der Dienst. Ist ListenAddress auf 127.0.0.1 gesetzt, hilft UFW nicht – das ist ein sshd-Konfigurationsproblem, kein Firewall-Problem.

Wie SSH-Port und Security Group zusammenspielen, erklärt unser FAQ zur Minimal-Exposition und Firewall-Entscheidungen für Linux-Cloud-Hosts – inklusive einer SSH/HTTPS-Matrix für langfristige Planung.

Schritt 3: Default-Policy setzen

Die empfohlene UFW-Baseline: alle eingehenden Verbindungen verweigern, alle ausgehenden erlauben. Ausgehend offen, damit der Server apt-Pakete laden, APIs aufrufen und DNS auflösen kann; eingehend nur die Ports, die Sie wirklich brauchen.

Default-Policy
sudo ufw default deny incoming
                sudo ufw default allow outgoing

                # Regeln mit Nummern anzeigen (zum Löschen)
                sudo ufw status numbered

Bei Compliance-Anforderungen können Sie auch ausgehend einschränken: ufw default deny outgoing, dann gezielt allow out für DNS (53), HTTPS (443) usw. Für die meisten Web-/API-Server ist „ausgehend offen, eingehend nach Bedarf“ das beste Verhältnis aus Aufwand und Sicherheit.

Schritt 4: Dienstports öffnen

Regeln nach Ihren tatsächlichen Diensten hinzufügen. Typische Kombinationen:

Web und gängige Dienste
# HTTP / HTTPS (Nginx, Caddy, Apache)
                sudo ufw allow 80/tcp
                sudo ufw allow 443/tcp

                # Oder Dienstnamen-Kurzform
                sudo ufw allow 'Nginx Full'

                # Dev: Node oder andere Ports temporär
                sudo ufw allow 3000/tcp comment 'dev API'

                # Admin-Panel nur von bestimmter Quell-IP
                sudo ufw allow from 198.51.100.0/24 to any port 8080 proto tcp

Produktionstipp: Was über 443 per Reverse Proxy laufen kann, sollte 3000/8080 nicht direkt exponieren. In UFW nur 22 + 80 + 443 öffnen, Anwendung auf 127.0.0.1 binden, TLS-Terminierung über Nginx oder Caddy – die Angriffsfläche schrumpft sofort.

Schritt 5: Aktivieren und verifizieren

Nach dem Hinzufügen aller Regeln UFW aktivieren:

UFW aktivieren
sudo ufw enable
                # Warnt vor möglicher SSH-Unterbrechung – mit y bestätigen

                sudo ufw status verbose
                sudo ufw status numbered

Von einem anderen Rechner testen: nc -zv your.server.ip 22 sollte open melden; nicht freigegebene Ports (z. B. 3306) sollten timeout oder refused liefern. Fällt SSH weg, sofort per Cloud-Konsole/VNC sudo ufw disable ausführen, fehlende Regel finden und neu starten.

Fortgeschritten: Rate-Limit, Löschen, Reihenfolge

UFW bietet mehr als allow – häufige Szenarien:

Erweiterte Befehle
# Rate-Limit: SSH-Brute-Force (6 Versuche/30 Sek.)
                sudo ufw limit 22/tcp

                # Regel nach Nummer löschen (zuerst status numbered)
                sudo ufw delete 3

                # Bestimmte IP sperren
                sudo ufw deny from 192.0.2.100

                # Alle Regeln zurücksetzen (vorsichtig)
                sudo ufw reset

ufw limit nutzt intern iptables recent für Verbindungsraten – effektiv für SSH, ersetzt aber nicht Schlüssel-Login und deaktivierte Passwort-Auth. Regeln werden in Hinzufügereihenfolge abgearbeitet; spezifischere Regeln sollten weiter oben stehen. Wirkt ein allow nicht, prüfen Sie, ob ein späteres deny es überdeckt.

UFW mit Docker / Kubernetes

Hier wirkt UFW am leichtesten „konfiguriert, aber wirkungslos“. Docker fügt standardmäßig eigene iptables-Ketten ein und kann UFW-Regeln umgehen – Sie glauben, 3306 sei zu, der Container-Port ist trotzdem öffentlich erreichbar.

Lösungen (nach Empfehlung):

  • Container nur an 127.0.0.1 binden-p 127.0.0.1:3000:3000, nach außen per Host-Reverse-Proxy
  • In docker-compose kein ports – internes Netz + Reverse Proxy
  • Docker "iptables": false (Forwarding selbst verwalten – für Fortgeschrittene)
  • Cloud-Security-Group als letztes Netz – filtert auch dann, wenn Docker UFW umgeht

Auf K8s-Knoten kommen Calico/Cilium NetworkPolicies dazu; UFW ergänzt auf Knotenebene. Für einzelnes VPS mit Docker Compose reicht meist Punkt eins (Loopback-Bindung).

Security Group und UFW zusammen

Beide Ebenen konfigurieren – und die Policy sollte übereinstimmen: Security Group erlaubt 22, UFW muss 22 allowen; Security Group blockiert 3306, UFW-allow hilft von außen nicht – aber kompromittierte Maschinen im internen Netz könnten scannen, daher UFW trotzdem deny.

Empfohlene Aufteilung:

  • Security Group: grob, nur 22/80/443, Quell-IP ggf. auf Büro oder CDN
  • UFW: fein, Dienst-Kommentare, SSH limit, bösartige IPs sperren
  • fail2ban: dynamisch, liest Logs und sperrt automatisch

Nach Änderungen extern prüfen: nmap -p 22,80,443,3306 your.server.ip (nur eigene Server scannen!). Zeigt 3306 open, obwohl Sie keine DB exponieren wollten, sofort Docker-Bindung oder Listen-Adresse der App prüfen.

Troubleshooting: Dienst nach UFW-Aktivierung nicht erreichbar

In dieser Reihenfolge – die meisten Fälle sind in zehn Minuten geklärt:

  • sudo ufw status verbose – greifen die Regeln? Stimmen Port und Protokoll (tcp/udp)?
  • sudo ss -tlnp – lauscht die App auf 0.0.0.0 statt nur 127.0.0.1?
  • Cloud-Security-Group eingehend synchron?
  • Umgeht Docker UFW?
  • Kurz sudo ufw disable zum Vergleich (danach wieder enable)

Scheitert nur eine Quell-IP, prüfen Sie deny from oder fail2ban. UFW-Logs sind standardmäßig knapp; bei Bedarf in /etc/ufw/ufw.conf LOGLEVEL=medium, dann sudo ufw reload, abgelehnte Pakete in /var/log/ufw.log.

Go-Live-Checkliste (zum Kopieren)

Nach Neuinstallation oder Reimage in dieser Reihenfolge:

UFW-Initialisierung (Referenz)
sudo apt install ufw -y
                sudo ufw default deny incoming
                sudo ufw default allow outgoing
                sudo ufw allow 22/tcp comment 'SSH'      # oder Ihr Custom-Port
                sudo ufw allow 80/tcp
                sudo ufw allow 443/tcp
                sudo ufw limit 22/tcp                    # optional: SSH Rate-Limit
                sudo ufw enable
                sudo ufw status verbose

Nicht vergessen: SSH-Schlüssel, root-Login per Passwort aus, regelmäßige Updates via unattended-upgrades. Die Firewall ist Grenze, kein Allheilmittel – aber sie hält den Großteil automatisierter Scans draußen, während Sie tiefergehende Härtung vornehmen.

Kurzfassung
Security Group außen, UFW innen: zuerst SSH allow, dann default deny incoming, Dienstports, zweite Sitzung, dann enable. Docker an 127.0.0.1 binden – keine Ports heimlich ins Internet leaken.

Stabile Ops-Knoten: weniger Firewall-Stress

Wer mehrere Linux-VPS verwaltet, nutzt oft einen Jump Host mit fester Exit-IP für SSH – Security Group und UFW erlauben nur die Jump-IP, lokal verbinden Sie per Schlüsselkette. Ein Mac mini passt gut: natives Unix unter macOS, Terminal und OpenSSH out of the box; der M4-Chip braucht im Leerlauf nur etwa 4 W – ideal 7×24 als Relay auf dem Schreibtisch, sparsamer und leiser als ein weiterer x86-Mini-PC.

Windows-Rechner in der gleichen Preisklasse als dauerhafter Jump verbrauchen mehr Strom und laufen lauter; macOS stürzt selten ab, mit FileVault und Gatekeeper ist die Schlüsselablage sicherer. Wer zusätzlich Xcode oder Docker für Releases braucht, kann Jump und Build auf einem Cloud-Mac mini bündeln.

Wenn Sie eine verlässliche Remote-Ops-Umgebung planen, ist VPSSPark Cloud Mac mini M4 eine pragmatische Wahl für Low-Power-Jump und Dev-Knoten Tarife ansehen und Server-Härtung nicht mehr allein um Mitternacht erledigen.

Zeitlich begrenzt

Firewall steht—der Jump-Host muss es auch

Stromsparender Mac mini · natives Unix-Sprungbrett · leise 24/7

Zur Startseite
Zeitlich begrenzt Tarife ansehen