Wie richte ich eine Firewall mit UFW ein?

|   Ubuntu | Ubuntu 18.04Ubuntu 20.04

UFW, oder "Uncomplicated Firewall" (Unkomplizierte Firewall), ist eine Schnittstelle zu iptables, die darauf ausgerichtet ist, den Prozess der Konfiguration einer Firewall zu vereinfachen. Obwohl iptables ein solides und flexibles Werkzeug ist, kann es für Anfänger schwierig sein, den Umgang mit iptables zu erlernen, um eine Firewall richtig zu konfigurieren. Wenn Du mit der Sicherung Deines Servers beginnen möchtest und nicht sicher bist, welches Tool Du verwenden sollst, ist UFW vielleicht die richtige Wahl.

Schritt 1: UFW installieren

Wenn UFW noch nicht auf deinem Server installiert ist kannst du es mit folgendem Befehl installieren:

sudo apt install ufw

Schritt 2: Verwendung von IPv6 mit UFW (optional)

Diese Anleitung wurde fü IPv4 geschrieben und getestet, funktioniert aber grundsätlich auch für IPv6, wenn dieses aktiviert ist. Wenn auf deinem Ubuntu-Server IPv6 aktiviert ist, musst du sicherstellen, dass UFW so konfiguriert ist, dass es IPv6 unterstützt. Öffne dazu die UFW-Konfiguration mit nano oder deinem bevorzugten Editor.

sudo nano /etc/default/ufw

Dann stell bitte sicher, dass der Wert von IPV6 yes lautet. Es sollte wie folgt aussehen:

IPV6=yes

Speicher und schließe die Datei. Wenn du UFW jetzt aktivierst, ist es so konfiguriert, dass es sowohl IPv4- als auch IPv6-Firewall-Regeln schreibt. Bevor du jedoch UFW aktivieren, musst du sicherstellen, dass deine Firewall so konfiguriert ist, dass du eine Verbindung über SSH herstellen kannst. Die Konfiguration der Standardrichtlinien wird im folgenden Schritt erklärt.

Schritt 3: Konfiguration der Standardrichtlinien

Wenn du gerade erst mit der Einrichtung Firewall beginnst, nusst du als erstes die Regeln für deine Standardrichtlinien definieren. Diese Regeln steuern, wie mit Datenverkehr umzugehen ist, der nicht explizit über andere Einstellungen geregelt ist. Standardmäßig ist UFW so eingestellt, dass alle eingehenden Verbindungen verweigert und alle ausgehenden Verbindungen zugelassen werden. Das bedeutet, dass jeder, der versucht, deinen Server zu erreichen, keine Verbindung herstellen kann, während jede Anwendung innerhalb des Servers in der Lage ist, externe Systeme zu erreichen.

Setze die UFW-Regeln auf die Standardeinstellungen zurück, damit du dieser Anleitung folgen kannst. Verwende dazu die folgenden Befehle:

sudo ufw default deny incoming
sudo ufw default allow outgoing

Mit diesen Befehlen legst du fest, dass eingehende Verbindungen verweigert und ausgehende Verbindungen zugelassen werden. Diese Firewall-Standardwerte allein könnten für einen Personalcomputer ausreichen, aber Server müssen auf eingehende Anfragen von externen Benutzern reagieren. Deswegen werden wir in den folgenden Schritten weitere Regeln definieren.

Schritt 4: SSH-Verbindungen zulassen

Wenn die jetzt die UFW-Firewall aktivierst, würde sie alle eingehenden Verbindungen verweigern. Das bedeutet, dass zuerst Regeln erstellt werden müssen, die ausdrücklich gewünschte eingehende Verbindungen zulassen. Dies ist besonders wichtig, wenn du einen Cloud- oder Remote-Server verwendest. In diesem Fall benötigst du eingehende SSH-Verbindungen, damit du dich mit deinem Server verbinden und ihn verwalten kannst. Ansonsten kannst du dich aus der Ferne nicht mehr mit deinem Server verbinden.

Um den Server so zu konfigurieren, dass eingehende SSH-Verbindungen zugelassen werden, kannst du den folgenden Befehl verwenden:

sudo ufw allow 22

Durch den Befehl werden Firewall-Regeln erstellt, die alle Verbindungen auf Port 22 zulassen. Port 22 ist der Port, auf dem der SSH-Dämon standardmäßig lauscht.

Wir können die entsprechende Regel aber auch so schreiben, indem wir den Dienstnamen anstelle des Ports angeben. Dieser Befehl funktioniert zum Beispiel genauso wie der obige Befehl:

