Ubuntu ufw Cheatsheet
ufw
ist die Firewall implementation in Ubuntu. Im Regelfall ist dieufw
vorinstalliert, muss aber manuell aktiviert werden. Um sicherzustellen, dass dieufw
installiert ist, kann man kurzwhich ufw
oderufw 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 auchudp
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
undudp
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
.