ubuntuusers.de

ufw

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:


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.

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:

  1. /etc/ufw/before.rules

  2. /var/lib/ufw/user.rules (oder /lib/ufw/user.rules - in welche auch die in der Kommandozeile definierten Regeln persistiert werden)

  3. /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
ParameterErklä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).

  • Personal Firewalls - weiterführender Wiki-Artikel zu diesem Thema

  • ufw 🇬🇧 im englischen Ubuntu-Wiki

  • ufw 🇬🇧 - Manpage

Diese Revision wurde am 28. April 2022 14:10 von user_unknown erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Sicherheit, Netzwerk, Internet, Firewall