Wie man eine Firewall mit UFW auf einem Ubuntu 22.04 Server konfiguriert

Auf einem Ubuntu 22.04 Server können Sie den eingehenden und ausgehenden Netzwerkverkehr mit UFW (Uncomplicated Firewall) verwalten. Für Remote-Server stellen Sie sicher, dass der SSH-Port, den Sie derzeit verwenden, erlaubt ist, bevor Sie die Firewall aktivieren, und bestätigen Sie, dass Sie den Zugriff über ein anderes Terminal oder eine Konsole wiederherstellen können.

Dinge, die vor dem Start überprüft werden sollten

UFW ist ein Werkzeug zur Verwaltung von Linux-Firewalls. Selbst wenn ein Port in der Firewall erlaubt ist, kann eine Verbindung nur hergestellt werden, wenn der Dienst installiert, ausgeführt und auf der korrekten Adresse und dem richtigen Port lauscht. Wenn es Cloud-Sicherheitsgruppen oder externe Firewalls gibt, überprüfen Sie auch deren Regeln separat.

Ändern Sie bestehende Richtlinien auf einem laufenden Server nicht willkürlich. Überprüfen Sie zuerst den aktuellen Firewall-Status, die registrierten Regeln, die erforderlichen Dienste und die Zugangsports und bereiten Sie eine Zugangsmethode vor, die auch genutzt werden kann, falls SSH getrennt wird, wie z. B. über eine Cloud-Konsole oder Server-Management-Konsole. Befehle erfordern Administratorrechte.

sudo ufw status verbose
sudo ufw show added
sudo ss -lntup

status verbose zeigt die aktiven UFW-Richtlinien und -Regeln an. Wenn UFW inaktiv ist, können Sie nicht alle registrierten Regeln nur mit diesem Bildschirm überprüfen, schauen Sie daher auch auf show added. ss hilft, lauschende Sockets zu identifizieren, stellt jedoch nicht fest, ob ein Dienst von außen erreichbar ist.

Nach der Freigabe von SSH aktivieren

Das Folgende ist ein Beispiel für einen neuen Server, der SSH auf dem Standard-TCP-Port 22 ausführt. Wenn der Port anders ist, ändern Sie ihn auf den tatsächlichen Port. Diese Regel erlaubt diesen Port, ohne ihn auf eine bestimmte IP zu beschränken, daher sollte man bedenken, dass der Zugriffsbereich weit ist. Bei bereits aktiven Servern überprüfen Sie zuerst die vorhandenen Regeln und Prioritäten.

sudo ufw allow 22/tcp

Überprüfen Sie andere erforderliche Serviceregeln und die Standardrichtlinie, und schalten Sie dann die Firewall ein. Wenn Sie UFW einschalten, können bestehende SSH-Verbindungen unterbrochen werden, da die Regeln erneut angewendet werden. Testen Sie eine neue SSH-Verbindung von einem separaten Terminal aus, während Sie die aktuelle Sitzung beibehalten, und falls sie fehlschlägt, greifen Sie mit der vorbereiteten Konsole zu, um die Regeln zu ändern.

sudo ufw enable
sudo ufw status verbose

Überprüfen Sie, dass der Status active ist und dass die beabsichtigte SSH-Regel angezeigt wird. Testen Sie dann Verbindungen sowohl von erlaubten als auch von nicht erlaubten Netzwerken für die tatsächlich erforderlichen Dienste. Dieses Verfahren und Ausnahmen können auch im Abschnitt Remote-Management der Ubuntu 22.04 UFW-Dokumentation überprüft werden.

Grundrichtlinien und Portregeln

Die Standardeinstellungen eines neu installierten UFW blockieren in der Regel eingehende Verbindungen und erlauben ausgehende Verbindungen, dies kann jedoch je nach Server variieren. Überprüfen Sie die tatsächlichen Richtlinien mit status verbose. Zum Beispiel können Sie, um auf einem neuen Server, auf dem alle erforderlichen Dienste überprüft wurden, standardmäßig eingehende Verbindungen zu blockieren, den folgenden Befehl verwenden. Auf einem bereits in Betrieb befindlichen Server sollten Sie zunächst überprüfen, wie sich Richtlinienänderungen auf bestehende Dienste und Verbindungen auswirken.

sudo ufw default deny incoming

Wenn Sie einen Webserver extern bereitstellen müssen, erlauben Sie die Ports und Protokolle, die tatsächlich verwendet werden. Die folgenden Beispiele sind TCP-Ports für HTTP und HTTPS, und es ist nicht erforderlich, sie universell auf Server anzuwenden, die keine Webdienste ausführen.

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