sudo ufw allow ssh

UFW weiß, was "allow ssh" bedeutet, weil es als Dienst in der Datei /etc/services aufgeführt ist. Sollte ein anderer Port als der Standardport 22 konfiguriert sein, wird dieser automatisch für Verbindungen zugelassen.

Nun, ist die Firewall so konfiguriert, dass sie eingehende SSH-Verbindungen zulässt und kann aktiviert werden.

Schritt 5: UFW aktivieren

UFW wird mit folgenden Befehl aktiviert:

sudo ufw enable

Du erhältst eine Warnung, die besagt, dass der Befehl die bestehende SSH-Verbindungen unterbrechen kann. Da du bereits eine Firewall-Regel eingerichtet hast, die SSH-Verbindungen zulässt, kannst du weiterzumachen. Antworte auf die Eingabeaufforderung mit y und bestätige mit ENTER.

Die Firewall ist jetzt aktiv. Führe den Befehl sudo ufw status verbose aus, um die eingestellten Regeln zu sehen. 

sudo ufw status verbose

Schritt 6: Weitere Verbindungen zulassen

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

HTTP auf Port 80, der für unverschlüsselte Webserververbindungen verwendet wird, mit

sudo ufw allow http

oder

sudo ufw allow 80

HTTPS auf Port 443, der für verschlüsselte Webserververbindungen verwendet wird, mit

sudo ufw allow https

oder

sudo ufw allow 443

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

Spezifische Portbereiche

Du kannst Portbereiche mit UFW angeben. Einige Anwendungen verwenden mehrere Ports anstelle eines einzelnen Ports.

Um beispielsweise X11-Verbindungen zuzulassen, die die Ports 6000-6007 verwenden, verwendest du folgende Befehle:

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

Wenn du Portbereiche mit UFW angibst, musst du das Protokoll (tcp oder udp) angeben, für das die Regeln gelten sollen. Dies wurde 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 du mit UFW arbeitest, kannst du auch IP-Adressen angeben. Wenn du z.B. Verbindungen von einer bestimmten IP-Adresse aus zulassen willst, wie z.B. einer Arbeits- oder Server-IP-Adresse 209.5.31.88, msst du zuerst from und dann die IP-Adresse angeben:

sudo ufw allow from 209.5.31.88

Du kannst auch einen bestimmten Port angeben, zu dem die IP-Adresse eine Verbindung herstellen darf, indem du einen beliebigen Port gefolgt von der Portnummer hinzufügen. Wenn du beispielsweise 209.5.31.88 die Verbindung mit Port 22 (SSH) erlauben möchten, verwenden den folgenden Befehl:

sudo ufw allow from 209.5.31.88 to any port 22

Subnets (Teilnetze)

Wenn du ein Subnetz von IP-Adressen zulassen möchten, kannst du dies unter Verwendung der CIDR-Notation zur Angabe einer Netzmaske tun. Wenn du zum Beispiel alle IP-Adressen im Bereich von 209.5.31.1 bis 203.5.31.254 zulassen möchten, kannst du folgenden Befehl verwenden:

sudo ufw allow from 209.5.31.0/24

Ebenso kannst du auch den Ziel-Port angeben, mit dem das Subnetz 209.5.31.0/24 verbunden werden darf, wie zum Beispiel den Port 22 (SSH):

sudo ufw allow from 209.5.31.0/24 to any port 22

Verbindungen zu einer bestimmten Netzwerkschnittstelle

Wenn du eine Firewall-Regel erstellen möchtest, die nur für eine bestimmte Netzwerkschnittstelle gilt, kannst du dies tun, indem Sie "allow in on" gefolgt vom Namen der Netzwerkschnittstelle angeben.

Möglicherweise möchten Sie Ihre Netzwerkschnittstellen nachschlagen, bevor Sie fortfahren. Verwenden Sie dazu diesen Befehl:

ip addr

Ausgabe:

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 Ausgabe zeigt die Netzwerkschnittstellen an. In der Regel werden sie wie eth0 können aber auch enp3s2 genannt.

Wenn dein Server eine öffentliche Netzwerkschnittstelle namens eth0 hat, kkannst du mit folgendem Befehl HTTP-Verkehr (Port 80) zulassen:

sudo ufw allow in on eth0 to any port 80

