Einführung
UFW oder Uncomplicated Firewall ist eine Benutzeroberfläche für iptables
, die darauf abzielt, den Prozess der Konfiguration einer Firewall zu vereinfachen. Während iptables
ein solides und flexibles Werkzeug ist, kann es für Anfänger schwierig sein zu lernen, wie man es richtig verwendet, um eine Firewall zu konfigurieren. Wenn Sie damit beginnen möchten, Ihr Netzwerk abzusichern, und Sie 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 Ubuntu v18.04 und höher einrichten.
Voraussetzungen
Wenn Sie Ubuntu Version 16.04 oder niedriger verwenden, empfehlen wir Ihnen, auf eine neuere Version zu aktualisieren, da Ubuntu für diese Versionen keinen Support mehr bietet. Diese Sammlung von Anleitungen wird Ihnen beim Aktualisieren Ihrer Ubuntu-Version helfen.
Um diesem Tutorial zu folgen, benötigen Sie:
-
Einen Server, der Ubuntu ausführt, sowie einen Nicht-Root-Benutzer mit
sudo
-Berechtigungen. Zur Anleitung, wie Sie diese einrichten, wählen Sie bitte Ihre Distribution aus dieser Liste und folgen Sie unserer Anleitung zum Initial Setup des Servers. -
UFW ist standardmäßig auf Ubuntu installiert. Wenn es aus irgendeinem Grund deinstalliert wurde, können Sie es mit
sudo apt install ufw
installieren.
Einrichten der Ubuntu-Firewall mit UFW
- Aktivieren von IPv6
- Standardrichtlinien festlegen
- SSH-Verbindungen zulassen
- Aktivieren von UFW
- Andere erforderliche Verbindungen zulassen
- Verbindungen verweigern
- Löschen von Firewall-Regeln
- Überprüfen des UFW-Status und der Regeln
- So deaktivieren oder setzen Sie die Firewall auf Ubuntu zurück
Schritt 1 – Stellen Sie sicher, dass IPv6 aktiviert ist
In neueren Versionen von Ubuntu ist IPv6 standardmäßig aktiviert. In der Praxis bedeutet dies, dass die meisten Firewall-Regeln, die auf dem Server hinzugefügt werden, sowohl eine IPv4- als auch eine IPv6-Version enthalten, wobei letztere durch v6
in der Ausgabe des UFW-Statusbefehls identifiziert wird. Um sicherzustellen, dass IPv6 aktiviert ist, können Sie Ihre UFW-Konfigurationsdatei unter /etc/default/ufw
überprüfen. Öffnen Sie diese Datei mit nano
oder Ihrem bevorzugten Befehlszeilen-Editor:
Stellen Sie dann sicher, dass der Wert von IPV6
auf ja
gesetzt ist. Es sollte so aussehen:
Speichern und schließen Sie die Datei. Wenn Sie nano
verwenden, können Sie dies tun, indem Sie STRG+X
eingeben, dann Y
und EINGABE
, um zu bestätigen.
Wenn UFW in einem späteren Schritt dieses Handbuchs aktiviert ist, wird es so konfiguriert, dass sowohl IPv4- als auch IPv6-Firewall-Regeln geschrieben werden.
Schritt 2 — Einrichten von Standardrichtlinien
Wenn Sie gerade erst mit UFW beginnen, ist ein guter erster Schritt, Ihre Standard-Firewall-Richtlinien zu überprüfen. Diese Regeln steuern, wie der Datenverkehr behandelt wird, der nicht explizit mit anderen Regeln übereinstimmt.
Standardmäßig ist UFW so eingestellt, dass alle eingehenden Verbindungen blockiert und alle ausgehenden Verbindungen zugelassen werden. Dies 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. Zusätzliche Regeln zur Zulassung bestimmter Dienste und Ports sind als Ausnahmen von dieser allgemeinen Richtlinie enthalten.
Um sicherzustellen, dass Sie dem Rest dieses Tutorials folgen können, richten Sie nun Ihre UFW-Standardrichtlinien für eingehenden und ausgehenden Datenverkehr ein.
Um die Standard-UFW-Eingangsrichtlinie auf deny
festzulegen, führen Sie Folgendes aus:
OutputDefault incoming policy changed to 'deny'
(be sure to update your rules accordingly)
Um die Standard-UFW-Ausgangsrichtlinie auf allow
festzulegen, führen Sie Folgendes aus:
OutputDefault outgoing policy changed to 'allow'
(be sure to update your rules accordingly)
Diese Befehle setzen die Standards auf das Blockieren eingehender und das Zulassen ausgehender Verbindungen. Diese Firewall-Standards allein könnten für einen persönlichen Computer ausreichen, aber Server müssen typischerweise auf eingehende Anfragen von externen Benutzern antworten. Wir werden uns als Nächstes damit befassen.
Schritt 3 – SSH-Verbindungen zulassen
Wenn Sie Ihre UFW-Firewall jetzt aktivieren würden, würden alle eingehenden Verbindungen abgelehnt. Das bedeutet, dass Sie Regeln erstellen müssen, die legitime eingehende Verbindungen explizit zulassen – SSH- oder HTTP-Verbindungen zum Beispiel -, wenn Sie möchten, dass Ihr Server auf diese Arten von Anfragen reagiert. 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.
Zulassen des OpenSSH UFW-Anwendungsprofils
Nach der Installation registrieren die meisten Anwendungen, die auf Netzwerkverbindungen angewiesen sind, ein Anwendungsprofil in UFW, das es Benutzern ermöglicht, schnell den externen Zugriff auf einen Dienst zuzulassen oder abzulehnen. Sie können überprüfen, welche Profile derzeit in UFW registriert sind, mit:
OutputAvailable applications:
OpenSSH
Um das OpenSSH-Anwendungsprofil zu aktivieren, führen Sie aus:
OutputRule added
Rule added (v6)
Dadurch werden Firewall-Regeln erstellt, um alle Verbindungen auf Port 22
zuzulassen, der der Port ist, auf dem der SSH-Daemon standardmäßig lauscht.
Zulassen von SSH nach Dienstname
Ein weiterer Weg, um UFW so zu konfigurieren, dass eingehende SSH-Verbindungen zugelassen werden, besteht darin, auf seinen Dienstnamen zu verweisen: ssh
.
OutputRule added
Rule added (v6)
UFW weiß, welche Ports und Protokolle ein Dienst verwendet, basierend auf der Datei /etc/services
.
Zulassen von SSH nach Portnummer
Alternativ können Sie die entsprechende Regel erstellen, indem Sie den Port anstelle des Anwendungsprofils oder Dienstnamens angeben. Zum Beispiel funktioniert dieser Befehl genauso wie die vorherigen Beispiele:
OutputRule added
Rule added (v6)
Wenn Sie Ihren SSH-Daemon konfiguriert haben, um einen anderen Port zu verwenden, müssen Sie den entsprechenden Port angeben. Wenn Ihr SSH-Server beispielsweise auf Port 2222
lauscht, können Sie diesen Befehl verwenden, um Verbindungen auf diesem Port zuzulassen:
OutputRule added
Rule added (v6)
Jetzt, da Ihre Firewall so konfiguriert ist, dass eingehende SSH-Verbindungen zugelassen werden, können Sie sie aktivieren.
Schritt 4 — Aktivieren von UFW
Ihr Firewall sollte nun so konfiguriert sein, dass SSH-Verbindungen zugelassen werden. Um zu überprüfen, welche Regeln bisher hinzugefügt wurden, auch wenn die Firewall noch deaktiviert ist, können Sie Folgendes verwenden:
OutputAdded user rules (see 'ufw status' for running firewall):
ufw allow OpenSSH
Nach Bestätigung, dass eine Regel zum Zulassen eingehender SSH-Verbindungen vorhanden ist, können Sie die Firewall aktivieren mit:
OutputCommand may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup
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. Antworten Sie auf die Aufforderung mit y
und drücken Sie ENTER
.
Die Firewall ist jetzt aktiv. Führen Sie den Befehl sudo ufw status verbose
aus, um die festgelegten Regeln anzuzeigen. Der Rest dieses Tutorials behandelt, wie Sie UFW detaillierter verwenden können, wie das Zulassen oder Verweigern verschiedener Arten von Verbindungen.
Schritt 5 — Andere Verbindungen zulassen
Zu diesem Zeitpunkt sollten Sie alle anderen Verbindungen zulassen, auf die Ihr Server reagieren muss. Welche Verbindungen Sie zulassen sollten, hängt von Ihren spezifischen Anforderungen ab. Sie wissen bereits, wie Sie Regeln schreiben können, die Verbindungen basierend auf einem Anwendungsprofil, einem Dienstnamen oder einem Port zulassen; dies haben Sie bereits für SSH auf Port 22
getan. Sie können dies auch für:
- HTTP auf Port 80, was unverschlüsselte Webserver verwenden, mit
sudo ufw allow http
odersudo ufw allow 80
- HTTPS auf Port 443, den verschlüsselte Webserver verwenden, mit
sudo ufw allow https
odersudo ufw allow 443
aktivieren. - Apache mit sowohl HTTP als auch HTTPS verwenden, mit
sudo ufw allow ‘Apache Full’
ermöglichen. - Nginx mit sowohl HTTP als auch HTTPS verwenden, mit
sudo ufw allow ‘Nginx Full’
freigeben.
Vergessen Sie nicht zu überprüfen, welche Anwendungsprofile für Ihren Server verfügbar sind, mit sudo ufw app list
.
Es gibt mehrere andere Möglichkeiten, Verbindungen zu erlauben, neben der Angabe eines Ports oder eines bekannten Dienstnamens. Wir werden einige davon als nächstes sehen.
Spezifische Portbereiche
Sie können Portbereiche mit UFW angeben. Einige Anwendungen verwenden mehrere Ports anstelle eines einzelnen Ports.
Zum Beispiel, um X11-Verbindungen zu erlauben, die die Ports 6000
bis 6007
verwenden, verwenden Sie diese Befehle:
Beim Angeben von Portbereichen mit UFW müssen Sie das Protokoll (tcp
oder udp
) angeben, auf das die Regeln angewendet werden sollen. Wir haben dies bisher 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
Beim Arbeiten mit UFW können Sie auch IP-Adressen innerhalb Ihrer Regeln angeben. Wenn Sie beispielsweise Verbindungen von einer bestimmten IP-Adresse zulassen möchten, wie einer Arbeits- oder Heim-IP-Adresse von 203.0.113.4
, müssen Sie den from
-Parameter verwenden und dann die IP-Adresse angeben, die Sie zulassen möchten:
OutputRule added
Sie können auch einen Port angeben, zu dem die IP-Adresse eine Verbindung herstellen darf, indem Sie to any port
gefolgt von der Portnummer hinzufügen. Wenn Sie beispielsweise 203.0.113.4
erlauben möchten, eine Verbindung zum Port 22
(SSH) herzustellen, verwenden Sie diesen Befehl:
OutputRule added
Subnetze
Wenn Sie ein Subnetz von IP-Adressen zulassen möchten, können Sie dies mithilfe der CIDR-Notation angeben, um eine Netzmaske zu spezifizieren. Wenn Sie beispielsweise alle IP-Adressen von 203.0.113.1
bis 203.0.113.254
zulassen möchten, könnten Sie diesen Befehl verwenden:
OutputRule added
Ebenso können Sie auch den Zielport angeben, zu dem das Subnetz 203.0.113.0/24
eine Verbindung herstellen darf. Auch hier verwenden wir Port 22
(SSH) als Beispiel:
OutputRule added
Verbindungen zu einem bestimmten Netzwerkinterface
Wenn Sie eine Firewall-Regel erstellen möchten, die nur für eine bestimmte Netzwerkschnittstelle gilt, können Sie dies tun, indem Sie „Erlauben Sie auf“ gefolgt vom Namen der Netzwerkschnittstelle angeben.
Bevor Sie fortfahren, möchten Sie möglicherweise Ihre Netzwerkschnittstellen nachschlagen. Verwenden Sie dazu diesen Befehl:
Output Excerpt2: 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 haben in der Regel Namen wie eth0
oder enp3s2
.
Wenn Ihr Server beispielsweise eine öffentliche Netzwerkschnittstelle namens eth0
hat, könnten Sie mit diesem Befehl den HTTP-Verkehr (Port 80
) darauf zulassen:
OutputRule added
Rule added (v6)
Auf diese Weise kann Ihr Server HTTP-Anfragen aus dem öffentlichen Internet empfangen.
Oder wenn Sie möchten, dass Ihr MySQL-Datenbankserver (Port 3306
) Verbindungen über die private Netzwerkschnittstelle eth1
akzeptiert, könnten Sie beispielsweise diesen Befehl verwenden:
OutputRule added
Rule added (v6)
Dies würde es anderen Servern in Ihrem privaten Netzwerk ermöglichen, eine Verbindung zu Ihrer MySQL-Datenbank herzustellen.
Schritt 6 — Verbindungen ablehnen
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, indem Sie Regeln erstellen müssen, die explizit bestimmte Ports und IP-Adressen durchlassen.
Jedoch möchten Sie manchmal bestimmte Verbindungen basierend auf der Quell-IP-Adresse oder dem Subnetz ablehnen, vielleicht weil Sie wissen, dass Ihr Server von dort angegriffen wird. Wenn Sie auch Ihre Standard-Eingangsrichtlinie auf erlauben ändern möchten (was nicht empfohlen wird), müssten Sie 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 zuvor beschriebenen Befehle verwenden und allow durch deny ersetzen.
Zum Beispiel könnten Sie diesen Befehl verwenden, um HTTP-Verbindungen zu verweigern:
OutputRule added
Rule added (v6)
Oder wenn Sie alle Verbindungen von 203.0.113.4
verweigern möchten, könnten Sie diesen Befehl verwenden:
OutputRule added
In einigen Fällen möchten Sie möglicherweise auch ausgehende Verbindungen vom Server blockieren. Um allen Benutzern die Verwendung eines Ports auf dem Server zu verweigern, wie zum Beispiel Port 25
für SMTP-Verkehr, können Sie deny out
gefolgt von der Portnummer verwenden:
OutputRule added
Rule added (v6)
Dies blockiert alle ausgehenden SMTP-Verkehr auf dem Server.
Schritt 7 — Löschen von Regeln
Zu wissen, wie man Firewall-Regeln löscht, ist genauso wichtig wie zu wissen, wie man sie erstellt. Es gibt zwei verschiedene Möglichkeiten, zu spezifizieren, welche Regeln gelöscht werden sollen: nach Regelnummer oder nach ihrer menschenlesbaren Bezeichnung (ähnlich wie die Regeln angegeben wurden, als sie erstellt wurden).
Löschen einer UFW-Regel nach Nummer
Um eine UFW-Regel nach ihrer Nummer zu löschen, möchten Sie zunächst eine nummerierte Liste aller Ihrer Firewall-Regeln erhalten. Der UFW-Statusbefehl hat eine Option, um neben jeder Regel Nummern anzuzeigen, wie hier demonstriert:
Numbered Output:Status: active
To Action From
-- ------ ----
[ 1] 22 ALLOW IN 15.15.15.0/24
[ 2] 80 ALLOW IN Anywhere
Wenn Sie entscheiden, dass Sie Regelnummer 2 löschen möchten, die die Verbindungen für Port 80 (HTTP) ermöglicht, können Sie dies in einem UFW-Löschbefehl wie folgt angeben:
OutputDeleting:
allow 80
Proceed with operation (y|n)? y
Rule deleted
Dies fordert eine Bestätigung an und löscht dann Regel 2, die HTTP-Verbindungen ermöglicht. Beachten Sie, dass Sie bei aktiviertem IPv6 auch die entsprechende IPv6-Regel löschen möchten.
Löschen einer UFW-Regel nach Namen
Anstatt Regelnummern zu verwenden, können Sie sich auch auf eine Regel anhand ihrer menschenlesbaren Bezeichnung beziehen, die auf dem Typ der Regel (typischerweise allow
oder deny
) und dem Dienstnamen oder der Portnummer basiert, die das Ziel für diese Regel waren, oder dem Anwendungsprofilnamen, falls dieser verwendet wurde. Zum Beispiel, wenn Sie eine allow
-Regel für ein Anwendungsprofil namens Apache Full
löschen möchten, das zuvor aktiviert wurde, können Sie Folgendes verwenden:
OutputRule deleted
Rule deleted (v6)
Der Befehl delete
funktioniert genauso für Regeln, die erstellt wurden, indem auf einen Dienst per Name oder Port verwiesen wurde. Zum Beispiel, wenn du zuvor eine Regel erstellt hast, um HTTP-Verbindungen zuzulassen mit sudo ufw allow http
, so könntest du diese Regel löschen:
OutputRule deleted
Rule deleted (v6)
Weil Dienstnamen austauschbar mit Portnummern sind, wenn Regeln spezifiziert werden, könntest du dieselbe Regel auch als allow 80
statt allow http
bezeichnen:
OutputRule deleted
Rule deleted (v6)
Beim Löschen von UFW-Regeln nach Name werden sowohl IPv4- als auch IPv6-Regeln gelöscht, falls sie existieren.
Schritt 8 — Überprüfen des UFW-Status und der Regeln
Zu jeder Zeit kannst du den Status von UFW mit diesem Befehl überprüfen:
Wenn UFW deaktiviert ist, was standardmäßig der Fall ist, wirst du etwas Ähnliches wie dies sehen:
OutputStatus: inactive
Wenn UFW aktiv ist, was der Fall sein sollte, wenn du Schritt 3 befolgt hast, wird die Ausgabe anzeigen, dass es aktiv ist und es wird jede gesetzte Regel auflisten. Zum Beispiel, wenn die Firewall eingestellt ist, um SSH-Verbindungen (Port 22
) von überall zuzulassen, könnte die Ausgabe etwas wie folgt aussehen:
OutputStatus: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
-- ------ ----
22/tcp ALLOW IN Anywhere
Verwende den Befehl status
, wenn du überprüfen möchtest, wie UFW die Firewall konfiguriert hat.
Schritt 9 — Firewall deaktivieren oder zurücksetzen
Wenn Sie sich entscheiden, die UFW-Firewall nicht zu verwenden, können Sie sie mit diesem Befehl deaktivieren:
OutputFirewall stopped and disabled on system startup
Alle Regeln, die Sie mit UFW erstellt haben, werden nicht mehr aktiv sein. Sie können jederzeit sudo ufw enable
ausführen, wenn Sie sie später aktivieren müssen.
Wenn Sie bereits UFW-Regeln konfiguriert haben, aber beschließen, von vorne zu beginnen, können Sie den Rücksetzbefehl verwenden:
OutputResetting all rules to installed defaults. This may disrupt existing ssh
connections. Proceed with operation (y|n)? y
Backing up 'user.rules' to '/etc/ufw/user.rules.20210729_170353'
Backing up 'before.rules' to '/etc/ufw/before.rules.20210729_170353'
Backing up 'after.rules' to '/etc/ufw/after.rules.20210729_170353'
Backing up 'user6.rules' to '/etc/ufw/user6.rules.20210729_170353'
Backing up 'before6.rules' to '/etc/ufw/before6.rules.20210729_170353'
Backing up 'after6.rules' to '/etc/ufw/after6.rules.20210729_170353'
Dies deaktiviert UFW und löscht alle zuvor definierten Regeln. Dadurch erhalten Sie einen frischen Start mit UFW. Beachten Sie, dass sich die Standardrichtlinien nicht auf ihre ursprünglichen Einstellungen ändern, wenn Sie sie zu irgendeinem Zeitpunkt geändert haben.
Bereitstellen Sie Ihre Frontend-Anwendungen von GitHub mit dem DigitalOcean App Platform. Lassen Sie DigitalOcean die Skalierung Ihrer App übernehmen.
Fazit
Ihre Firewall ist jetzt so konfiguriert, dass (mindestens) SSH-Verbindungen zugelassen werden. Stellen Sie sicher, dass Sie alle anderen eingehenden Verbindungen zulassen, die Ihr Server benötigt, während Sie unnötige Verbindungen einschränken, damit Ihr Server funktionsfähig und sicher ist.
Um mehr über gängige UFW-Konfigurationen zu erfahren, schauen Sie sich das Tutorial UFW Essentials: Häufige Firewall-Regeln und Befehle an.
Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-ubuntu