Einführung
UFW oder Uncomplicated Firewall ist eine vereinfachte Firewall-Verwaltungsschnittstelle, die die Komplexität von Paketfiltertechnologien auf niedrigerer Ebene wie iptables
und nftables
verbirgt. Wenn Sie Ihr Netzwerk absichern möchten und nicht sicher sind, welches Tool Sie verwenden sollen, könnte UFW die richtige Wahl für Sie sein.
In diesem Tutorial wird gezeigt, wie Sie eine Firewall mit UFW unter Debian 11 einrichten.
Voraussetzungen
Um diesem Tutorial zu folgen, benötigen Sie einen Debian 11 Server mit einem sudo
nicht-root Benutzer, den Sie durch Befolgen von Schritt 1 bis 3 im Initial Server Setup mit Debian 11 Tutorial einrichten können.
Schritt 1 – UFW installieren
Debian installiert standardmäßig kein UFW. Wenn Sie das gesamte Anleitung zur initialen Servereinrichtung befolgt haben, haben Sie UFW installiert und aktiviert. Andernfalls installieren Sie es jetzt mit apt
:
Sie werden UFW einrichten und aktivieren in den folgenden Schritten.
Schritt 2 — Verwenden von IPv6 mit UFW (Optional)
Diese Anleitung ist für IPv4 geschrieben, funktioniert aber auch für IPv6, wenn Sie es aktivieren. Wenn Ihr Debian-Server IPv6 aktiviert hat, möchten Sie sicherstellen, dass UFW so konfiguriert ist, dass es IPv6 unterstützt. Dies stellt sicher, dass UFW Firewall-Regeln für IPv6 zusätzlich zu IPv4 verwaltet. Um dies zu konfigurieren, öffnen Sie die UFW-Konfigurationsdatei /etc/default/ufw
mit nano
oder Ihrem bevorzugten Editor:
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 STRG+X
, dann Y
, dann EINGABE
, um die Datei zu speichern und zu verlassen.
Jetzt, wenn UFW aktiviert ist, wird es konfiguriert sein, um sowohl IPv4- als auch IPv6-Firewall-Regeln zu schreiben. Bevor Sie jedoch UFW aktivieren, möchten Sie sicherstellen, dass Ihre Firewall so konfiguriert ist, dass Sie eine Verbindung über SSH herstellen können. Beginnen Sie mit der Festlegung der Standardrichtlinien.
Schritt 3 — Einrichten von 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, auf Ihren Server zuzugreifen, keine Verbindung herstellen kann, während jede Anwendung innerhalb des Servers die Außenwelt erreichen kann.
Setzen Sie Ihre UFW-Regeln auf die Standardwerte zurück, damit Sie sicher sein können, dass Sie diesem Tutorial folgen können. Verwenden Sie diese Befehle, um die von UFW verwendeten Standardwerte festzulegen:
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 Standardwerte auf das Ablehnen von eingehenden und das Zulassen von ausgehenden Verbindungen gesetzt. Diese Firewall-Standardeinstellungen allein könnten für einen persönlichen Computer ausreichen, aber Server müssen typischerweise auf eingehende Anfragen von externen Benutzern reagieren. Sie werden diesen Prozess im nächsten Schritt starten.
Schritt 4 — Zulassen von SSH-Verbindungen
Sie können Ihre UFW-Firewall noch nicht aktivieren, da sie alle eingehenden Verbindungen blockieren würde, einschließlich Ihrer Versuche, auf Ihren Server zuzugreifen. Das bedeutet, dass Sie Regeln erstellen müssen, die legitime eingehende Verbindungen explizit zulassen – zum Beispiel SSH- oder HTTP-Verbindungen -, wenn Sie möchten, dass Ihr Server auf diese Arten von Anfragen antwortet. Wenn Sie einen Cloud-Server verwenden, möchten Sie wahrscheinlich eingehende SSH-Verbindungen zulassen, damit Sie sich mit Ihrem Server verbinden und ihn verwalten können.
Um Ihren Server so zu konfigurieren, dass eingehende SSH-Verbindungen zugelassen werden, verwenden Sie diesen Befehl:
Dies erstellt Firewall-Regeln, die alle Verbindungen auf Port 22
zulassen, der standardmäßige Port, auf dem der SSH-Daemon standardmäßig hört. UFW weiß, welcher Port mit allow ssh
verbunden ist, weil er als Dienst in der Datei /etc/services
aufgeführt ist.
Sie können jedoch tatsächlich die äquivalente Regel schreiben, indem Sie den Port anstelle des Dienstnamens angeben. Zum Beispiel erzeugt dieser Befehl das gleiche Ergebnis wie der oben genannte:
Wenn Sie Ihren SSH-Daemon so konfiguriert haben, dass er einen anderen Port verwendet, müssen Sie den entsprechenden Port angeben. Wenn Ihr SSH-Server beispielsweise auf Port 2222
hört, können Sie denselben Befehl verwenden, aber 22
durch 2222
ersetzen.
Jetzt, da Ihre Firewall so konfiguriert ist, dass eingehende SSH-Verbindungen zugelassen werden, können Sie sie aktivieren.
Schritt 5 — UFW aktivieren
Um UFW zu aktivieren, verwenden Sie diesen Befehl:
Sie erhalten eine Warnung, die besagt, dass der Befehl bestehende SSH-Verbindungen stören kann. Sie haben bereits eine Firewall-Regel eingerichtet, die SSH-Verbindungen zulässt, daher sollte es in Ordnung sein, fortzufahren. Reagieren Sie auf die Aufforderung mit y
und drücken Sie ENTER
.
Die Firewall ist jetzt aktiv. Um die Regeln zu sehen, die Sie festgelegt haben, führen Sie diesen Befehl aus:
Der Rest dieses Tutorials behandelt, wie Sie UFW genauer verwenden können, einschließlich des Zulassens und Ablehnens verschiedener Arten von Verbindungen.
Schritt 6 — Andere Verbindungen zulassen
Zu diesem Zeitpunkt sollten Sie alle anderen Verbindungen zulassen, die Ihr Server benötigt, um ordnungsgemäß zu funktionieren. Welche Verbindungen Sie zulassen sollten, hängt 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
gemacht.
Sie können dies auch für HTTP auf Port 80
tun, was unverschlüsselte Webserver verwenden. Um diesen Typ von Verkehr zuzulassen, würden Sie eingeben:
Sie können dies auch für HTTPS auf Port 443
tun, was verschlüsselte Webserver verwenden. Um diesen Typ von Verkehr zuzulassen, würden Sie eingeben:
In beiden Szenarien würde es auch funktionieren, die Ports anzugeben, wobei HTTP 80
und HTTPS 443
sind. Zum Beispiel:
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 erläutert.
Spezifische Portbereiche
Sie können Portbereiche mit UFW angeben. Zum Beispiel verwenden einige Anwendungen mehrere Ports anstelle eines einzelnen Ports.
Zum Beispiel, um X11
-Verbindungen zuzulassen, die die Ports 6000
–6007
verwenden, verwenden Sie diese Befehle:
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, weil 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. Zum Beispiel, wenn Sie Verbindungen von einer bestimmten IP-Adresse zulassen möchten, wie einer Arbeits- oder Heim-IP-Adresse von 203.0.113.4
, müssen Sie von
und dann die IP-Adresse angeben:
Sie können auch einen bestimmten Port angeben, zu dem die IP-Adresse eine Verbindung herstellen darf, indem Sie zu einem beliebigen Port
gefolgt von der Portnummer hinzufügen. Zum Beispiel, wenn Sie 203.0.113.4
erlauben möchten, eine Verbindung zum Port 22
(SSH) herzustellen, verwenden Sie diesen Befehl:
Subnetze
Wenn Sie ein Subnetz von IP-Adressen zulassen möchten, können Sie dies mithilfe der CIDR-Notation angeben, um eine Netzmaske anzugeben. Wenn Sie beispielsweise alle IP-Adressen im Bereich von 203.0.113.1
bis 203.0.113.254
zulassen möchten, können Sie diesen Befehl verwenden:
Ebenso können Sie auch den Zielport angeben, mit dem das Subnetz 203.0.113.0/24
verbunden werden darf. Verwenden Sie erneut Port 22
(SSH) als Beispiel:
Verbindungen mit einem bestimmten Netzwerkinterface
Wenn Sie eine Firewall-Regel erstellen möchten, die nur auf ein bestimmtes Netzwerkinterface angewendet wird, können Sie dies angeben, indem Sie allow in on
gefolgt von dem Namen des Netzwerkinterfaces verwenden.
Es wird hilfreich sein, Ihre Netzwerkinterfaces vor dem Fortfahren nachzuschlagen. Verwenden Sie dazu diesen Befehl:
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 mit dem Namen eth0
hat, könnten Sie den HTTP-Verkehr damit mit diesem Befehl zulassen:
Wenn Sie dies tun, kann Ihr Server HTTP-Anfragen aus dem öffentlichen Internet empfangen.
Oder, wenn Sie einen MySQL-Datenbankserver (Port 3306
) haben möchten, der auf der privaten Netzwerkschnittstelle eth1
auf Verbindungen hört, könnten Sie diesen Befehl verwenden:
Dies würde es anderen Servern in Ihrem privaten Netzwerk ermöglichen, eine Verbindung zu Ihrer MySQL-Datenbank herzustellen.
Schritt 7 — Verbindungen ablehnen
Wenn Sie die Standardrichtlinie für eingehende Verbindungen nicht geändert haben, ist UFW so konfiguriert, dass alle eingehenden Verbindungen abgelehnt 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 basierend auf der Quell-IP-Adresse oder Subnetz ablehnen, 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 alle 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 abzulehnen:
Oder wenn Sie alle Verbindungen von 203.0.113.4
ablehnen möchten, könnten Sie diesen Befehl verwenden:
Jetzt können Sie lernen, wie Sie Löschregeln implementieren.
Schritt 8 — Löschen von Regeln
Es ist genauso wichtig zu wissen, wie man Firewall-Regeln löscht, wie sie zu erstellen. Es gibt zwei Möglichkeiten, festzulegen, welche Regeln gelöscht werden sollen: nach der Regelnummer oder nach der Regel selbst. Dies ist ähnlich wie bei der Festlegung der Regeln beim Erstellen.
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
verfügt über die Option numbered
, die neben jeder Regel Nummern anzeigt:
OutputStatus: active
To Action From
-- ------ ----
[ 1] 22 ALLOW IN 15.15.15.0/24
[ 2] 80 ALLOW IN Anywhere
Wenn Sie entscheiden, dass Sie Regel 2
löschen möchten, die HTTP-Verbindungen auf Port 80
zulässt, können Sie dies im folgenden UFW-Befehl delete
angeben:
Dies zeigt eine Bestätigungsaufforderung an, auf die Sie mit y/n
antworten können. Die Eingabe von y
löscht dann Regel 2
. Beachten Sie, dass Sie bei aktiviertem IPv6 die entsprechende IPv6-Regel ebenfalls löschen möchten.
Nach tatsächlicher Regel
Die Alternative zu 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:
Sie können die Regel auch mit allow 80
anstelle des Dienstnamens angeben:
Diese Methode löscht sowohl IPv4- als auch IPv6-Regeln, sofern sie vorhanden sind.
Schritt 9 — Überprüfen des UFW-Status und der Regeln
Zu jeder Zeit können Sie den Status von UFW mit diesem Befehl überprüfen:
Wenn UFW deaktiviert ist, was der Standard ist, lautet die Ausgabe wie folgt:
OutputStatus: inactive
Wenn UFW aktiv ist, was es sein sollte, wenn Sie Schritt 3 befolgt haben, wird die Ausgabe angeben, dass es aktiv ist, und alle von Ihnen festgelegten Regeln auflisten. Zum Beispiel könnte die Ausgabe etwas wie folgt enthalten, wenn die Firewall so konfiguriert ist, dass sie SSH (Port 22
) Verbindungen von überall zulässt:
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 verwenden zu wollen, können Sie es mit diesem Befehl deaktivieren:
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 beschließen, dass Sie von vorne beginnen möchten, können Sie den Befehl reset verwenden:
Dies deaktiviert UFW und löscht alle zuvor definierten Regeln. Beachten Sie, dass sich die Standardrichtlinien nicht auf ihre ursprünglichen Einstellungen ändern, wenn Sie sie zu einem beliebigen Zeitpunkt geändert haben. Dies sollte Ihnen einen frischen Start mit UFW ermöglichen.
Zusammenfassung
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, während Sie unnötige Verbindungen einschränken. Dies stellt sicher, dass Ihr Server funktionsfähig und sicher ist.
Um mehr über häufige UFW-Konfigurationen zu erfahren, schauen Sie sich dieses Tutorial zu UFW Essentials: Common Firewall Rules and Commands an.
Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-debian