Wenn der Server DNS-Dienste bereitstellt, können Sie UDP und TCP auf Port 53 nach Bedarf zulassen. Öffnen Sie keine Ports auf Servern, die keine DNS-Dienste bereitstellen, nur weil es ein Beispiel ist.

sudo ufw allow 53/udp
sudo ufw allow 53/tcp

allow fügt Erlaubnisregeln hinzu, und deny fügt Ablehnungsregeln hinzu. Portregeln ohne angegebenes Protokoll können sowohl für TCP als auch für UDP gelten, daher ist es klarer, das erforderliche Protokoll anzugeben. Die Reihenfolge der Regeln ist wichtig, und die erste passende Regel kann angewendet werden, sodass das Hinzufügen einer Ablehnungsregel, wenn bereits Erlaubnisregeln existieren, den Zugriff nicht unbedingt blockiert.

Erlauben Sie den Zugriff nur von bestimmten IPs

Das Folgende ist ein Beispiel dafür, dass Verbindungen nur zu TCP-Port 22 von einer einzelnen IPv4-Adresse erlaubt sind. 192.0.2.10 ist eine Platzhalteradresse zu Erklärungszwecken, also ersetzen Sie sie durch die tatsächliche Admin-Zugriffs-IP, und wenn die IP geändert werden kann, bereiten Sie zuerst eine Wiederherstellungsmethode vor.

sudo ufw allow from 192.0.2.10 to any port 22 proto tcp

Selbst wenn Sie diese Regel hinzufügen, kann der Zugriff möglicherweise nicht eingeschränkt werden, wenn eine Regel vorhanden ist, die Port 22 von allen Adressen erlaubt. Überprüfen Sie die bestehenden Regeln und deren Reihenfolge mithilfe der nummerierten Liste und behalten Sie nur die Regeln, die tatsächlich notwendig sind. Wenn der Server IPv6 aktiviert hat, gehen Sie nicht davon aus, dass eine nur für IPv4 geltende Regel den IPv6-Zugriff einschränkt; prüfen Sie auch die IPv6-Richtlinien und -Regeln.

sudo ufw status numbered

Regeln löschen und die Firewall deaktivieren

Um eine Regel, die Sie mit dem genauen Inhalt hinzugefügt haben, zu löschen, verwenden Sie delete im ursprünglichen Befehl. Zum Beispiel löscht der unten stehende Befehl eine Regel, die UDP-Port 53 erlaubt, während TCP-Regeln separat sind.

sudo ufw delete allow 53/udp

Sie können auch nach Nummer löschen, aber wenn Sie eine Regel löschen, ändern sich die Nummern. Überprüfen Sie immer erneut die aktuelle Nummer und den Inhalt mit sudo ufw status numbered. Die auf Nummern basierende Löschung löscht nur eine angezeigte IPv4- oder IPv6-Regel, überprüfen Sie daher auch die entsprechende Regel für die andere IP-Version. Nach der Löschung den Status erneut prüfen und die tatsächliche Verbindung testen.

Um die Firewall auszuschalten, verwenden Sie den folgenden Befehl. Wenn sie deaktiviert ist, wird der von UFW bereitgestellte Schutz entfernt. Gehen Sie also nicht davon aus, dass es sicher ist, nur weil eine andere Firewall existiert; überprüfen Sie zuerst den Umfang der Auswirkungen.

sudo ufw disable

Wenn eine Regel nicht wie erwartet funktioniert

Überprüfen Sie, ob der Dienst läuft, ob der richtige Port und das richtige Protokoll erlaubt sind, die Reihenfolge der Regeln und die Standardrichtlinien. Überprüfen Sie auch die Regeln der Cloud-Firewall, des Routers und des übergeordneten Netzwerks sowie die verwendeten IPv4- oder IPv6-Adressen für die Verbindung. Aufgrund von Containern oder separat verwalteten Netzwerkrichtlinien kann es schwierig sein, das Gesamtverhalten nur anhand der UFW-Statusliste zu beurteilen.

Bevor Sie eine Regel tatsächlich ändern, können Sie die Änderungen mit --dry-runvorschauen. Zum Beispiel zeigt der folgende Befehl die Änderungen an einer TCP-80-Erlaubnisregel, ohne sie anzuwenden.

sudo ufw --dry-run allow 80/tcp

Der UFW-Statusbildschirm zeigt in erster Linie Regeln an, die durch UFW-Befehle verwaltet werden, und stellt nicht alle Firewall-Einstellungen auf dem System dar. Für zusätzliche Erklärungen und Befehlsformate siehe Ubuntu Server Firewall-Dokumentation.