Ufw erleichtert das Einrichten einer Firewall

Aus LinuxUser 06/2021

Ufw erleichtert das Einrichten einer Firewall

© Pedro Campos / 123RF.com

Simpler Brandschutz

Um unter Linux eine Firewall einzurichten, müssen Sie sich nicht mit dem gewöhnungsbedürftigen Iptables herumschlagen. Mit Canonicals Ufw gelingt das Einrichten einer Brandmauer im Handumdrehen – zumindest bis zu einem gewissen Grad.

Die im Linux-Kernel enthaltene Netfilter-Firewall lässt sich mit dem Werkzeug Iptables umfassend steuern. Dessen komplexe Bedienung treibt jedoch nicht nur so manchen Benutzer in den Wahnsinn, sondern erhöht auch die Gefahr, durch falsche Regeln oder Tippfehler unbeabsichtigt Löcher in den Systemschutz zu reißen.

Abhilfe schafft Canonical mit der Uncomplicated Firewall oder kurz Ufw [1]. Das Kommandozeilenprogramm nimmt übersichtlich aufgebaute Regeln entgegen, die es im Hintergrund in passende Iptables-Aufrufe übersetzt. Diese Arbeitsweise hat gleichzeitig den Vorteil, dass Sie bei Bedarf mit Iptables weitere komplexe Regeln ergänzen können.

Schlangenöl

Bereits seit Ubuntu 8.04 gehört Ufw zum Lieferumfang der Distribution und lässt sich im Zweifelsfall über das Paket ufw hinzuholen. Ursprünglich von Canonical für Ubuntu entwickelt, findet sich das Werkzeug mittlerweile auch in anderen Distributionen wieder.

Sofern die von Ihnen verwendete Distribution Ufw nicht in den Repositories bereithält, greifen Sie zum Quellcode [2]. Zur Inbetriebnahme benötigt Ufw Python ab Version 3.4, Iptables 1.4 oder neuer sowie Gettext und Make. Nach dem Entpacken des Quellcodearchivs genügt für die systemweite Installation der Aufruf python3 ./setup.py install mit Root-Rechten. Damit die Firewall schon beim Booten hochfährt, integrieren Sie noch den Befehl /lib/ufw/ufw-init start in die jeweiligen Startskripte. Eine Beispiel-Unit für Systemd findet sich im Quellcodearchiv unter doc/systemd.example.

Möchten Sie auch den IPv6-Verkehr reglementieren, öffnen Sie die Konfigurationsdatei unter /etc/default/ufw und stellen sicher, dass sie die Zeile IPV6=yes enthält. Im Folgenden kommen in allen Beispielen IPv4-Adressen zum Einsatz, die Befehle funktionieren aber auch mit IPv6.

Blockadehaltung

In jedem Fall gilt es, mit sudo ufw statuszu prüfen, ob die Firewall läuft. Sofern dabei die Meldung Status: inaktiv auftaucht, starten Sie Ufw mit sudo ufw enable. Der Befehl sorgt gleichzeitig dafür, dass die Firewall automatisch beim Systemstart hochfährt. Bei Bedarf deaktivieren Sie sie jederzeit wieder mit sudo ufw disable.

Standardmäßig blockiert Ufw alle eingehenden Anfragen und lässt sämtliche vom Rechner ausgehenden Nachrichten passieren. Damit können insbesondere Angreifer keinen Dienst auf dem entsprechenden System erreichen. Gleichzeitig bildet das Verhalten ein Sicherheitsnetz: Sofern keine andere Regel anderes besagt, wendet Ufw die Standardregeln an. Definieren Sie beispielsweise keine Regel für den SSH-Zugang, blockt Ufw aufgrund der Standardregeln automatisch den Zugriff von außen.

Das Standardverhalten ändern Sie mit den zwei Befehlen aus Listing 1. Der erste kümmert sich um alle eingehenden (incoming) Verbindungen, der zweite um alle ausgehenden (outgoing). deny verbietet den Zugriff, allow erlaubt ihn. Die beiden Befehle stellen folglich das Standardverhalten sicher. Wenn Sie allow gegen deny austauschen, würde Ufw hingegen von Haus aus sämtlichen Netzwerkverkehr unterbinden.

Listing 1

Verbindungen

$ sudo ufw default deny incoming
$ sudo ufw default allow outgoing

