UFW Firewall

UFW Firewall

UFW, oder Uncomplicated Firewall, ist eine vereinfachte Firewall-Verwaltungsschnittstelle, die die Komplexität von Paketfiltertechnologien wie iptables und nftables verbirgt. Wenn Sie mit der Sicherung Ihres Netzwerks beginnen möchten und nicht sicher sind, welches Tool Sie verwenden sollen, ist UFW vielleicht die richtige Wahl für Sie.

Dieses Tutorial zeigt Ihnen, wie Sie eine Firewall mit UFW unter Ubuntu 20.04 einrichten.

Um diesem Tutorial zu folgen, benötigen Sie:

Einen Ubuntu 20.04-Server mit einem sudo-Nicht-Root-Benutzer, den Sie mit Hilfe unseres Tutorials Erste Servereinrichtung mit Ubuntu 20.04 einrichten können.

UFW ist unter Ubuntu standardmäßig installiert. Sollte es aus irgendeinem Grund deinstalliert worden sein, können Sie es mit “sudo apt install ufw” installieren.

Schritt 1 – Verwendung von IPv6 mit UFW (optional)

Diese Anleitung wurde mit Blick auf IPv4 geschrieben, funktioniert aber auch für IPv6, sofern Sie es aktivieren. Wenn Ihr Ubuntu-Server IPv6 aktiviert hat, stellen Sie sicher, dass UFW so konfiguriert ist, dass es IPv6 unterstützt, damit es neben IPv4 auch Firewall-Regeln für IPv6 verwaltet. Öffnen Sie dazu die UFW-Konfiguration mit “nano” oder Ihrem bevorzugten Editor.

sudo nano /etc/default/ufw

Speichern und schließen Sie die Datei. Wenn UFW nun aktiviert ist, wird es so konfiguriert, dass es sowohl IPv4- als auch IPv6.

Pv6-Firewall-Regeln schreibt. Bevor wir jedoch UFW aktivieren, müssen wir sicherstellen, dass Ihre Firewall so konfiguriert ist, dass Sie sich über SSH verbinden können. Beginnen wir mit dem Einrichten der Standardrichtlinien.

Schritt 2 – Einrichten von Standardrichtlinien

Wenn Sie Ihre Firewall gerade erst in Betrieb nehmen, müssen Sie als Erstes Ihre Standardrichtlinien festlegen. Diese Regeln steuern, wie der Datenverkehr behandelt werden soll, der nicht explizit einer anderen Regel entspricht. Standardmäßig ist die UFW so eingestellt, dass sie alle eingehenden Verbindungen ablehnt und alle ausgehenden Verbindungen zulässt. Das bedeutet, dass jeder, der versucht, Ihren Server zu erreichen, nicht in der Lage ist, eine Verbindung herzustellen, während jede Anwendung innerhalb des Servers in der Lage ist, die Außenwelt zu erreichen.

Setzen Sie Ihre UFW-Regeln auf die Standardwerte zurück, damit Sie diesem Lernprogramm folgen können. Verwenden Sie diese Befehle, um die von UFW verwendeten Standardwerte einzustellen:

sudo ufw default deny incoming
sudo ufw default allow outgoing

Mit diesen Befehlen werden die Standardeinstellungen festgelegt, um eingehende Verbindungen zu verweigern und ausgehende Verbindungen zuzulassen. Diese Firewall-Vorgaben allein mögen für einen privaten Computer ausreichen, aber Server müssen in der Regel auf eingehende Anfragen von externen Benutzern reagieren. Darauf gehen wir als nächstes ein.

Schritt 3 – Erlauben von SSH-Verbindungen

Wenn wir unsere UFW-Firewall jetzt aktivieren, würde sie alle eingehenden Verbindungen verweigern. Das bedeutet, dass wir Regeln erstellen müssen, die explizit legitime eingehende Verbindungen zulassen, z. B. SSH- oder HTTP-Verbindungen, wenn unser Server auf diese Arten von Anfragen reagieren soll. Wenn Sie einen Cloud-Server verwenden, werden Sie wahrscheinlich eingehende SSH-Verbindungen zulassen wollen, damit Sie eine Verbindung zu Ihrem Server herstellen und ihn verwalten können.

