Ein gut konfigurierter Server exponiert nur die unbedingt notwendigen Dienste. Alles andere sollte geschlossen sein, und genau das ist die Aufgabe einer Firewall. Unter Linux basiert die Netzwerkfilterung auf netfilter, historisch gesteuert durch iptables, eine mächtige, aber als trocken geltende Syntax. UFW (Uncomplicated Firewall) ist die offizielle Schicht von Ubuntu, die diese Filterung zugänglich macht: einige lesbare Befehle genügen, um Ihre Maschine zu sperren.
Dieser Leitfaden begleitet Sie Schritt für Schritt bei der Installation und Konfiguration von UFW auf einem VPS Linux unter Ubuntu oder Debian: Standardrichtlinien, Erlauben von SSH, ohne sich selbst auszusperren, Öffnen der Webports, erweiterte Regeln, Protokollierung und die bekannte Falle des Umgehens von UFW durch Docker.
Was ist UFW und warum sollte man es verwenden?
UFW ist keine vollständige Firewall: Es ist eine vereinfachte Schnittstelle über iptables/nftables. Wo iptables komplexe Zeilen erfordert, genügt UFW Anweisungen wie ufw allow 443. Es verwaltet den Datenverkehr in beide Richtungen, eingehend (incoming) und ausgehend (outgoing), und ermöglicht das Filtern nach Port, Protokoll, benanntem Dienst oder Quelladresse.
Das Prinzip einer guten Firewall lässt sich in einem Satz zusammenfassen: alles standardmäßig blockieren, dann nur das Notwendige öffnen. Konkret verweigern wir alle eingehenden Verbindungen, erlauben alle ausgehenden Verbindungen und fügen dann eine Ausnahme für jeden Dienst hinzu, den wir zugänglich machen möchten (SSH, HTTP, HTTPS…).
Voraussetzungen
- Ein VPS unter Ubuntu 22.04/24.04 oder Debian 11/12 mit einem
root-Zugang oder einemsudo-Benutzer. - Ein funktionierender SSH-Zugang und vor allem das Wissen um den verwendeten SSH-Port (standardmäßig 22).
- Eine Warnung, die Sie vor allem lesen sollten: Eine Firewall auf einem entfernten Server falsch zu konfigurieren, ist der beste Weg, sich selbst auszusperren. Befolgen Sie die Reihenfolge der Schritte unten genau: Erlauben Sie SSH vor der Aktivierung von UFW, niemals umgekehrt.
UFW auf Ubuntu und Debian installieren
Auf Ubuntu ist UFW in der Regel vorinstalliert. Auf Debian muss es hinzugefügt werden. In beiden Fällen:
sudo apt update
sudo apt install -y ufw
Überprüfen Sie den Status des Dienstes. Zu Beginn ist UFW inaktiv:
sudo ufw status
Die Antwort Status: inactive ist normal: Wir werden zuerst die Regeln festlegen und dann aktivieren.
Standardrichtlinien festlegen
Wir beginnen mit der Grundregel: alles, was hereinkommt, verweigern, alles, was herausgeht, erlauben. Das ist die Grundlage eines sicheren Servers.
sudo ufw default deny incoming
sudo ufw default allow outgoing
Zu diesem Zeitpunkt würden Sie, wenn Sie UFW sofort aktivieren, Ihre SSH-Verbindung verlieren. Deshalb ist der nächste Schritt unbedingt erforderlich vor der Aktivierung.
SSH erlauben (vor der Aktivierung von UFW)
Erlauben Sie den SSH-Dienst, um den Zugang nicht zu verlieren:
sudo ufw allow OpenSSH
OpenSSH ist ein vordefiniertes Anwendungsprofil, das den Port 22 öffnet. Sie können auch den Port direkt angeben:
sudo ufw allow 22/tcp
Haben Sie den SSH-Port geändert? Das ist eine gute Sicherheitspraktik. In diesem Fall ersetzen Sie
22durch Ihren tatsächlichen Port, zum Beispielsudo ufw allow 2222/tcp. Überprüfen Sie Ihren Port in/etc/ssh/sshd_config(DirektivePort) vor der Aktivierung der Firewall. Um weitergehende Informationen zur Absicherung des Zugangs zu erhalten, siehe den Abschnitt zur Sicherung am Ende des Artikels.
UFW aktivieren
Sobald SSH erlaubt ist, aktivieren Sie die Firewall:
sudo ufw enable
UFW zeigt eine Warnung an, dass der Befehl bestehende SSH-Verbindungen stören kann. Da Sie SSH gerade vorher erlaubt haben, bestätigen Sie mit y. Ihre aktuelle Verbindung bleibt offen.
Status überprüfen und Regeln auflisten
Für einen detaillierten Status, einschließlich der Standardrichtlinien und der Protokollierung:
sudo ufw status verbose
Um die Regeln mit ihrer Nummer anzuzeigen, die notwendig ist, um eine Regel später zu löschen:
sudo ufw status numbered
Sie erhalten eine Ausgabe wie diese:
To Action From
-- ------ ----
[ 1] 22/tcp ALLOW IN Anywhere
[ 2] 80/tcp ALLOW IN Anywhere
[ 3] 443/tcp ALLOW IN Anywhere
Ports für Ihre Dienste öffnen
Das ist die tägliche Nutzung von UFW: einen Port für jeden Dienst zu öffnen, den Sie exponieren. UFW akzeptiert mehrere Syntaxen.
Nach dem Namen des Webdienstes (öffnet 80 und 443 auf einmal):
sudo ufw allow 'Nginx Full'
Dieses Profil existiert, sobald Nginx installiert ist; das Äquivalent für Apache ist 'Apache Full'. Wenn Sie einen Webserver einrichten, ergänzen Sie mit unserem Leitfaden Nginx und PHP-FPM auf einem VPS installieren.
Nach Portnummer:
sudo ufw allow 80/tcp # HTTP
sudo ufw allow 443/tcp # HTTPS
sudo ufw allow 25565/tcp # Beispiel: Spieleserver
Nach Portbereich:
sudo ufw allow 6000:6007/tcp
Von einer bestimmten Quelladresse (einen Port nur für eine vertrauenswürdige IP öffnen):
sudo ufw allow from 203.0.113.10 to any port 3306 proto tcp
Dieses Beispiel erlaubt MySQL (Port 3306) nur von der IP 203.0.113.10, ideal für eine Datenbank, die niemals für das gesamte Internet exponiert werden sollte. Sie können auch ein ganzes Subnetz in CIDR-Notation anvisieren (203.0.113.0/24).
Anwendungsprofile
UFW kennt „Profile“, die die Ports einer Anwendung gruppieren, was das Merken der Nummern erleichtert. Listen Sie die verfügbaren auf Ihrem System auf:
sudo ufw app list
Sie finden dort beispielsweise OpenSSH, Nginx Full, Nginx HTTP, Nginx HTTPS, Apache Full… Um die Details der von einem Profil abgedeckten Ports zu erfahren:
sudo ufw app info 'Nginx Full'
Diese Profile erscheinen automatisch, sobald eine kompatible Software installiert ist. Sie machen Ihre Regeln lesbarer: sudo ufw allow 'Nginx Full' ist aussagekräftiger als sudo ufw allow 80,443/tcp.
Eine Regel löschen
Zwei Methoden. Die sicherste erfolgt über die Nummer, die von status numbered angezeigt wird:
sudo ufw status numbered
sudo ufw delete 2
Sie können auch eine Regel löschen, indem Sie sie neu schreiben, vorangestellt mit delete:
sudo ufw delete allow 80/tcp
Erweiterte Regeln: SSH-Verbindungen begrenzen
UFW bietet einen integrierten Schutz gegen Brute-Force-Angriffe: die Regel limit. Sie blockiert vorübergehend eine IP, die zu viele Verbindungen in kurzer Zeit versucht (standardmäßig mehr als 6 Versuche in 30 Sekunden).
sudo ufw limit OpenSSH
Das ist eine nützliche Ergänzung, aber absichtlich einfach. Für eine feine Erkennung und dauerhafte Sperrungen über alle Ihre Dienste hinweg kombinieren Sie UFW mit Fail2ban (Leitfaden folgt in diesem gleichen Abschnitt). Die beiden Tools sind perfekt ergänzend: UFW entscheidet, welche Ports geöffnet sind, Fail2ban entscheidet, welche IPs blockiert werden sollten.
Erlauben, verweigern oder ablehnen: die Aktion gut wählen
UFW bietet drei Hauptaktionen für den eingehenden Datenverkehr, die nicht verwechselt werden sollten:
allowerlaubt die Verbindung. Das ist das, was Sie für Ihre öffentlichen Dienste (SSH, Web) verwenden.denyblockiert die Verbindung stillschweigend. Das Paket wird ignoriert, ohne Antwort. Der Angreifer weiß nicht, ob der Port geschlossen oder gefiltert ist: Das ist das empfohlene Verhalten für einen exponierten Server.rejectblockiert die Verbindung, sendet jedoch eine Ablehnungsnachricht an den Absender. Nützlich intern für eine schnelle Diagnose, weniger diskret bei einem Scan.
In fast allen Fällen auf einem öffentlichen Server behalten wir die Standardrichtlinie deny incoming und fügen gezielte allow-Regeln hinzu. reject bleibt Situationen vorbehalten, in denen wir explizit signalisieren möchten, dass ein Port geschlossen ist.
Die große Falle: UFW und Docker
Hier ist der Punkt, der die meisten Administratoren überrascht, und eine echte stille Sicherheitslücke. Docker umgeht UFW. Wenn Sie einen Containerport veröffentlichen (zum Beispiel docker run -p 8080:80), schreibt Docker seine eigenen Regeln direkt in iptables, vor den von UFW verwalteten. Das Ergebnis: Der Port ist von überall im Internet zugänglich, auch wenn ufw status behauptet, ihn zu blockieren. Ihre Firewall zeigt einen Schutz an, der nicht existiert.
Die Referenzlösung ist das Open-Source-Projekt ufw-docker, das die beiden versöhnt. Zusammenfassend:
- Fügen Sie am Ende von
/etc/ufw/after.ruleseinen speziellen Konfigurationsblock hinzu (das Repository liefert den genauen Inhalt zum Kopieren). - Laden Sie UFW neu:
sudo ufw reload. - Verwalten Sie nun den Zugang zu den Containern mit der speziellen Syntax, zum Beispiel:
sudo ufw route allow proto tcp from any to any port 8080
Solange diese Konfiguration nicht vorhanden ist, betrachten Sie, dass jeder von Docker veröffentlichte Port für die gesamte Welt geöffnet ist. Wenn Sie Docker auf Ihrem Server verwenden, behandeln Sie diesen Punkt als prioritär.
Protokollierung
Um die abgelehnten Verbindungen nachzuvollziehen und ein Problem zu diagnostizieren, aktivieren Sie die Protokollierung:
sudo ufw logging on
Die Ereignisse werden in /var/log/ufw.log geschrieben. Sie können das Niveau (low, medium, high, full) je nach gewünschtem Volumen anpassen. Für einen Produktionsserver reicht in der Regel low aus und verhindert, dass die Protokolle überlastet werden.
UFW deaktivieren oder zurücksetzen
Um die Firewall vorübergehend zu deaktivieren:
sudo ufw disable
Um alles zurückzusetzen und von einer leeren Konfiguration aus zu starten (die Regeln werden gelöscht):
sudo ufw reset
Nach einem reset vergessen Sie nicht, SSH erneut zu erlauben, bevor Sie UFW wieder aktivieren, um zu vermeiden, dass Sie sich selbst aussperren.
Häufig gestellte Fragen
Ersetzt UFW iptables? Nein, es steuert es. UFW generiert die iptables/nftables-Regeln für Sie. Die beiden stehen nicht im Widerspruch: UFW ist einfach eine lesbarere Schicht.
Ich habe mich ausgesperrt, was soll ich tun? Verwenden Sie die Notfallkonsole (KVM/VNC), die mit Ihrem VPS bereitgestellt wird, um sich außerhalb von SSH anzumelden, und korrigieren Sie dann die Regel oder führen Sie sudo ufw disable aus. Genau um diese Situation zu vermeiden, sollten Sie SSH vor der Aktivierung von UFW erlauben.
Sollte ich die Ports in tcp oder udp öffnen? Die meisten Dienste (SSH, HTTP, HTTPS) verwenden TCP. Einige Dienste (WireGuard VPN, Spiele, DNS) verwenden UDP. Geben Sie das Protokoll an, wenn Sie es wissen: sudo ufw allow 51820/udp.
Schützt UFW vor DDoS-Angriffen? Teilweise. Es filtert und kann die Verbindungen begrenzen, aber ein volumetrischer Angriff wird upstream auf Netzwerkebene behandelt. UFW bleibt jedoch ein unverzichtbarer Baustein der grundlegenden Hygiene.
Der Sicherungsprozess für Ihren Server
Eine korrekt konfigurierte Firewall ist der zweite Schritt zu einem gut geschützten Server. Um den Prozess auf Ihrem VPS Linux abzuschließen, folgen Sie dem vollständigen Prozess:
- SSH-Schlüssel ersetzen Sie das Passwort durch eine Authentifizierung mit Schlüsseln (Leitfaden folgt).
- UFW schließen Sie alle unnötigen Ports (Sie sind hier).
- Fail2ban sperren Sie automatisch Angreifer, die hartnäckig sind (Leitfaden folgt).
- Certbot verschlüsseln Sie Ihre Dienste mit einem Let's Encrypt SSL-Zertifikat (Leitfaden folgt).
Finden Sie alle unsere Tutorials in der Linux-Dokumentation. Mit UFW eingerichtet, exponiert Ihr Server nur das, was Sie ausdrücklich erlaubt haben, die Grundlage jeder ernsthaften Konfiguration.