Wie alle anderen Befehle sind die beiden Kommandos sprechend aufgebaut: Auch ohne Kenntnisse über die einzelnen Parameter lässt sich direkt ablesen, welche Auswirkungen der Befehl hat. Ufw verwendet dabei eine eigene Syntax, die sich an jene der Pf-Firewall aus OpenBSD anlehnt. Wer zuvor mit anderen Werkzeugen gearbeitet hat, muss folglich umlernen.

Regulatoren

Als Nächstes können Sie gezielt Löcher in die Firewall bohren. Dazu geben Sie hinter sudo ufw allow den entsprechenden Dienst an (Abbildung 1). Der Aufruf sudo ufw allow ssh lässt beispielsweise SSH-Verbindungen von außen zu. Analog verfahren Sie mit allen weiteren Diensten. So gewährt sudo ufw allow http etwa den Zugriff auf einen HTTP-Browser über den Port 80. Alle möglichen Namen und Dienste verrät ein Blick in die Datei /etc/services.

Abbildung 1: Ein <code>ufw allow</code> f&uuml;gt automatisch Regeln f&uuml;r IPv4- und IPv6-Verbindungen hinzu, wie das nachfolgende <code>ufw status</code> beweist.

Abbildung 1: Ein ufw allow fügt automatisch Regeln für IPv4- und IPv6-Verbindungen hinzu, wie das nachfolgende ufw status beweist.

Darüber hinaus versteht Ufw auch die Namen einiger Anwendungen. Ein sudo ufw allow 'CUPS' richtet zum Beispiel maßgeschneiderte Regeln für das Drucksystem CUPS ein. Welche Anwendungsnamen sich aktuell auf einem System verwenden lassen, verrät das Kommando sudo ufw app list. Unter Ubuntu hängt das Angebot maßgeblich von den installierten Diensten ab. Fehlt beispielsweise auf Ihrem System der Webserver Nginx, kennt ihn auch Ufw nicht.

Sofern ein Anwendungsname Leerzeichen enthält, wie etwa Nginx Full, müssen Sie ihn beim Aufruf von Ufw wie im CUPS-Beispiel in Anführungszeichen setzen. Andernfalls interpretiert die Shell die Wörter des Namens als einzelne Parameter. Sie sollten sich daher am besten angewöhnen, die Anwendungsnamen grundsätzlich in Hochkommas einzufassen.

Die Regeln für eine Anwendung legt ein sogenanntes Application Profile fest (Abbildung 2). Alle existierenden Profile sammelt das Verzeichnis /etc/ufw/applications.d/. Die dortigen Dateien lassen sich als Grundlage für eigene Application Profiles verwenden, ihr Aufbau ist selbsterklärend.

Abbildung 2: Hier sind nur CUPS und ein SSH-Server installiert, wodurch Ufw auch nur Application Profiles f&uuml;r die beiden Dienste vorh&auml;lt.

Abbildung 2: Hier sind nur CUPS und ein SSH-Server installiert, wodurch Ufw auch nur Application Profiles für die beiden Dienste vorhält.

Beim Anlegen einer Firewall-Regel dürfen Sie auch direkt den betroffenen Port angeben, für SSH etwa sudo ufw allow 22. Ufw richtet dann automatisch passende Regeln für die Protokolle TCP und UDP ein. Um nur ein bestimmtes Protokoll zu erlauben, hängen Sie es mit einem Schrägstrich an die Port-Nummer an (22/tcp). Des Weiteren lassen sich komplette Port-Bereiche hinterlegen. So öffnet das Kommando sudo ufw allow 8080:8082/tcp die Ports 8080, 8081 und 8082 für eingehende TCP-Verbindungen.

Feintuning

Sämtliche Regeln speichert Ufw ab und aktiviert sie nach einem Systemneustart automatisch. Die Regeln für IPv4 landen dabei in der Datei /etc/ufw/user.rules, die IPv6-Pendants hingegen in /etc/ufw/user6.rules. Nach dem Anlegen neuer Regeln sollten Sie diese Dateien sicherheitshalber per sudo ufw reload neu einlesen.

Den Standardregeln zufolge erlaubt Ufw sämtliche ausgehenden Verbindungen. Um gezielt einem Dienst den Zugriff auf das Netzwerk zu entziehen, verwenden Sie anstelle von allow ein deny. Zusätzlich gilt es, mit einem nachgestellten out darauf hinzuweisen, dass die Regel für ausgehende Verbindungen gilt. So untersagt sudo ufw deny out ssh ausgehenden Verkehr auf Port 22.

