Einführung
UFW oder Uncomplicated Firewall ist eine vereinfachte Firewall-Verwaltungsoberfläche, die die Komplexität von untergeordneten Paketfiltertechnologien wie iptables
und nftables
verbirgt. Wenn Sie Ihr Netzwerk sichern möchten und nicht sicher sind, welches Tool Sie verwenden sollen, könnte UFW die richtige Wahl für Sie sein.
In diesem Tutorial erfahren Sie, wie Sie eine Firewall mit UFW unter Debian 11 einrichten.
Voraussetzungen
Um diesem Tutorial folgen zu können, benötigen Sie einen Debian-11-Server mit einem sudo
-Nicht-Root-Benutzer, den Sie einrichten können, indem Sie Schritt 1 bis 3 im Initial Server Setup with Debian 11 Tutorial befolgen.
Schritt 1 – UFW installieren
Debian installiert standardmäßig kein UFW. Wenn Sie dem gesamten Initial Server Setup Tutorial gefolgt sind, haben Sie UFW installiert und aktiviert. Andernfalls installieren Sie es jetzt mit apt
:
- sudo apt install ufw
Sie werden UFW in den folgenden Schritten einrichten.
Schritt 2 — Verwendung von IPv6 mit UFW (optional)
Dieses Tutorial ist für IPv4 konzipiert, funktioniert jedoch auch für IPv6, wenn Sie es aktivieren. Wenn Ihr Debian-Server IPv6 aktiviert hat, stellen Sie sicher, dass UFW so konfiguriert ist, dass es IPv6 unterstützt. Öffnen Sie dazu die UFW-Konfigurationsdatei /etc/default/ufw
mit nano
oder Ihrem bevorzugten Editor:
- sudo nano /etc/default/ufw
Suchen Sie IPV6
in der Datei und stellen Sie sicher, dass der Wert yes
ist:
IPV6=yes
Speichern und schließen Sie die Datei. Wenn Sie nano
verwenden, drücken Sie CTRL+X
, dann Y
, dann ENTER
, um zu speichern und die Datei zu verlassen.
Jetzt, wenn UFW aktiviert ist, wird es so konfiguriert, dass es sowohl IPv4- als auch IPv6-Firewallregeln schreibt. Bevor Sie jedoch UFW aktivieren, sollten Sie sicherstellen, dass Ihre Firewall so konfiguriert ist, dass Sie sich über SSH verbinden können. Beginnen Sie mit der Festlegung der Standardrichtlinien.
Schritt 3 — Einrichten der Standardrichtlinien
Wenn Sie gerade erst mit Ihrer Firewall beginnen, sollten die ersten Regeln, die Sie definieren, Ihre Standardrichtlinien sein. Diese Regeln behandeln den Datenverkehr, der nicht explizit mit anderen Regeln übereinstimmt. Standardmäßig ist UFW so eingestellt, dass alle eingehenden Verbindungen abgelehnt und alle ausgehenden Verbindungen zugelassen werden. Das bedeutet, dass jeder, der versucht, Ihren Server zu erreichen, keine Verbindung herstellen kann, während jede Anwendung innerhalb des Servers die Außenwelt erreichen kann.
Setzen Sie Ihre UFW-Regeln auf die Standardeinstellungen zurück, damit Sie sicher sein können, dass Sie diesem Tutorial folgen können. Verwenden Sie diese Befehle, um die von UFW verwendeten Standards festzulegen:
- sudo ufw default deny incoming
- sudo ufw default allow outgoing
Sie erhalten eine Ausgabe wie folgt:
OutputDefault incoming policy changed to 'deny'
(be sure to update your rules accordingly)
Default outgoing policy changed to 'allow'
(be sure to update your rules accordingly)
Mit diesen Befehlen werden die Standardeinstellungen auf das Ablehnen eingehender und das Zulassen ausgehender Verbindungen gesetzt. Diese Firewall-Standards allein könnten für einen persönlichen Computer ausreichen, aber Server müssen in der Regel auf eingehende Anfragen von externen Benutzern reagieren. Diesen Prozess beginnen Sie im nächsten Schritt.
Schritt 4 — SSH-Verbindungen zulassen
Du kannst deine UFW-Firewall noch nicht aktivieren, da sie alle eingehenden Verbindungen blockieren würde, einschließlich deiner Versuche, auf deinen Server zuzugreifen. Das bedeutet, dass du Regeln erstellen musst, die legitime eingehende Verbindungen ausdrücklich erlauben — zum Beispiel SSH- oder HTTP-Verbindungen — wenn du möchtest, dass dein Server auf diese Arten von Anfragen reagiert. Wenn du einen Cloud-Server verwendest, möchtest du wahrscheinlich eingehende SSH-Verbindungen zulassen, damit du dich mit deinem Server verbinden und ihn verwalten kannst.
Um deinen Server so zu konfigurieren, dass er eingehende SSH-Verbindungen zulässt, verwende diesen Befehl:
- sudo ufw allow ssh
Dadurch werden Firewall-Regeln erstellt, die alle Verbindungen auf Port 22
zulassen, der der Port ist, auf dem der SSH-Daemon standardmäßig hört. UFW weiß, welcher Port zu allow ssh
gehört, weil er als Dienst in der Datei /etc/services
aufgeführt ist.
Du kannst jedoch die äquivalente Regel tatsächlich schreiben, indem du den Port anstelle des Dienstnamens angibst. Dieser Befehl erzeugt zum Beispiel dasselbe Ergebnis wie der obige:
- sudo ufw allow 22
Wenn du deinen SSH-Daemon konfiguriert hast, um einen anderen Port zu verwenden, musst du den entsprechenden Port angeben. Wenn dein SSH-Server zum Beispiel auf Port 2222
hört, kannst du denselben Befehl verwenden, aber 22
durch 2222
ersetzen.
Jetzt, da deine Firewall so konfiguriert ist, dass sie eingehende SSH-Verbindungen zulässt, kannst du sie aktivieren.
Schritt 5 — UFW aktivieren
Um UFW zu aktivieren, verwende diesen Befehl:
- sudo ufw enable
Sie erhalten eine Warnung, die besagt, dass der Befehl bestehende SSH-Verbindungen stören könnte. Sie haben bereits eine Firewall-Regel eingerichtet, die SSH-Verbindungen erlaubt, daher sollten Sie fortfahren können. Geben Sie y
ein und drücken Sie auf ENTER
, um auf die Aufforderung zu antworten.
Die Firewall ist jetzt aktiv. Um die von Ihnen festgelegten Regeln anzuzeigen, führen Sie diesen Befehl aus:
- sudo ufw status verbose
Der Rest dieses Tutorials erklärt detaillierter, wie UFW verwendet wird, einschließlich des Zulassens und Ablehnens verschiedener Arten von Verbindungen.
Schritt 6 – Andere Verbindungen zulassen
Jetzt sollten Sie alle anderen Verbindungen zulassen, die Ihr Server benötigt, um ordnungsgemäß zu funktionieren. Die Verbindungen, die Sie zulassen sollten, hängen von Ihren spezifischen Anforderungen ab. Sie wissen bereits, wie Sie Regeln schreiben, die Verbindungen basierend auf einem Dienstnamen oder einem Port zulassen; dies haben Sie für SSH auf Port 22
getan.
Sie können dies auch für HTTP auf Port 80
tun, was unverschlüsselte Webserver verwenden. Um diesen Verkehr zuzulassen, würden Sie Folgendes eingeben:
- sudo ufw allow http
Sie können dies auch für HTTPS auf Port 443
tun, was verschlüsselte Webserver verwenden. Um diesen Verkehr zuzulassen, würden Sie Folgendes eingeben:
- sudo ufw allow https
In beiden Szenarien würde es auch funktionieren, die Ports anzugeben, wobei HTTP 80
und HTTPS 443
wäre. Zum Beispiel:
- sudo ufw allow 80
Es gibt jedoch auch andere Möglichkeiten, Verbindungen zuzulassen, abgesehen von der Angabe eines Ports oder eines bekannten Dienstes. Dies wird im nächsten Abschnitt behandelt.
Spezifische Portbereiche
Sie können Portbereiche mit UFW angeben. Zum Beispiel verwenden einige Anwendungen mehrere Ports anstelle eines einzelnen Ports.
Um beispielsweise X11
-Verbindungen zu erlauben, die die Ports 6000
bis 6007
verwenden, verwenden Sie diese Befehle:
- sudo ufw allow 6000:6007/tcp
- sudo ufw allow 6000:6007/udp
Beim Angeben von Portbereichen mit UFW müssen Sie das Protokoll (tcp
oder udp
) angeben, für das die Regeln gelten sollen. Dies wurde zuvor nicht erwähnt, da das Nichtangeben des Protokolls automatisch beide Protokolle zulässt, was in den meisten Fällen in Ordnung ist.
Spezifische IP-Adressen
Bei der Arbeit mit UFW können Sie auch IP-Adressen angeben. Wenn Sie beispielsweise Verbindungen von einer bestimmten IP-Adresse zulassen möchten, wie beispielsweise einer Arbeits- oder Heim-IP-Adresse von 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 verbunden werden darf, indem Sie zu jedem Port
gefolgt von der Portnummer hinzufügen. Wenn Sie beispielsweise 203.0.113.4
erlauben möchten, sich mit Port 22
(SSH) zu verbinden, verwenden Sie diesen Befehl:
- sudo ufw allow from 203.0.113.4 to any port 22
Subnetze
Wenn Sie einem Subnetz von IP-Adressen Zugriff gewähren möchten, können Sie dies mithilfe der CIDR-Notation tun, um eine Netzmaske anzugeben. Zum Beispiel, wenn Sie alle IP-Adressen im Bereich von 203.0.113.1
bis 203.0.113.254
zulassen möchten, können Sie diesen Befehl verwenden:
- sudo ufw allow from 203.0.113.0/24
Ebenso können Sie auch den Zielport angeben, zu dem das Subnetz 203.0.113.0/24
eine Verbindung herstellen darf. Erneut, indem Sie Port 22
(SSH) als Beispiel verwenden:
- sudo ufw allow from 203.0.113.0/24 to any port 22
Verbindungen zu einem bestimmten Netzwerkinterface
Wenn Sie eine Firewall-Regel erstellen möchten, die nur auf ein bestimmtes Netzwerkinterface angewendet wird, können Sie dies tun, indem Sie erlauben auf an
gefolgt vom Namen des Netzwerkinterfaces angeben.
Es ist hilfreich, Ihre Netzwerkinterfaces vor dem Fortfahren nachzuschlagen. Verwenden Sie dazu diesen Befehl:
- ip addr
Output. . .
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 markierte Ausgabe zeigt die Namen der Netzwerkinterfaces an. Sie haben in der Regel Namen wie eth0
oder enp3s2
.
Wenn Ihr Server beispielsweise ein öffentliches Netzwerkinterface namens eth0
hat, könnten Sie den HTTP-Verkehr damit mit diesem Befehl zulassen:
- sudo ufw allow in on eth0 to any port 80
Dadurch könnte Ihr Server HTTP-Anfragen aus dem öffentlichen Internet empfangen.
Oder, wenn Sie einen MySQL-Datenbankserver (Port 3306
) verwenden möchten, um auf der privaten Netzwerkschnittstelle eth1
auf Verbindungen zu lauschen, könnten Sie diesen Befehl verwenden:
- sudo ufw allow in on eth1 to any port 3306
Dies würde anderen Servern in Ihrem privaten Netzwerk ermöglichen, eine Verbindung zu Ihrer MySQL-Datenbank herzustellen.
Schritt 7 — Verweigern von Verbindungen
Wenn Sie die Standardrichtlinie für eingehende Verbindungen nicht geändert haben, ist UFW so konfiguriert, dass alle eingehenden Verbindungen verweigert werden. Dies vereinfacht in der Regel den Prozess der Erstellung einer sicheren Firewall-Richtlinie, da Sie Regeln erstellen müssen, die explizit bestimmte Ports und IP-Adressen zulassen.
Manchmal möchten Sie jedoch bestimmte Verbindungen auf der Grundlage der Quell-IP-Adresse oder des Subnetzes verweigern, vielleicht weil Sie wissen, dass Ihr Server von dort aus angegriffen wird. Außerdem müssten Sie, wenn Sie Ihre Standard-Eingangsrichtlinie auf erlauben
ändern möchten (was nicht empfohlen wird), deny
-Regeln für Dienste oder IP-Adressen erstellen, für die Sie keine Verbindungen zulassen möchten.
Um deny
-Regeln zu schreiben, können Sie die oben beschriebenen Befehle verwenden und allow
durch deny
ersetzen.
Zum Beispiel könnten Sie diesen Befehl verwenden, um HTTP-Verbindungen zu verweigern:
- sudo ufw deny http
Oder wenn Sie alle Verbindungen von 203.0.113.4
verweigern möchten, könnten Sie diesen Befehl verwenden:
- sudo ufw deny from 203.0.113.4
Jetzt können Sie lernen, wie Sie Löschregeln implementieren.
Schritt 8 — Löschen von Regeln
Das Löschen von Firewall-Regeln zu kennen ist genauso wichtig wie das Erstellen von ihnen. Es gibt zwei Möglichkeiten, welche Regeln gelöscht werden sollen: nach der Regelnummer oder nach der Regel selbst. Dies ist ähnlich wie bei der Spezifikation der Regeln bei ihrer Erstellung.
Nach Regelnummer
Wenn Sie die Regelnummer verwenden, um Firewall-Regeln zu löschen, möchten Sie zunächst eine Liste Ihrer Firewall-Regeln erhalten. Der UFW-Befehl status
hat die Option numbered
, die Zahlen neben jeder Regel anzeigt:
- sudo ufw status numbered
OutputStatus: active
To Action From
-- ------ ----
[ 1] 22 ALLOW IN 15.15.15.0/24
[ 2] 80 ALLOW IN Anywhere
Wenn Sie sich entscheiden, Regel 2
zu löschen, die HTTP-Verbindungen auf Port 80
ermöglicht, können Sie dies im folgenden UFW-Befehl delete
angeben:
- sudo ufw delete 2
Dies zeigt eine Bestätigungsaufforderung an, die Sie mit y/n
beantworten können. Durch Eingabe von y
wird dann Regel 2
gelöscht. Beachten Sie, dass Sie bei aktiviertem IPv6 die entsprechende IPv6-Regel ebenfalls löschen möchten.
Nach tatsächlicher Regel
Die Alternative zu den Regelnummern besteht darin, die tatsächliche Regel zu spezifizieren, die gelöscht werden soll. Zum Beispiel, wenn Sie die Regel allow http
entfernen möchten, könnten Sie es so schreiben:
- sudo ufw delete allow http
Sie können die Regel auch mit allow 80
statt dem Dienstnamen angeben:
- sudo ufw delete allow 80
Diese Methode löscht sowohl IPv4- als auch IPv6-Regeln, wenn sie vorhanden sind.
Schritt 9 — Überprüfen des UFW-Status und der Regeln
Zu jedem Zeitpunkt können Sie den Status von UFW mit diesem Befehl überprüfen:
- sudo ufw status verbose
Wenn UFW deaktiviert ist, was der Standard ist, lautet die Ausgabe wie folgt:
OutputStatus: inactive
Wenn UFW aktiv ist, was der Fall sein sollte, wenn Sie Schritt 3 befolgt haben, wird die Ausgabe angeben, dass es aktiv ist, und alle Regeln auflisten, die Sie festgelegt haben. Zum Beispiel, wenn die Firewall so eingestellt ist, dass sie SSH (Port 22
) Verbindungen von überall erlaubt, könnte die Ausgabe so etwas enthalten:
OutputStatus: active
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 10 — Deaktivieren oder Zurücksetzen von UFW (optional)
Wenn Sie sich entscheiden, UFW nicht mehr verwenden zu wollen, 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 entscheiden, dass Sie von vorne beginnen möchten, können Sie den Reset-Befehl verwenden:
- sudo ufw reset
Dies deaktiviert UFW und löscht alle zuvor definierten Regeln. Beachten Sie, dass die Standardrichtlinien nicht auf ihre ursprünglichen Einstellungen zurückgesetzt werden, wenn Sie sie zu einem beliebigen Zeitpunkt geändert haben. Dies sollte Ihnen einen frischen Start mit UFW ermöglichen.
Abschluss
Ihre Firewall ist jetzt so konfiguriert, dass (mindestens) SSH-Verbindungen zugelassen sind. Stellen Sie sicher, dass Sie alle anderen eingehenden Verbindungen zulassen, die Ihr Server benötigt, und beschränken Sie gleichzeitig unnötige Verbindungen. Dadurch wird sichergestellt, dass Ihr Server sowohl funktional als auch sicher ist.
Um mehr über gängige UFW-Konfigurationen zu erfahren, schauen Sie sich dieses Tutorial zu UFW Essentials: Common Firewall Rules and Commands an.