Um Ihren Server so zu konfigurieren, dass er eingehende SSH-Verbindungen zulässt, können Sie diesen Befehl verwenden:

sudo ufw allow ssh

Dadurch werden Firewall-Regeln erstellt, die alle Verbindungen auf Port “22” zulassen, dem Port, auf den der SSH-Daemon standardmäßig hört. UFW weiß, was Port “allow ssh” bedeutet, da er als Dienst in der Datei “/etc/services” aufgeführt ist.

Wir können die entsprechende Regel jedoch auch schreiben, indem wir den Port anstelle des Dienstnamens angeben. Dieser Befehl funktioniert zum Beispiel genauso wie der obige:

sudo ufw allow 22

Wenn Sie Ihren SSH-Daemon für die Verwendung eines anderen Ports konfiguriert haben, müssen Sie den entsprechenden Port angeben. Wenn Ihr SSH-Server beispielsweise den Port “2222” überwacht, können Sie diesen Befehl verwenden, um Verbindungen an diesem Port zuzulassen:

sudo ufw allow 2222

Nun, da Ihre Firewall so konfiguriert ist, dass sie eingehende SSH-Verbindungen zulässt, können wir sie aktivieren.

Schritt 4 – Aktivieren von UFW

Um UFW zu aktivieren, verwenden Sie diesen Befehl:

sudo ufw enable

Sie werden eine Warnung erhalten, die besagt, dass der Befehl bestehende SSH-Verbindungen unterbrechen kann. Da wir bereits eine Firewall-Regel eingerichtet haben, die SSH-Verbindungen zulässt, sollte es kein Problem sein, fortzufahren. Beantworten Sie die Eingabeaufforderung mit “y” und drücken Sie “ENTER”.

Die Firewall ist nun aktiv. Führen Sie den Befehl “sudo ufw status verbose” aus, um die eingestellten Regeln zu sehen. Der Rest dieses Tutorials behandelt die Verwendung der UFW im Detail, z. B. das Zulassen oder Verweigern verschiedener Arten von Verbindungen.

Schritt 5 – Andere Verbindungen zulassen

An dieser Stelle sollten Sie alle anderen Verbindungen zulassen, auf die Ihr Server reagieren muss. Welche Verbindungen Sie zulassen sollten, hängt von Ihren spezifischen Anforderungen ab. Glücklicherweise wissen Sie bereits, wie Sie Regeln schreiben können, die Verbindungen auf der Grundlage eines Dienstnamens oder eines Ports zulassen; wir haben dies bereits für SSH auf Port “22” getan. Sie können dies auch tun für:

  • HTTP auf Port 80, den unverschlüsselte Webserver verwenden, mit sudo ufw allow http oder sudo ufw allow 80
  • HTTPS auf Port 443, was verschlüsselte Webserver verwenden, mit sudo ufw allow https oder sudo ufw allow 443

Neben der Angabe eines Ports oder eines bekannten Dienstes gibt es noch weitere Möglichkeiten, andere Verbindungen zuzulassen.

Spezifische Port-Bereiche

Sie können mit UFW Portbereiche angeben. Einige Anwendungen verwenden mehrere Ports anstelle eines einzigen Ports.

Um zum Beispiel X11-Verbindungen zuzulassen, die die Ports “6000-6007” verwenden, verwenden Sie diese Befehle:

sudo ufw allow 6000:6007/tcp
sudo ufw allow 6000:6007/udp

Bei der Angabe von Portbereichen mit UFW müssen Sie das Protokoll (tcp oder udp) angeben, für das die Regeln gelten sollen. Wir haben dies bisher nicht erwähnt, weil die Nichtangabe des Protokolls automatisch beide Protokolle zulässt, was in den meisten Fällen in Ordnung ist.

Spezifische IP-Adressen

Wenn Sie mit UFW arbeiten, können Sie auch IP-Adressen angeben. Wenn Sie z. B. Verbindungen von einer bestimmten IP-Adresse zulassen wollen, z. B. von der Arbeits- oder Heim-IP-Adresse 203.0.113.4, müssen Sie “von” und dann die IP-Adresse angeben:

sudo ufw allow from 203.0.113.4

