Ubuntu ufw Cheatsheet

ufw ist die Firewall implementation in Ubuntu. Im Regelfall ist die ufw vorinstalliert, muss aber manuell aktiviert werden. Um sicherzustellen, dass die ufw installiert ist, kann man kurz which ufw oder ufw version ausführen.

Ersteres gibt Beispielsweise /usr/sbin/ufw zurück, wenn installiert oder gar nichts. ufw version wirft einen Error, wenn ufw nicht installiert ist oder gibt die Versions-Informationen zurück, z.B.

ufw 0.36
Copyright 2008-2015 Canonical Ltd.

Ist die ufw nicht installiert, kann man die Installation nachholen mit apt install -y ufw.

ufw aktivieren/deaktivieren

Aktivieren der Firewall

WICHTIG

Bevor du die ufw aktivierst musst du beachten, dass im Falle eines Remote-Zugriffes auf einen Server auch die SSH Verbindung gekappt wird. Stelle sicher, dass die ufw nicht die SSH Ports blockiert, bevor du die Firewall aktivierst.

sudo ufw enable

Anschließend ist die Firewall aktiv.

Deaktivieren der Firewall

sudo ufw disable

Die Firewall ist nun deaktiviert.

Status prüfen

Um zu prüfen, ob die ufw aktiv ist, kann man

sudo ufw status

ausführen. Ist die Firewall deaktiviert, wird

Status: inactive

ausgegeben, andernfalls

Status: active

To                         Action      From
--                         ------      ----
Apache Full                ALLOW       Anywhere

mit einer Liste an Rules (erlaubten/verbotenen Ports), wenn es bereits erfasste Regeln gibt.

Will man mehr Informationen ausgeben, kann man folgenden Command ausführen:

sudo ufw status verbose

Die Ausgabe sieht dann etwa so aus:

Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
80,443/tcp (Apache Full)   ALLOW IN    Anywhere

Auch hier folgen die Firewall Rules im Anschluss, wenn bereits Regeln erfasst sind. Um eine nummerierte Liste an Rules zu erhalten, führt man nachstehenden Command aus:

sudo ufw status numbered

Die ausgegebene Liste entspricht der vorigen Ausgabe, nur mit dem Unterschied, dass Nummern vorangestellt sind.

Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 22/tcp                     ALLOW IN    Anywhere
[ 2] 80/tcp                     ALLOW IN    Anywhere
[ 3] 8080/tcp                   ALLOW IN    Anywhere

Ports öffnen

ACHTUNG!

Geöffnete Ports stellen immmer ein Risiko dar. Bitte immer darüber nachdenken, ob man einen Post tatsächlich öffnen will, bzw geöffnet haben muss.

Der generelle Syntax um einen Port zu öffnen:

ufw allow port_number/protocol

Nachfolgend ein paar Wege wie man eine HTTP Verbindung über Apache öffnet (Nginx funktioniert nahezu identisch):

Die erste Option wäre, den Service Namen zu verwenden. ufw prüft den Service Namen gegen die /etc/services Datei, um den entsprechenden Port und das Protokoll zu finden (eine liste über verfügbare Services erhält man z.B. über cat /etc/services, die Liste ist sehr lang!).

sudo ufw allow http

Man kann auch das Application Profile verwenden:

sudo ufw allow 'Apache'

Du kannst ebenfalls die Port Nummer und das Protokoll direkt angeben:

sudo ufw allow 80/tcp

WICHTIG

Gibt man kein Protokoll an, werden sowohl tcp als auch udp Protokoll freigeschalten

Die ufw unterstützt hierfür auch eine alternative Schreibweise für das Protokoll, indem man das proto Schlüsselwort verwendet:

sudo ufw allow proto tcp to any port 80

Port Bereiche (Port Ranges)

Man kann, wenn man ein breites Port-Spektrum benötigt, auch einen gesamten Port-Bereich freigeben (Beisielsweise für eine Reihe an FTP/SFTP Ports):

Will man die Ports 10000 bis 10100 für tcp Verbindungen freigeben, kann man das mit diesem Command:

sudo ufw allow 10000:10100/tcp

WICHTIG

Bei Port-Ranges muss man das Protokoll mit angeben! Will man tcp und udp freischalten, muss man 2 Commands ausführen:

sudo ufw allow 10000:10100/tcp
sudo ufw allow 10000:10100/udp

Man kann auch mehrere Ports kombiniert mit einem Bereich auflisten:

sudo ufw allow 20,21,11300:11500/tcp

Spezifische IP-Adresse und Port freischalten

Um Verbindungen einer speziellen IP Adresse an allen Ports freizuschalten:

