Ubuntu 12.04 „Precise Pangolin“
Ubuntu 10.04 „Lucid Lynx“
Ubuntu 8.04 „Hardy Heron“
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 graphisches Oberfläche für ufw, aber nicht offizieller Bestandteil von ufw.
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.
ufw ist ab Ubuntu 8.04 Hardy Heron verfügbar. ufw ist in der Standardinstallation enthalten, kann ansonsten aber auch über die Pakete
ufw
gufw (universe, optionale grafische Oberfläche)
mit apturl
Paketliste zum Kopieren:
sudo apt-get install ufw gufw
sudo aptitude install ufw gufw
installiert werden [1].
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 Aufrufe Root-Rechte notwendig.
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.
Das Aktivieren der Firewall an sich hat in der Standardinstallation noch keine Auswirkungen, da keine Filterregeln definiert sind bzw. nur solche, die die interne Netzwerkkommunikation regeln.
Bevor man anfängt, Regeln zu definieren, sollte man sich bewusst sein, dass per 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 zunächst die default-Regeln anpassen (siehe weiter unten) oder die gewünschten Verbindungen explizit erlauben.
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. reject
ist erst ab Ubuntu 9.04 Jaunty Jackalope vorhanden. Der Unterschied zu deny
ist, dass der Absender des Netzwerkpakets eine Nachricht erhält, dass es abgelehnt wurde. SERVICE kann dabei z.B. einer der in /etc/services Services sein, wie z.B. POP3, HTTP oder auch - falls installiert - z.B. MySQL.
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>]]
wobei die folgenden Parameter gesetzt werden können:
ufw Parameter | |
Parameter | Erklärung |
proto <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. |
Grundsätzlich kann für <protokoll>
, <adresse>
und <port>
auch immer any
als Wert gesetzt werden, dann trifft die Regel für das entsprechende 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 (des eigenen Systems) zum Rechner mit der IP-Adresse 123.456.78.90
und dem dortigen Port 22
.
Es ist auch möglich, Übertragungsprotokolle (TCP/UDP) pauschal für einen Port freizugegeben, 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 deutlich einfacher zu merken, da bei ufw "Klartext" statt kryptische Parameter verwendet werden.
Natürlich nutzt es wenig, wenn man einzelne Protokolle und Programme reglementiert, alle anderen Protokolle/Ports/... undefiniert lässt. Daher wird in der Regel immer eine globale Regel gesetzt, die kann entweder allow
oder deny
sein. 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 in der Regel 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.
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 ins Syslog, also /var/log/syslog.
Möchte man das Logging wieder deaktivieren, so ersetzt man im oben genannten Befehl einfach on
durch off
.
Die ab Ubuntu 8.10 Intrepid Ibex eingesetzte Version von ufw kennt auch sogenannte Applikations-Filter. Diese werden i.d.R. automatisch mit der Installation eines durch ufw zu schützenden Dienste / 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
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
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
Für Progammnamen wie z.B. Apache Full muss der Name in Hochkommata gefasst werden, also z.B.
ufw app info 'Apache Full'
Weiterführende Details zu ufw app
findet man in den Manpages oder im englische Ubuntu-Wiki (siehe Links).
Personal Firewalls - weiterführender Wiki-Artikel zu diesem Thema
Wiki-Eintrag im englischen Ubuntu-Wiki