Nach diesem Befehl kann das System keinen anderen Rechner mehr per SSH kontaktieren. Regeln für eingehende Verbindungen kennzeichnet eigentlich analog ein in. In allen vorherigen Beispielen fehlt dieser Hinweis jedoch. Ufw geht dann automatisch davon aus, dass die Regel für eingehende Verbindungen gilt.

Neben allow und deny gibt es noch reject, mit dem die Firewall Zugriffsversuche nicht einfach nur ignoriert, sondern den Absender auf die Blockade hinweist. Via comment dürfen Sie zudem allen Regeln eine Notiz anheften (Listing 2, erste Zeile). Jede Regel gilt immer für alle Netzwerkschnittstellen. Um eine Regel auf eine Schnittstelle zu beschränken, geben Sie deren Bezeichnung hinter in beziehungsweise out an (zweite Zeile).

Listing 2

Notizen und Interfaces

$ sudo ufw reject out ssh comment 'no ssh access allowed'
$ sudo ufw allow in on enp0s3 ssh

Türsteher

Der Zugriff via SSH sollte nur von definierten Rechnern aus gestattet sein. Dazu verbieten Sie zunächst den Zugriff wieder per sudo ufw deny ssh. Da dies gleichzeitig die Standardeinstellung ist, lässt sich alternativ auch die Regel sudo ufw delete allow ssh entfernen. Dieser Befehl löscht (delete) die Regel allow ssh.

Falls Sie die Regeln nicht mehr im Kopf haben, rufen Sie sudo ufw status verbose auf. Zudem erhält jede Regel intern eine fortlaufende Nummer, die sudo ufw status numbered anzeigt. Über diese Nummern lassen sich gezielt Regeln löschen. So entfernt das Kommando sudo ufw delete 2 die Regel mit der Nummer 2.

Nachdem der Zugriff via SSH generell blockiert ist, erlaubt der Befehl aus Listing 3 ihn ausschließlich dem Rechner mit der IP-Adresse 192.168.1.101. Lassen Sie to any port 22 weg, darf die IP-Adresse auf alle Dienste zugreifen. Analog können Sie mit deny gezielt Anfragen von einer IP-Adresse blockieren.

Listing 3

Blockade aufheben

$ sudo ufw allow from 192.168.1.101 to any port 22

Zahlreiche Anfragen binnen kurzer Zeit deuten auf eine Attacke hin und können zudem den betroffenen Dienst überlasten. Auf Wunsch erkennt Ufw solche Zugriffe und blockiert sie dann gezielt. Derzeit funktioniert diese nützliche Funktion allerdings nur mit IPv4-Verbindungen. Auf das Kommando sudo ufw limit ssh hin überwacht die Firewall beispielsweise den SSH-Dienst und sperrt den Zugriff bei vielen Anfragen in kurzer Zeit.

Laberbacke

Haben Sie sich irgendwann in zu vielen Regeln verheddert, wirft der Befehl sudo ufw reset sie allesamt über Bord. Beim Anlegen neuer Regeln helfen wiederum verschiedene Reports. sudo ufw show listening liefert zunächst alle Dienste, die derzeit an irgendeinem Port lauschen. So spüren Sie Anwendungen auf, die Sie gar nicht auf dem Schirm hatten oder die eigentlich gar nicht laufen sollten (Abbildung 3).

Abbildung 3: Hier lauschen neben CUPS auch der Avahi-Daemon und der NetworkManager an den Netzwerkschnittstellen.

Abbildung 3: Hier lauschen neben CUPS auch der Avahi-Daemon und der NetworkManager an den Netzwerkschnittstellen.

Falls Sie sich mit Iptables auskennen, können Sie mit sudo ufw show raw einen tiefen Blick in die derzeitige Konfiguration der Firewall werfen. Detaillierte Informationen über seine Arbeit legt Ufw in einem Protokoll ab, das Sie mit sudo ufw logging on aktivieren und anschließend unter /var/log/ufw.log nachlesen.

Umleitungen

Seit der Version 0.34 erlaubt Ufw auch Routing. Die Firewall kann also eingehende Pakete durchwinken und so beispielsweise alle an der Netzwerkschnittstelle enp0s3 eingehenden Anfragen an das Interface enp0s8 weiterschieben (Listing 4).

