[[Vorlage(Getestet, bionic, focal)]] {{{#!vorlage Wissen [:Pakete_installieren: Installation von Programmen] [:Terminal: Ein Terminal öffnen] [:iptables:Grundlegendes Verständnis von netfilter / iptables] }}} [[Inhaltsverzeichnis(2)]] [launchpad:ufw:] {en} steht für '''u'''ncomplicated '''f'''ire'''w'''all. 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. [https://gufw.org/ Gufw] {en} ist eine grafische Oberfläche für ufw, aber kein offizieller Bestandteil von ufw. {{{#!vorlage 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:Sicherheits 1x1]. }}} = Installation = ufw ist in der Standardinstallation enthalten, kann ansonsten aber auch über die folgenden Pakete installiert werden [1]: {{{#!vorlage Paketinstallation ufw gufw, universe, optionale grafische Oberfläche }}} = 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 [:sudo: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 {{{#!vorlage Befehl sudo ufw status }}} {{{ Firewall not loaded }}} In diesem Falle ist der Dienst nicht aktiv. Aktiviert werden kann die Firewall mittels: {{{#!vorlage Befehl sudo ufw enable }}} {{{ Firewall started and enabled on system startup }}} So wird ufw auch als [:Dienste:Dienst] eingerichtet, d.h. beim Neustart des Rechners wird diese direkt aktiviert. Um ufw wieder abzuschalten, dient der Befehl: {{{#!vorlage 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! {{{#!vorlage 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''' 1. '''/var/lib/ufw/user.rules''' (oder '''/lib/ufw/user.rules''' - in welche auch die in der Kommandozeile definierten Regeln persistiert werden) 1. '''/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: {{{#!vorlage Befehl 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: {{{#!vorlage Befehl 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: {{{#!vorlage Befehl sudo ufw allow|deny [proto ] [from [port ]] [to [port ]] [comment ] }}} wobei die folgenden Parameter gesetzt werden können: ||<-2 rowclass="titel">'''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, ist dabei die (IP-)Adresse. || ||`to ADRESSE`|| Definiert die Zieladresse, auf die die Regel angewendet wird, 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: {{{#!vorlage Befehl 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: {{{#!vorlage Befehl 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: {{{#!vorlage Befehl 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: {{{#!vorlage Befehl sudo ufw reload }}} == Logging == Damit ufw alle Aktionen der Firewall "mitschreibt", muss das Logging explizit aktiviert werden. Dies geschieht über den Befehl: {{{#!vorlage Befehl sudo ufw logging on }}} Das Logging erfolgt dabei im Syslog, also der Datei '''/var/log/syslog''' und unter Ubuntu aufgrund der Verwendung von [wikipedia: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: {{{#!vorlage Befehl 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`. {{{#!vorlage Befehl 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 {{{#!vorlage 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: {{{#!vorlage 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 }}} {{{#!vorlage Hinweis Für Programmnamen wie z.B. '''Apache Full''' muss der Name in Hochkommata gefasst werden, also z.B. {{{#!vorlage Befehl 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]). = Links = * [:Personal_Firewalls:] - weiterführender Wiki-Artikel zu diesem Thema * [ubuntu:UncomplicatedFirewall:ufw] {en} im englischen Ubuntu-Wiki * [man:ufw:] {en} - Manpage # tag: Internet, Netzwerk, Sicherheit, Firewall