sudo ufw allow from 215.216.217.218

Will man eine spezifische IP Adresse für einen speziellen Port freischalten, nutze das to any port Schlüsselwort gefolgt von der Port-Nummer die freigeschalten werden soll:

sudo ufw allow from 215.216.217.218 to any port 22

Subnets

Der Syntax, um ein spezielles Subnetz freizuschalten:

sudo ufw allow from <IP-Adresse>/<Netzmaske> to any port <Port-Nummer>

Will man also das Subnetz der IP-Adressen 192.168.1.1 bis 192.168.1.254 an Port 3306 (MySQL/MariaDB) freischalten:

sudo ufw allow from 192.168.1.0/24 to any port 3306

Spezifisches Netzwerk-Interface

Um Verbindungen nur an einem spezifischen Netzwerk Interface freizuschalten:

sudo ufw allow in on <Interface-Name> to any port <Port-Nummer>

Als Beispiel nehmen wir das Interface eth0 und wieder den MySQL-Port 3306

sudo ufw allow in on eth0 to any port 3306

Ablehnen/Blockieren von Verbindungen

Die Standardrichtlinie für alle eingehenden Verbindungen ist auf “Verweigern” festgelegt. Wenn du diese nicht geändert hast, blockiert die Firewall alle eingehenden Verbindungen, es sei denn, du öffnest die Verbindung ausdrücklich.

Das Schreiben von Verweigerungsregeln ist dasselbe wie das Schreiben von Regeln, die es zulassen; du musst nur das Schlüsselwort deny anstelle von allow verwenden.

Angenommen, du hast die Ports 80 und 443 geöffnet, und dein Server wird vom 215.216.217.0/24-Netzwerk angegriffen. Um alle Verbindungen ab 215.216.217.0/24 zu verweigern, führe den folgenden Befehl aus:

sudo ufw deny from 215.216.217.0/24

Hier ist ein Beispiel für die Verweigerung des Zugriffs nur auf die Ports 80 und 443 von 215.216.217.0/24:

sudo ufw deny proto tcp from 215.216.217.0/24 to any port 80,443

Löschen von Firewall Regeln

Es gibt zwei verschiedene Möglichkeiten, UFW-Regeln zu löschen: nach Regelnummer und durch Angabe der tatsächlichen Regel. Das Löschen von Regeln nach Regelnummer ist einfacher, insbesondere wenn man relativ unerfahren ist mit der ufw.

Um eine Regel zuerst nach einer Regelnummer zu löschen, musst du die Nummer der Regel suchen, die du löschen möchtest. Um eine Liste der nummerierten Regeln abzubekommen, verwenden den Befehl ufw status nummered:

sudo ufw status numbered
Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 22/tcp                     ALLOW IN    Anywhere
[ 2] 80/tcp                     ALLOW IN    Anywhere
[ 3] 8080/tcp                   ALLOW IN    Anywhere

Um die Regel Nummer 3 zu löschen, die Verbindungen zu Port 8080 zulässt, gebe folgende Angaben ein:

sudo ufw delete 3

Die zweite Methode ist das Löschen einer Regel durch spezifizieren der aktuellen Regel. Wenn man beispielsweise eine Regel ergänzt hat, die den Port 8080 öffnet, lösche die Regel über:

sudo ufw delete allow 8080

Zurücksetzen der ufw

Durch zurücksetzen der ufw werden alle Regeln gelöscht und die Firewall deaktiviert!

sudo ufw reset

Application-Profiles

Ein application profile ist eine Text-Datei im INI Format, welches den Service beschreibt und Firewall Regeln für den Service enthält. App Profile werden im /etc/ufw/applications.d Verzeichnis während der Installation eines Paketes erstellt, können aber auch manuell für Pakete erstellt werden, die so eine Konfigurations-Datei nicht bereitstellen.

Du kannst vorhandene Paket Profile über den folgenden Command ausgeben:

sudo ufw app list

Die Ausgabe sieht in etwa so aus:

Available applications:
  Apache
  Apache Full
  Apache Secure
  Nginx Full
  Nginx HTTP
  Nginx HTTPS
  OpenSSH
  Postfix
  Postfix SMTPS
  Postfix Submission
  Samba

Die Anzahl und Namen der Pakete hängt natürlich von den eigenen installierten Paketen ab.

Informationen über ein app profile

Um mehr über die beschriebenen Regeln eines Profils zu erfahren muss man nachfolgenden Command ausführen:

sudo ufw app info 'Apache Full'

Die Ausgabe zeigt das Apache Full Profil