Wenn du möchtest, dass dein MySQL- oder MariaDB-Datenbankserver (Port 3306) auf der privaten Netzwerkschnittstelle eth1 auf Verbindungen lauscht, kannst du folgenden 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. Ggf. muss hierfür noch die MySQL-Konfiguration angepasst werden.

Schritt 6: Verbindungen verweigern

Wenn du die Standardrichtlinie für eingehende Verbindungen nicht geändert hast, ist UFW so konfiguriert, dass alle eingehenden Verbindungen verweigert werden. Im Allgemeinen vereinfacht dies den Prozess der Konzeption einer sicheren Firewall-Richtlinie, da nur Regeln erstellt müssen, die bestimmte Ports und IP-Adressen explizit durchlassen.

Manchmal wirst du jedoch bestimmte Verbindungen auf der Basis der Quell-IP-Adresse oder des Subnetzes verweigern wollen, weil dein Server von dort aus angegriffen wird. Auch wenn du deine Standard-Eingangsrichtlinie änderst, um alles zuzulassen (wird ausdrücklich nicht empfohlen), musst du Verweigerungsregeln für alle Dienste oder IP-Adressen erstellen, für die du keine Verbindungen zulassen möchtest.

Um Verweigerungsregeln zu schreiben, kannst du die oben beschriebenen Befehle verwenden, wobei du nur "allow" durch "deny" ersetzen musst.

Um z.B. HTTP-Verbindungen zu verweigern, kannst du folgenden Befehl verwenden:

sudo ufw deny http

Wenn du alle Verbindungen von 209.5.31.88 verweigern möchtest, kannst du folgenden Befehl verwenden:

sudo ufw deny from 203.0.113.4

Schritt 8: Regeln löschen

Es gibt zwei verschiedene Möglichkeiten, anzugeben, welche Regeln gelöscht werden sollen:

  • anhand der Regelnummer oder
  • anhand der eigentlichen Regel (ähnlich wie die Regeln bei ihrer Erstellung angegeben wurden).

Nach Regelnummer

Wenn du die Regelnummer zum Löschen von Firewall-Regeln verwendest, solltest du dir als erstes eine Liste deiner Firewall-Regeln ausgeben lassen. Der UFW-Statusbefehl verfügt über eine Option zur Anzeige von Nummern neben jeder Regel:

sudo ufw status numbered

Nummerierte Ausgabe:

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

Wenn du Regel 2 löschen möchtest, die Verbindungen über Port 80 (HTTP) zulässt, kannst du sie in folgendem Befehl löschen:

sudo ufw delete 2

Nach bestätigen einer Sicherheitsabfrage wird die Regel 2 gelöscht, die die HTTP-Verbindungen erlaubt.

Beachte, wenn du IPv6 aktiviert hast, musst du auch die entsprechende IPv6-Regel löschen.

Nach aktueller Regel

Die Alternative zu Regelnummern ist die Angabe der tatsächlich zu löschenden Regel. Wenn du z.B. die allow http-Regel entfernen möchtest, kannst du die Befehl wie folgt schreiben:

sudo ufw delete allow http

Du kannst die Regel auch durch allow 80 statt durch den Dienstnamen angeben:

sudo ufw delete allow 80

Diese Methode löscht sowohl IPv4- als auch IPv6-Regeln.

Schritt 9: UFW-Status und Regeln prüfen

Mit dem folgenden Befehl kann jederzeit der Status der UFW überprüft werden:

sudo ufw status verbose

Wenn UFW deaktiviert ist, erscheint folgende Ausgabe:

Status: inactive

Wenn die UFW aktiv ist, werden alle bestehenden Regeln aufgelistet. Ist die Firewall beispielsweise so eingestellt, dass sie SSH-Verbindungen (Port 2222) von überall her zulässt, sieht die Ausgabe in etwa wie folgt aus:

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

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

Schritt 10: Deaktivieren oder zurücksetzen der UFW

Wenn du UFW nicht mehr zu verwenden möchtest, kannst du die Firewall mit folgendem Befehl deaktivieren:

sudo ufw disable

Alle Regeln, die mit UFW erstellt wurden, sind danach nicht mehr aktiv. Du kannst wber jederzeit wieder den Befehl 

sudo ufw enable

ausführen, wenn du UFW und damit die Regeln wieder aktivieren möchtest.

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

sudo ufw reset

Durch diesen Befehl wird UFW deaktiviert und alle zuvor definierten Regeln werden gelöscht.

Denke daran, die Standardrichtlinien werden nicht auf ihre ursprünglichen Einstellungen zurückgesetzt, wenn Sie sie geändert wurden.