Listing 4

Anfragen weiterleiten

$ sudo ufw route allow in on enp0s3 out on enp0s8

Damit dieses IP-Forwarding funktioniert, muss die entsprechende Funktion in der Konfigurationsdatei sysctl.conf aktiviert sein. Unter Ubuntu nutzen Sie dazu die Datei /etc/ufw/sysctl.conf, in die Sie die Zeilen aus Listing 5 eintragen oder sie, falls sie bereits existieren, durch Entfernen einer vorangestellten Raute (#) aktivieren. Sofern Sie Änderungen vornehmen mussten, starten Sie Ufw per sudo ufw disable und sudo ufw enable neu.

Listing 5

Forwarding aktivieren

net/ipv4/ip_forward=1
net/ipv6/conf/default/forwarding=1
net/ipv6/conf/all/forwarding=1

Damit ist der Funktionsumfang von Ufw weitestgehend ausgereizt. Insbesondere kennt das Werkzeug noch kein sogenanntes Masquerading, bei dem die Firewall unter anderem die Quell- und Ziel-Ports in den durchlaufenden Paketen ändert. Solche Regeln lassen sich jedoch mit Iptables ergänzen. Die entsprechende Konfiguration verstauen Sie dabei entweder in der Datei /etc/ufw/before.rules oder in /etc/ufw/after.rules. Die dortigen Regeln wendet die Firewall vor beziehungsweise nach den Regeln an, die Sie über das Kommandozeilenprogramm ufw festgelegt haben.

Zusammengeklickt

Noch einfacher lässt sich die Firewall mit Gufw [3] konfigurieren, der grafischen Benutzeroberfläche für Ufw. Da sie allerdings nicht offiziell zum Ufw-Projekt gehört, müssen Sie sie in der Regel nachinstallieren. Unter Ubuntu gelingt das etwa per sudo apt install gufw.

Nach dem Start von Gufw knipsen Sie neben Status die Firewall an. Dann legen Sie unter Eingehend und Ausgehend die jeweiligen Standardregeln fest. Äußerst praktisch ist der Bericht: Das gleichnamige Register (Abbildung 4) zeigt die laufenden Dienste etwas übersichtlicher an als das entsprechende Ufw-Kommando show listening. Ein Klick auf das Plus-Symbol erstellt zudem automatisch eine passende Firewall-Regel.

Abbildung 4: Der <span class="ui-element">Bericht</span> der Benutzeroberfl&auml;che Gufw zeigt die auf dem System laufenden Dienste.

Abbildung 4: Der Bericht der Benutzeroberfläche Gufw zeigt die auf dem System laufenden Dienste.

Alle existierenden Regeln finden sich auf dem gleichnamigen Register. Über das Zahnrad-Symbol bearbeiten Sie das gerade ausgewählte Exemplar, über das Plus-Symbol fügen Sie eine weitere Regel hinzu. Unter Vorkonfiguriert wählen Sie ein Application Profile, wobei Gufw die Anwendungen in Kategorien sortiert. CUPS finden Sie etwa unter Netzwerk in der Unterkategorie Drucken. Möchten Sie die Anwendungsprofile nicht nutzen, wechseln Sie zum Register Einfach. Noch feinere Einstellungen erlaubt der Reiter Erweitert (Abbildung 5).

Abbildung 5: Diese Regel blockiert den Zugriff auf den Port&nbsp;22 via TCP.

Abbildung 5: Diese Regel blockiert den Zugriff auf den Port 22 via TCP.

Fazit

Mit dem vergleichsweise simplen Ufw lässt sich eine Firewall deutlich schneller konfigurieren als mit dem komplexen Iptables. Die einfach aufgebauten Ufw-Regeln reduzieren zudem Fehlkonfigurationen und vereinfachen die Wartung. Dennoch bringt Ufw alle wichtigen Funktionen mit, um gängige Dienste abzusichern. Stoßen Sie dennoch an Grenzen, ergänzen Sie mit Iptables weitere Regeln. Dabei erweist sich allerdings die unterschiedliche Syntax der beiden Werkzeuge als hinderlich. Unterm Strich erleichtert Ufw jedoch das Einrichten einer Firewall enorm. ((jlu))

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDF
LinuxUser 06/2021 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

0 Kommentare
Älteste
Neuste Beste Bewertung
Nach oben