ufw
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Ubuntu 20.04 Focal Fossa
Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
ufw 🇬🇧 steht für uncomplicated firewall. Ziel von ufw ist es, ein unkompliziertes kommandozeilen-basiertes Frontend für das sehr leistungsfähige, aber nicht gerade einfach zu konfigurierende iptables zu bieten. ufw unterstützt sowohl IPv4 als auch IPv6.
Gufw 🇬🇧 ist eine grafische Oberfläche für ufw, aber kein offizieller Bestandteil von ufw.
Hinweis:
An dieser Stelle sei darauf hingewiesen, dass eine "normale" Desktop-Installation von Ubuntu keine Firewall benötigt. Mehr Informationen findet man in den Artikeln Personal Firewalls und Sicherheits 1x1.
Installation¶
ufw ist in der Standardinstallation enthalten, kann ansonsten aber auch über die folgenden Pakete installiert werden [1]:
ufw
gufw (universe, optionale grafische Oberfläche)
Befehl zum Installieren der Pakete:
sudo apt-get install ufw gufw
Oder mit apturl installieren, Link: apt://ufw,gufw
Benutzung¶
Wie bereits oben erwähnt ist ufw ein Programm für die Kommandozeile, d.h. alle Aufrufe etc. erfolgen im Terminal [2]. Des Weiteren sind für alle Befehle Root-Rechte erforderlich.
Status, Start, Stop¶
Als erstes sollte man prüfen, ob das Programm aktiv ist. In der Regel ist ufw deaktiviert, da dies im Zuge der Standardinstallation so vorgegeben wird. Den Status überprüft man mit
sudo ufw status
Firewall not loaded
In diesem Falle ist der Dienst nicht aktiv. Aktiviert werden kann die Firewall mittels:
sudo ufw enable
Firewall started and enabled on system startup
So wird ufw auch als Dienst eingerichtet, d.h. beim Neustart des Rechners wird diese direkt aktiviert. Um ufw wieder abzuschalten, dient der Befehl:
sudo ufw disable
Firewall stopped and disabled on system startup
was auch den automatischen Start des Programms deaktivert.
Firewall-Regeln¶
Das Aktivieren der Firewall ohne die Definition von Regeln führt bereits dazu, dass alle eingehenden Verbindungen verboten sind und alle abgehenden Verbindungen erlaubt sind!
Hinweis:
Bevor man anfängt, Regeln zu definieren, sollte man sich bewusst sein, dass in der Standard-Einstellung von ufw alle nicht explizit erlaubten Verbindungen verboten sind. Wenn man den fraglichen Rechner nicht physisch vor sich hat, sondern z.B. nur per SSH verbunden ist, kann dies dazu führen, dass man sich selber aussperrt. Deshalb sollte man in diesem Fall unbedingt zuerst die Regeln anpassen (siehe weiter unten) oder die gewünschten Verbindungen explizit erlauben und erst danach die Firewall aktivieren.
Bei den Regeln ist immer zu bedenken, dass unter Linux (bzw. Unix allgemein) die Netzwerkschnittstelle auch zu Rechner-internen Kommunikation genutzt wird. Eine falsche Konfiguration kann also auch dazu führen, dass z.B. der XServer nicht mehr ansprechbar ist! [3]
ufw verwendet ein dreistufiges Regelwerk, welches in drei Konfigurationsdateien hinterlegt ist. Diese werden in der folgenden Reihenfolge gelesen und ausgewertet:
/etc/ufw/before.rules
/var/lib/ufw/user.rules (oder /lib/ufw/user.rules - in welche auch die in der Kommandozeile definierten Regeln persistiert werden)
/etc/ufw/after.rules
Das heißt also, dass Regeln in user.rules ggf. die in before.rules überschreiben und Regeln in after.rules die von user.rules
In den Original-Regeldateien sind nur einige grundlegenden Regeln hinterlegt, die den problemlosen internen Netzwerkverkehr regeln. Das Hinzufügen von Regeln mittels ufw ist recht einfach. Die einfachste allgemeine Syntax ist:
sudo ufw allow|deny|reject SERVICE
wobei mit allow
der SERVICE
erlaubt wird. Mit deny
würde der Netzwerkverkehr für SERVICE
geblockt. Der Unterschied von reject
gegenüber deny
ist, dass mit reject
der Absender des Netzwerkpakets eine Nachricht erhält, dass es abgelehnt wurde. SERVICE kann dabei z.B. eines der in der Datei /etc/services genannten Protokolle sein, wie z.B. POP3, HTTP oder auch - falls installiert - SSH.
Der folgenden Befehl würde z.B. SSH für die Firewall freischalten:
sudo ufw allow ssh
Mit dieser (einfachen) Regel wird pauschal das komplette Protokoll freigegeben bzw. gesperrt. Natürlich beherrscht ufw auch detailliertere Regeln, die allgemeine Syntax lautet:
sudo ufw allow|deny [proto <protokoll>] [from <adresse> [port <port>]] [to <addresse> [port <port>]] [comment <kommentar>]
wobei die folgenden Parameter gesetzt werden können:
ufw Parameter | |
Parameter | Erklärung |
proto PROTOKOLL | PROTOKOLL definiert das Protokoll, also TCP oder UDP |
from ADRESSE | Definiert die Absenderadresse, auf die die Regel zutrifft, <adresse> ist dabei die (IP-)Adresse. |
to ADRESSE | Definiert die Zieladresse, auf die die Regel angewendet wird, <adresse> ist dabei die (IP-)Adresse. |
port PORT | Definiert den Port, auf die die Regel (für Ausgangs- / Zieladresse) angewendet wird. |
comment KOMMETAR | Fügt den Kommentar an die Regel an, der bei ufw status angezeigt wird. |
Grundsätzlich kann für PROTOKOLL
, ADRESSE
und PORT
auch immer any
als Wert gesetzt werden. Dann trifft die Regel für den entsprechenden Parameter auf alle möglichen Fälle zu. Eine Regel mit ufw kann z.B. so aussehen:
sudo ufw allow proto tcp from any to 123.456.78.90 port 22
Dies erlaubt das TCP-Protokoll von jedem Port eines beliebigen Systems zum Rechner mit der IP-Adresse 123.456.78.90
und dem dortigen Port 22
. Wichtig zum Verständnis: verbirgt sich hinter 123.456.78.90
der eigene Rechner (damit ist der Rechner gemeint, auf dem gerade ufw konfiguriert wird), so hat man gerade Port 22
für eingehende Verbindungen von einem beliebigem Rechner aus geöffnet. Hat der eigene Rechner hingegen nicht die IP 123.456.78.90
, gilt folgendes Regelwerk: der eigene Rechner kann Pakete, die über den Port 22
herausgeschickt werden, nur an 123.456.78.90
schicken; es sei denn, man definiert eine weitere Regel.
Am besten stellt man es sich so vor, dass die Firewall "zwischen" dem eigenen Rechner und dem Rest der Welt hockt und jedes durchlaufende Paket auf Quelle und Ziel überprüft. Der eigene Rechner hat also keine besonderen Privilegien und Pakete vom eigenen Rechner werden also genauso herausgefiltert, wenn sie die Regeln nicht erfüllen, wie die Pakete eines jeden beliebigen anderen Rechners, die die Firewall passieren müssen.
Es ist auch möglich, Übertragungsprotokolle (TCP/UDP) pauschal für einen Port freizugeben, was das folgende Beispiel zeigt:
sudo ufw allow 80/tcp
Damit werden alle TCP-Pakete auf Port 80
erlaubt, egal von welchem Rechner sie kommen bzw. zu welchen Programm/Dienst sie gehen.
Wie man sieht, ist die Regeldefinition im Wesentlichen mit der von iptables identisch. Allerdings ist sie deutlich einfacher zu merken, da ufw "Klartext" statt kryptische Parameter verwendet.
Natürlich nutzt es wenig, wenn man einzelne Protokolle und Programme reglementiert, alle anderen Protokolle/Ports/... aber undefiniert lässt. Daher wird fast immer eine globale Regel gesetzt, die entweder allow
oder deny
sein kann. Diese werden über ufw wie wie folgt gesetzt:
sudo ufw default allow # alles erlauben sudo ufw default deny # alles verbieten
Dies bewirkt folgendes: Mit default allow
wird jeglicher Netzwerkverkehr freigeben, d.h. wenn man eine spezielle Regel definiert, ist diese in der Regel eine deny
-Regel. Dieser Fall wird nur dann angewendet, wenn man spezielle Programme/Protokolle/Zielrechner sperren will, der überwiegende Teil des Verkehrs aber frei sein soll.
Mit default deny
wird jeglicher Netzwerkverkehr geblockt, d.h. wenn man eine spezielle Regel definiert, ist diese in der Regel eine allow
-Regel. Dies ist der gängigere Fall, da hier dann gezielt Programme/Protokolle/Ports freigegeben werden, d.h. nur dieser Verkehr ist frei.
Sind alle Regeländerungen durchgeführt, müssen diese der Firewall noch bekannt gegeben werden:
sudo ufw reload
Logging¶
Damit ufw alle Aktionen der Firewall "mitschreibt", muss das Logging explizit aktiviert werden. Dies geschieht über den Befehl:
sudo ufw logging on
Das Logging erfolgt dabei im Syslog, also der Datei /var/log/syslog und unter Ubuntu aufgrund der Verwendung von Rsyslog zusätzlich in die ufw-eigene Logdatei /var/log/ufw.log.
Unterstützt werden dabei verschiedenen Detail-Stufen - low
(Standard), medium
, high
und full
- die über den folgenden Befehl festgelegt werden können:
sudo ufw logging STUFE
Selbst bei wenigen Details fallen sehr viele Einträge an und die Logdateien können entsprechend groß werden. Möchte man das Logging wieder deaktivieren, so ersetzt man im oben genannten Befehl einfach on
durch off
.
sudo ufw logging off
Applikations-Filter¶
Die unter Ubuntu eingesetzten Versionen von ufw kennen auch Applikationsfilter. Diese werden i.d.R. automatisch mit der Installation eines durch ufw zu schützenden Dienstes/Programms mit installiert. Die entsprechenden Konfigurationsdateien befinden sich im Verzeichnis /etc/ufw/applications.d/. Es handelt sich um einfache Textdateien, welche den Dienstnamen, eine kurz Beschreibung sowie die zu öffnenden Ports und Protokolle enthalten.
Eine Übersicht über alle aktuellen Applikationsfilter erhält man mit dem Befehl
sudo ufw app list
Dies sieht dann z.B. so aus:
Available applications: Apache Apache Full Apache Secure CUPS
Möchte man nun Details z.B. zu CUPS haben, so ruft man den Befehl:
sudo ufw app info CUPS
auf. Die Ausgabe sieht dann so aus:
Profile: CUPS Title: Common UNIX Printing System server Description: CUPS is a printing system with support for IPP, samba, lpd, and other protocols. Port: 631
Hinweis:
Für Programmnamen wie z.B. Apache Full muss der Name in Hochkommata gefasst werden, also z.B.
sudo ufw app info 'Apache Full'
Weiterführende Details zu ufw app
findet man in den Manpages oder im englischen Ubuntu-Wiki (siehe Links).
Links¶
Personal Firewalls - weiterführender Wiki-Artikel zu diesem Thema
ufw 🇬🇧 im englischen Ubuntu-Wiki
ufw 🇬🇧 - Manpage