UFW auf dem VPS einrichten: Firewall-Grundlagen
Lernen Sie, UFW auf einem VPS sicher einzurichten: Standardmäßig alles sperren, benötigte Ports erlauben und SSH vor dem Aktivieren freigeben.
Was UFW ist und warum Sie es verwenden sollten
UFW steht für Uncomplicated Firewall. Der Name ist zutreffend. UFW ist eine benutzerfreundliche Oberfläche für die Firewall, die bereits im Linux-Kernel vorhanden ist. Statt rohe Regeln zu schreiben, geben Sie kurze Befehle wie ufw allow 22/tcp ein. Auf einem frisch eingerichteten VPS ist standardmäßig jeder Dienst, der auf einem Port lauscht, aus dem Internet erreichbar. Eine Firewall kehrt dieses Verhalten um: Sie verweigern zunächst alle Verbindungen und erlauben dann nur die wenigen Ports, die Sie tatsächlich verwenden. Diese eine Änderung reduziert Ihre Angriffsfläche mit etwa vier Befehlen erheblich. UFW ist das Standardwerkzeug für Ubuntu und Debian. Wenn Ihr VPS Rocky oder AlmaLinux verwendet, sollten Sie stattdessen firewalld verwenden, das Regeln in Zonen organisiert.
Bevor Sie UFW konfigurieren, müssen Sie wissen, welche Dienste auf Ports lauschen. Die Firewall entscheidet über die Erreichbarkeit dieser Dienste. Das Anzeigen lauschender Dienste mit ss -tlnp ist daher der richtige erste Schritt.
Die eine Regel, mit der Sie sich nicht aussperren
Dieser Fehler hält viele von Firewalls ab. Sie aktivieren UFW mit einer standardmäßigen Deny-Richtlinie, erlauben SSH aber nicht vorher. Sobald die Firewall aktiv wird, wird Ihre eigene Verbindung getrennt, und Sie können sich nicht erneut anmelden. Vermeiden Sie das, indem Sie SSH immer vor dem Aktivieren von UFW erlauben. Das ist der gesamte Trick. Die folgenden Schritte führen ihn in der sicheren Reihenfolge aus.
Falls es dennoch passiert, sind Sie nicht ausgesperrt: Die Webkonsole Ihres Providers über VNC oder eine serielle Verbindung läuft nicht über SSH. Sie können sich dort anmelden und ufw disable ausführen oder die fehlende Regel hinzufügen. Eine Aussperrung durch die Firewall zeigt sich außerdem an einem typischen Symptom: Bei einem verworfenen Paket wartet Ihr SSH-Client, bis die Verbindung wegen eines Timeouts abläuft. Ein gestoppter SSH-Daemon lehnt die Verbindung dagegen sofort ab. Das ist der Unterschied zwischen „Connection refused“ und „Connection timed out“.
Schritt 1: Standardrichtlinien festlegen
Weisen Sie UFW zunächst an, alle eingehenden Verbindungen abzulehnen und alle ausgehenden Verbindungen zuzulassen:
sudo ufw default deny incoming
sudo ufw default allow outgoingdeny incoming ist der wichtige Teil. Das bedeutet: Jeder Port ohne explizite Allow-Regel ist von außen geschlossen, selbst wenn dort ein Dienst lauscht. allow outgoing ermöglicht es Ihrem Server, für Updates und ähnliche Aufgaben normal auf das Internet zuzugreifen. Diese beiden Befehle ändern nur die Richtlinien. Sie werden erst wirksam, wenn Sie UFW in Schritt 3 aktivieren.
Schritt 2: Erlauben Sie nur die tatsächlich benötigten Ports
Öffnen Sie vor der Aktivierung SSH, damit Ihre Verbindung bestehen bleibt:
sudo ufw allow 22/tcpUFW kann SSH auch für Sie begrenzen: sudo ufw limit 22/tcp erlaubt den Port, blockiert jedoch jede Adresse, von der innerhalb von dreißig Sekunden sechs oder mehr Verbindungen hergestellt werden. Dadurch werden Brute-Force-Skripte ohne zusätzliche Software abgeschwächt.
Wenn Sie einen Webserver betreiben, erlauben Sie außerdem HTTP und HTTPS:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcpErlauben Sie nur Dienste, die Sie öffentlich bereitstellen. Für eine Datenbank wie Postgres auf Port 5432 sollte fast nie eine Allow-Regel eingerichtet werden. Binden Sie sie stattdessen an 127.0.0.1, damit sie nur auf dem Rechner erreichbar ist. Jeder geöffnete Port muss zusätzlich abgesichert werden. Halten Sie die Liste daher kurz.
Sie können hier auch die vollständige Folge der ufw-Befehle für Ihren Server erstellen und sie anschließend der Reihe nach ausführen:
Schritt 3: Aktivieren und den Status bestätigen
sudo ufw enableEs wird darauf hingewiesen, dass der Befehl bestehende SSH-Verbindungen unterbrechen kann. Da Sie in Schritt 2 22/tcp erlaubt haben, bleibt Ihre Sitzung bestehen. Bestätigen Sie das Ergebnis:
sudo ufw status verboseStatus: active
Default: deny (incoming), allow (outgoing)
To Action From
-- ------ ----
22/tcp ALLOW IN Anywhere
22/tcp (v6) ALLOW IN Anywhere (v6)
80/tcp ALLOW IN AnywhereAchten Sie hier auf zwei Punkte. Status: active bedeutet, dass die Firewall läuft. Jede Regel erscheint außerdem zweimal: einmal ohne Zusatz und einmal mit (v6). Daran erkennen Sie, dass UFW sowohl IPv6 als auch IPv4 abdeckt. Wenn die (v6)-Zeilen fehlen, wird Ihre IPv6-Seite nicht verwaltet. Das ist eine eigene Fehlerquelle, die im Beitrag zur IPv6-Firewall behandelt wird.
Regeln später verwalten
So zeigen Sie die Regeln mit Nummern an, um eine Regel zu entfernen:
sudo ufw status numbered
sudo ufw delete 3Um einen Port nur von einer Adresse aus zuzulassen, können Sie einen Administrationsdienst gezielt für Ihre eigene IP-Adresse erreichbar machen:
sudo ufw allow from 10.0.0.24 to any port 5432 proto tcpDieser Ansatz scheitert, sobald sich Ihre eigene Adresse ändert oder mehrere Rechner Zugriff benötigen. Die übliche Lösung besteht darin, den Port überhaupt nicht mehr öffentlich zu öffnen und stattdessen über ein privates Netzwerk auf den Dienst zuzugreifen. Genau dafür wird das private Subnetz des Servers in Ihrem Tailnet angekündigt.
Eine Firewall ist nur eine Schutzschicht. Sie steuert, welche Verbindungen einen Port erreichen können. Sie verlangsamt jedoch niemanden, der wiederholt auf einen geöffneten Port wie SSH zugreift. Ergänzen Sie dafür Fail2ban vor SSH, um wiederholte Angreifer zu sperren. Defense in Depth bedeutet, dass jede Schicht das abdeckt, was die anderen Schichten nicht abdecken können.
Eine Firewall ist erst sinnvoll, wenn Sie wissen, was Ports sind und wie Dienste auf ihnen lauschen und wie Sie sie konfigurieren. Die Konfiguration ist ein Schritt in den ersten 10 Minuten auf einem neuen VPS.
FAQ
Trennt die Aktivierung von UFW meine SSH-Sitzung?
Nein, wenn Sie SSH zuerst erlauben. Führen Sie sudo ufw allow 22/tcp vor sudo ufw enable aus. Ihre Verbindung bleibt bestehen, weil die Firewall Port 22 jetzt zulässt. Gefährlich ist die Aktivierung einer Firewall mit standardmäßiger Ablehnung ohne eine SSH-Erlaubnisregel. Dadurch werden Sie ausgesperrt. Melden Sie sich in diesem Fall über die VNC- oder serielle Konsole Ihres Providers an und führen Sie ufw disable aus.
Welche Ports sollte ich auf einem VPS öffnen?
Nur Ports, über die Sie Dienste öffentlich bereitstellen. SSH (22/tcp), damit Sie den Server verwalten können, sowie HTTP und HTTPS (80/tcp, 443/tcp), wenn Sie eine Website betreiben. Alle anderen Ports sollten abgelehnt bleiben. Interne Dienste wie Datenbanken sollten an 127.0.0.1 gebunden sein und überhaupt keine Firewall-Regel erhalten. Dadurch sind sie aus dem Netzwerk nicht erreichbar.
Unterstützt UFW IPv6?
Auf modernen Ubuntu-Systemen ja: IPV6=yes ist in /etc/default/ufw gesetzt. Daher gilt jede Regel für beide Protokollstapel, und ufw status zeigt die IPv6-Regeln mit dem Suffix (v6) an. Die Fälle, in denen dies trotzdem fehlschlagen kann, werden im Abschnitt Die IPv6-Firewall-Falle behandelt.
Wie entferne ich eine UFW-Regel?
Führen Sie sudo ufw status numbered aus, um die Regeln mit Indexnummern aufzulisten. Führen Sie anschließend sudo ufw delete N aus, wobei N für die Nummer der zu entfernenden Regel steht. Sie können eine Regel auch anhand ihrer Spezifikation löschen, zum Beispiel mit sudo ufw delete allow 80/tcp.
Wie erlaube ich einen Port nur für eine IP-Adresse?
Verwenden Sie eine from-Regel statt einer einfachen allow-Regel. Damit nur Ihre Büro-IP-Adresse PostgreSQL erreichen kann, führen Sie sudo ufw allow from 10.0.0.10 to any port 5432 proto tcp aus. Bei einer Richtlinie mit standardmäßiger Ablehnung ist der Port für alle geschlossen, bis eine Regel den Zugriff erlaubt. Diese from-Regel ist daher der einzige Zugangsweg: Das gesamte Internet bleibt blockiert, und nur die angegebene Adresse erhält Zugriff. Fügen Sie keine einfache allow 5432/tcp hinzu. Dadurch würde der Port für alle geöffnet. Dies ist die sicherste Methode, eine Datenbank oder ein Administrationspanel bereitzustellen. Überprüfen Sie die Regel mit sudo ufw status verbose. Der Befehl zeigt die Quelladresse neben dem Port an.