Sie können auch einen bestimmten Port angeben, mit dem die IP-Adresse eine Verbindung herstellen darf, indem Sie an einen beliebigen Port die Portnummer anhängen. Wenn Sie z. B. “203.0.113.4” erlauben wollen, eine Verbindung zu Port “2”2 (SSH) herzustellen, verwenden Sie diesen Befehl:

sudo ufw allow from 203.0.113.4 to any port 22

Subnets

Wenn Sie ein Subnetz von IP-Adressen zulassen wollen, können Sie dies mit der CIDR-Notation tun, um eine Netzmaske anzugeben. Wenn Sie z. B. alle IP-Adressen zwischen “203.0.113.1 und 203.0.113.254” zulassen wollen, können Sie diesen Befehl verwenden:

sudo ufw allow from 203.0.113.0/24

Ebenso können Sie den Zielport angeben, mit dem sich das Subnetz “203.0.113.0/24” verbinden darf. Auch hier verwenden wir Port “22” (SSH) als Beispiel:

sudo ufw allow from 203.0.113.0/24 to any port 22

Verbindungen zu einer bestimmten Netzwerkschnittstelle
Wenn Sie eine Firewall-Regel erstellen möchten, die nur für eine bestimmte Netzwerkschnittstelle gilt, können Sie dies tun, indem Sie “Zulassen auf” gefolgt von dem Namen der Netzwerkschnittstelle angeben.

Bevor Sie fortfahren, sollten Sie Ihre Netzwerkschnittstellen nachschlagen. Verwenden Sie dazu diesen Befehl:

ip addr
Output Excerpt
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state
. . .
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default
. . .

Die hervorgehobene Ausgabe zeigt die Namen der Netzwerkschnittstellen an. Sie heißen normalerweise eth0 oder enp3s2.

Wenn Ihr Server also eine öffentliche Netzwerkschnittstelle mit dem Namen eth0 hat, können Sie mit diesem Befehl HTTP-Verkehr (Port 80) zu dieser Schnittstelle zulassen:

sudo ufw allow in on eth0 to any port 80

Auf diese Weise kann Ihr Server HTTP-Anfragen aus dem öffentlichen Internet empfangen.

Oder wenn Sie möchten, dass Ihr MySQL-Datenbankserver (Port 3306) auf Verbindungen an der privaten Netzwerkschnittstelle eth1 wartet, können Sie beispielsweise diesen Befehl verwenden:

sudo ufw allow in on eth1 to any port 3306

Dies würde es anderen Servern in Ihrem privaten Netzwerk ermöglichen, sich mit Ihrer MySQL-Datenbank zu verbinden.

Schritt 6 – Verbindungen verweigern

Wenn Sie die Standardrichtlinie für eingehende Verbindungen nicht geändert haben, ist UFW so konfiguriert, dass alle eingehenden Verbindungen abgelehnt werden. Im Allgemeinen vereinfacht dies den Prozess der Erstellung einer sicheren Firewall-Richtlinie, da Sie keine Regeln erstellen müssen, die bestimmte Ports und IP-Adressen ausdrücklich zulassen.

Manchmal werden Sie jedoch bestimmte Verbindungen auf der Grundlage der Quell-IP-Adresse oder des Subnetzes verweigern wollen, weil Sie vielleicht wissen, dass Ihr Server von dort aus angegriffen wird. Wenn Sie Ihre Standardrichtlinie für eingehende Verbindungen auf “Zulassen” ändern möchten (was nicht empfohlen wird), müssen Sie außerdem Verweigerungsregeln für alle Dienste oder IP-Adressen erstellen, für die Sie keine Verbindungen zulassen möchten.

Um Verweigerungsregeln zu erstellen, können Sie die oben beschriebenen Befehle verwenden, wobei Sie allow durch deny ersetzen.

Um zum Beispiel HTTP-Verbindungen zu verweigern, können Sie diesen Befehl verwenden:

sudo ufw deny http

Oder wenn Sie alle Verbindungen von 203.0.113.4 verweigern wollen, können Sie diesen Befehl verwenden:

sudo ufw deny from 203.0.113.4

Schauen wir uns nun an, wie Sie Regeln löschen können.

Schritt 7 – Löschen von Regeln