Profile: Apache Full
Title: Web Server (HTTP,HTTPS)
Description: Apache v2 is the next generation of the omnipresent Apache web
server.

Ports:
  80,443/tcp

Ein eigenes ufw Profil erstellen

Um ein gängiges Beispiel zu nehmen setzen wir die Regeln für den FTP-Server vsftpd auf. FTP Verbindungen sollten die Ports 20 und 21 offen haben. Zudem benötigt man noch zusätzliche Ports, die der Server den aktiven Verbindungen zuweist. In unserem Beispiel nehmen wir die Ports 11100 bis 11300.

Wir erstellen die Datei /etc/ufw/applications.d/vsftpd und füllen die Datei mit nachfolgender Konfiguration:

[vsftpd]
title=vsftpd FTP Server (Standard)
description=Der vsftpd Server
ports=20/tcp|21/tcp|11100:11300/tcp

Führt man jetzt ufw app list aus, bekommt man vsftpd mit aufgeführt. Das spart einem zum Beispiel, die Ports erneut eingeben zu müssen, wenn man die Firewall aus irgendeinem Grund zurückgesetzt hat. Außerdem werden jetzt komfortabel die Bezeichnung der Regel mit angegeben, wenn man ufw status oder ufw status verbose ausführt.

Die Aktivierung der Regel erfolgt über sudo ufw allow vsftpd.

Als weiteres Beispiel noch den PLEX Medien-Server. mit verschiedenen Profilen, so dass man schnell aktivieren kann, was man möchte:

[plexmediaserver]
title=Plex Media Server (Standard)
description=The Plex Media Server
ports=32400/tcp|3005/tcp|5353/udp|8324/tcp|32410:32414/udp

[plexmediaserver-dlna]
title=Plex Media Server (DLNA)
description=The Plex Media Server (additional DLNA capability only)
ports=1900/udp|32469/tcp

[plexmediaserver-all]
title=Plex Media Server (Standard + DLNA)
description=The Plex Media Server (with additional DLNA capability)
ports=32400/tcp|3005/tcp|5353/udp|8324/tcp|32410:32414/udp|1900/udp|32469/tcp

Die Aktivierung der Regeln erfolgt über

# aktivieren des Medien-Servers
sudo ufw allow plexmediaserver
# aktivieren der DLNA Regeln des Medien-Servers
sudo ufw allow plexmediaserver-dlna
# aktivieren beider obigen Regeln auf einmal
sudo ufw allow plexmediaserver-all

Bonus: IP Masquerading

IP Masquerading ist eine Variante von NAT (Network Address Translation) im Linux-Kernel, die den Netzwerkverkehr übersetzt, indem die Quell- und Ziel-IP-Adressen und Ports neu geschrieben werden.

Mit IP Masquerading kannst du einem oder mehreren Computern in einem privaten Netzwerk erlauben, mit dem Internet über einen Linux-Computer zu kommunizieren, der als Gateway fungiert.

Die Konfiguration von IP Masquerading mit ufw umfasst mehrere Schritte.

Zuerst muss man das IP forwarding aktivieren. Öffne hierfür die Datei /etc/ufw/sysctl.conf:

sudo vi /etc/ufw/sysctl.conf

Suche den Eintrag net/ipv4/ip_forward, entferne den Kommentar und stelle sicher, dass der Wert auf 1 steht:

net/ipv4/ip_forward=1

Als Nächstes konfiguriere die ufw für die Paket-Weiterleitung. Öffne dafür die ufw Konfigurations-Datei:

sudo vi /etc/default/ufw

Suche den DEFAULT_FORWARD_POLICY Schlüssel und ändere den Wert von DROP zu ACCEPT:

DEFAULT_FORWARD_POLICY="ACCEPT"

Jetzt musst du die Standardrichtlinie für die POSTROUTING-Kette in der nat-Tabelle und der Masquerade-Regel festlegen. Öffne dazu die Datei /etc/ufw/before.rules, und füge die an, wie unten gezeigt:

sudo vi /etc/ufw/before.rules

Ergänze die folgenden Zeilen:

#NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]

# Forward traffic through eth0 - Change to public network interface
-A POSTROUTING -s 10.8.0.0/16 -o eth0 -j MASQUERADE

# don't delete the 'COMMIT' line or these rules won't be processed
COMMIT

WICHTIG

Vergesse nicht, eth0 gegen den Namen deines Interfaces zu tauschen!

Wenn du fertig bist, speichere die Datei, de- und reaktiviere die Firewall.

sudo ufw disable
sudo ufw enable

Mehr Informationen

Für mehr Informationen zur ufw lese die UFW man page .

Anhänge

UFW Cheatsheet
application/pdf