Wer unter Linux eine Firewall einrichten möchte, muss sich nicht mit dem gewöhnungsbedürftigen Iptables herumschlagen. Dank Canonicals Uncomplicated Firewall gelingt das Einrichten einer Brandmauer im Handumdrehen – zumindest bis zu einem gewissen Grad.
Die im Linux-Kernel enthaltene Netfilter-Firewall lässt sich umfassend mit dem Werkzeug Iptables steuern. Dessen komplexe Bedienung treibt nicht nur so manchen Benutzer in den Wahnsinn, sondern erhöht auch die Gefahr, durch falsche Regeln oder Tippfehler unbeabsichtigt Löcher in die Brandmauer 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, 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 status«zu prüfen, ob die Firewall läuft. Sofern dabei die Meldung »Status: inaktiv« auftaucht, starten Sie die Brandmauer mit »sudo ufw enable«. Dieser Befehl sorgt gleichzeitig dafür, dass Ufw automatisch beim Systemstart hochfährt. Bei Bedarf deaktivieren Sie die Firewall jederzeit wieder mit »sudo ufw disable«.
Standardmäßig blockiert die Firewall 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 dieses 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 die 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. »sudo ufw allow http« gewährt 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 »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 (Abbildung 2). 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.

Abbildung 2: Hier sind nur CUPS und ein SSH-Server installiert, wodurch Ufw auch nur Application Profiles für die beiden Dienste vorhält.
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. 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.
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 der 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
Gezielter Einlass
Der Zugriff via SSH sollte nur von ausgewählten 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 einen Angreifer 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 etwa überwacht die Firewall 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.
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 die Ä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 erschöpft. 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 »/etc/ufw/after.rules«. Die dortigen Regeln wendet die Firewall vor beziehungsweise nach den über das Kommandozeilenprogramm »ufw« festgelegten Regeln an.
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 Kommando »show listening« von Ufw. Ein Klick auf das Plus-Symbol erstellt zudem automatisch eine passende Firewall-Regel.
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 sich 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).
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. Wer dennoch an Grenzen stößt, kann mit Iptables weitere Regeln ergänzen. Dabei erweist sich allerdings die abweichende Syntax beider Tools als hinderlich. Unterm Strich erleichtert Ufw jedoch das Einrichten einer Firewall enorm. ((uba)/(jlu))
Infos
- Ufw: https://launchpad.net/ufw
- Quellcode: https://github.com/costales/gufw
- Gufw: http://gufw.org