Das Löschen von Firewall-Regeln ist genauso wichtig wie das Erstellen von Regeln. Es gibt zwei verschiedene Möglichkeiten, die zu löschenden Regeln anzugeben: nach Regelnummer oder nach der eigentlichen Regel (ähnlich wie bei der Erstellung der Regeln). Wir beginnen mit der Methode des Löschens nach Regelnummer, weil sie einfacher ist.

Nach Regelnummer
Wenn Sie die Regelnummer zum Löschen von Firewall-Regeln verwenden, sollten Sie sich zunächst eine Liste Ihrer Firewall-Regeln besorgen. Der UFW-Statusbefehl verfügt über eine Option zur Anzeige von Nummern neben den einzelnen Regeln, wie hier gezeigt:

sudo ufw status numbered
Numbered Output:
Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 22                         ALLOW IN    15.15.15.0/24
[ 2] 80                         ALLOW IN    Anywhere

Wenn wir entscheiden, dass wir Regel 2 löschen wollen, die Regel, die Port 80 (HTTP) Verbindungen erlaubt, können wir sie in einem UFW-Löschbefehl wie folgt angeben:

sudo ufw delete 2

Daraufhin wird eine Bestätigungsaufforderung angezeigt und Regel 2, die HTTP-Verbindungen zulässt, gelöscht. Beachten Sie, dass Sie, wenn Sie IPv6 aktiviert haben, auch die entsprechende IPv6-Regel löschen sollten.

Nach tatsächlicher Regel
Die Alternative zu den Regelnummern ist die Angabe der zu löschenden Regel selbst. Wenn Sie z. B. die Regel “http zulassen” entfernen möchten, können Sie dies folgendermaßen tun:

sudo ufw delete allow http

Sie können die Regel auch mit allow 80 statt mit dem Dienstnamen angeben:

sudo ufw delete allow 80

Mit dieser Methode werden sowohl IPv4- als auch IPv6-Regeln gelöscht, sofern sie vorhanden sind.

Schritt 8 – Überprüfen des UFW-Status und der Regeln

Mit diesem Befehl können Sie jederzeit den Status von UFW überprüfen:

sudo ufw status verbose

Wenn UFW deaktiviert ist, was standardmäßig der Fall ist, sehen Sie etwa so aus:

Output
Status: inactive

Wenn die UFW aktiv ist, was sie sein sollte, wenn Sie Schritt 3 befolgt haben, wird in der Ausgabe angegeben, dass sie aktiv ist, und es werden alle Regeln aufgelistet, die gesetzt sind. Wenn die Firewall beispielsweise so eingestellt ist, dass sie SSH-Verbindungen (Port 22) von überall her zulässt, könnte die Ausgabe etwa so aussehen:

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

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW IN    Anywhere

Verwenden Sie den Befehl status, wenn Sie überprüfen möchten, wie UFW die Firewall konfiguriert hat.

Schritt 9 – Deaktivieren oder Zurücksetzen von UFW (optional)

Wenn Sie UFW nicht mehr verwenden möchten, können Sie es mit diesem Befehl deaktivieren:

sudo ufw disable

Alle Regeln, die Sie mit UFW erstellt haben, werden nicht mehr aktiv sein. Sie können jederzeit sudo ufw enable ausführen, wenn Sie es später aktivieren müssen.

Wenn Sie bereits UFW-Regeln konfiguriert haben, aber von vorne beginnen möchten, können Sie den Befehl reset verwenden:

sudo ufw reset

Dadurch wird UFW deaktiviert und alle zuvor definierten Regeln werden gelöscht. Beachten Sie, dass die Standardrichtlinien nicht auf ihre ursprünglichen Einstellungen zurückgesetzt werden, wenn Sie sie zu irgendeinem Zeitpunkt geändert haben. Dies sollte Ihnen einen Neuanfang mit UFW ermöglichen.

Fazit
Ihre Firewall ist nun so konfiguriert, dass sie (zumindest) SSH-Verbindungen zulässt. Stellen Sie sicher, dass Sie alle anderen eingehenden Verbindungen zulassen, die Ihr Server benötigt, und schränken Sie alle unnötigen Verbindungen ein, damit Ihr Server funktionsfähig und sicher ist.