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 zu sichern, und Sie sich 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 Ubuntu v18.04 und höher einrichten.
Voraussetzungen
Wenn Sie Ubuntu Version 16.04 oder älter verwenden, empfehlen wir Ihnen, auf eine neuere Version zu aktualisieren, da Ubuntu für diese Versionen keine Unterstützung mehr bietet. Diese Sammlung von Anleitungen wird Ihnen beim Upgrade Ihrer Ubuntu-Version helfen.
Um diesem Tutorial zu folgen, benötigen Sie:
-
Einen Server, der Ubuntu ausführt, zusammen mit einem nicht-root-Benutzer mit
sudo
-Berechtigungen. Für Anleitungen zum Einrichten dieser Konfiguration 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
- IPv6 aktivieren
- Standardrichtlinien festlegen
- SSH-Verbindungen zulassen
- Aktivieren von UFW
- Alle anderen erforderlichen Verbindungen zulassen
- Verbindungen ablehnen
- Firewall-Regeln löschen
- Überprüfen Sie den UFW-Status und die Regeln
- Wie man die Firewall auf Ubuntu deaktiviert oder zurücksetzt
Schritt 1 — Stellen Sie sicher, dass IPv6 aktiviert ist
In den neueren Versionen von Ubuntu ist IPv6 standardmäßig aktiviert. Das bedeutet in der Praxis, 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
innerhalb der Ausgabe des Statusbefehls von UFW 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 Befehlszeileneditor:
Stellen Sie dann sicher, dass der Wert von IPV6
auf yes
gesetzt ist. Es sollte so aussehen:
Speichern und schließen Sie die Datei. Wenn Sie nano
verwenden, können Sie dies tun, indem Sie CTRL+X
eingeben, dann Y
und ENTER
, um zu bestätigen.
Wenn UFW in einem späteren Schritt dieses Leitfadens aktiviert ist, wird es so konfiguriert, dass sowohl IPv4- als auch IPv6-Firewall-Regeln geschrieben werden.
Schritt 2 — Einrichten der 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 abgelehnt 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, um bestimmte Dienste und Ports zuzulassen, sind als Ausnahmen von dieser allgemeinen Richtlinie enthalten.
Um sicherzustellen, dass Sie den Rest dieses Tutorials problemlos durchführen können, richten Sie jetzt 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 Ablehnen 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 reagieren. Wir werden das als Nächstes untersuchen.
Schritt 3 – SSH-Verbindungen zulassen
Wenn Sie jetzt Ihre UFW-Firewall aktivieren würden, würden alle eingehenden Verbindungen abgelehnt. Das bedeutet, dass Sie Regeln erstellen müssen, die legitime eingehende Verbindungen explizit zulassen – beispielsweise SSH- oder HTTP-Verbindungen –, 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 Benutzern ermöglicht, den externen Zugriff auf einen Dienst schnell 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 Folgendes aus:
OutputRule added
Rule added (v6)
Dadurch werden Firewall-Regeln erstellt, um alle Verbindungen auf Port 22
zuzulassen, der standardmäßig von dem SSH-Daemon gehört wird.
Erlauben von SSH nach Dienstname
Ein weiterer Weg, um UFW zu konfigurieren, um eingehende SSH-Verbindungen zuzulassen, 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
.
Erlauben von SSH nach Portnummer
Alternativ können Sie die entsprechende Regel schreiben, indem Sie den Port anstelle des Anwendungsprofils oder des 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. Zum Beispiel, wenn Ihr SSH-Server auf Port 2222
hört, 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
Ihre Firewall sollte jetzt 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 könnte. 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 die Verwendung von UFW detaillierter, z. B. 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. Die Verbindungen, die Sie zulassen sollten, hängen 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; Sie haben dies bereits für SSH auf Port 22
gemacht. Sie können dies auch für:
- HTTP auf Port 80, den 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
- Apache mit sowohl HTTP als auch HTTPS, mit
sudo ufw allow 'Apache Full'
- Nginx mit sowohl HTTP als auch HTTPS, mit
sudo ufw allow 'Nginx Full'
Vergessen Sie nicht zu überprüfen, welche Anwendungsprofile für Ihren Server verfügbar sind, mit sudo ufw app list
.
Es gibt verschiedene andere Möglichkeiten, Verbindungen zuzulassen, abgesehen von der Angabe eines Ports oder eines bekannten Dienstnamens. Wir werden als nächstes einige davon sehen.
Spezifische Portbereiche
Sie können Portbereiche mit UFW angeben. Einige Anwendungen verwenden mehrere Ports anstelle eines einzelnen Ports.
Zum Beispiel, um X11-Verbindungen zuzulassen, 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, für das die Regeln gelten sollen. Wir haben dies 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
Beim Arbeiten mit UFW können Sie auch IP-Adressen in Ihren Regeln angeben. Wenn Sie beispielsweise Verbindungen von einer bestimmten IP-Adresse wie der Arbeits- oder Heim-IP-Adresse 203.0.113.4
zulassen möchten, müssen Sie den Parameter from
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
den Port 22
(SSH) öffnen möchten, 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 anzugeben. Wenn Sie beispielsweise alle IP-Adressen im Bereich 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 den Port 22
(SSH) als Beispiel:
OutputRule added
Verbindungen mit einem bestimmten Netzwerkinterface
Wenn Sie eine Firewall-Regel erstellen möchten, die nur auf eine bestimmte Netzwerkschnittstelle angewendet wird, können Sie dies tun, indem Sie „Erlauben in auf“ gefolgt vom Namen der Netzwerkschnittstelle angeben.
Sie sollten Ihre Netzwerkschnittstellen überprüfen, bevor Sie fortfahren. 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 werden typischerweise etwas wie eth0
oder enp3s2
genannt.
Wenn Ihr Server also eine öffentliche Netzwerkschnittstelle namens eth0
hat, könnten Sie mit diesem Befehl den HTTP-Verkehr (Port 80
) darauf erlauben:
OutputRule added
Rule added (v6)
Dadurch 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
empfängt, könnten Sie beispielsweise diesen Befehl verwenden:
OutputRule added
Rule added (v6)
Dadurch können andere Server in Ihrem privaten Netzwerk eine Verbindung zu Ihrer MySQL-Datenbank herstellen.
Schritt 6 — Verbindungen ablehnen
Wenn Sie die Standardrichtlinie für eingehende Verbindungen nicht geändert haben, ist UFW so konfiguriert, dass es alle eingehenden Verbindungen ablehnt. 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 Subnetz verweigern, vielleicht weil Sie wissen, dass Ihr Server von dort angegriffen wird. Außerdem, wenn Sie Ihre Standard-Eingangsrichtlinie auf erlauben ändern möchten (was nicht empfohlen wird), müssten Sie Verweigern-Regeln für alle Dienste oder IP-Adressen erstellen, für die Sie keine Verbindungen zulassen möchten.
Um Verweigern-Regeln zu schreiben, können Sie die zuvor beschriebenen Befehle verwenden und erlauben durch verweigern 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 z. B. Port 25
für SMTP-Verkehr, können Sie deny out
gefolgt von der Portnummer verwenden:
OutputRule added
Rule added (v6)
Dadurch wird der ausgehende SMTP-Verkehr auf dem Server blockiert.
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 bestimmen, 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 anhand 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 Zahlen 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 sich entscheiden, die Regelnummer 2 zu löschen, die Verbindungen zum Port 80 (HTTP) zulässt, 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 zulässt. Beachten Sie, dass Sie bei aktiviertem IPv6 auch die entsprechende IPv6-Regel löschen möchten.
Löschen einer UFW-Regel nach Name
Anstelle von Regelnummern können Sie sich auch auf eine Regel durch ihre menschenlesbare Bezeichnung beziehen, die auf dem Typ der Regel basiert (typischerweise allow
oder deny
) und dem Dienstnamen oder der Portnummer, die das Ziel für diese Regel waren, oder dem Anwendungsprofilnamen, falls dieser verwendet wurde. Wenn Sie beispielsweise 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 mittels seines Namens oder Ports verwiesen wurde. Zum Beispiel, wenn Sie zuvor eine Regel gesetzt haben, um HTTP-Verbindungen zuzulassen mit sudo ufw allow http
, so können Sie diese Regel löschen:
OutputRule deleted
Rule deleted (v6)
Weil Dienstnamen austauschbar mit Portnummern sind, wenn Regeln spezifiziert werden, könnten Sie sich auch auf dieselbe Regel beziehen als allow 80
, anstatt allow http
:
OutputRule deleted
Rule deleted (v6)
Beim Löschen von UFW-Regeln nach Namen werden sowohl IPv4- als auch IPv6-Regeln gelöscht, falls diese existieren.
Schritt 8 — Überprüfen des UFW-Status und der Regeln
Zu jedem Zeitpunkt können Sie den Status von UFW mit diesem Befehl überprüfen:
Wenn UFW deaktiviert ist, was standardmäßig der Fall ist, sehen Sie etwas Ähnliches wie dies:
OutputStatus: inactive
Wenn UFW aktiv ist, was der Fall sein sollte, wenn Sie Schritt 3 befolgt haben, wird die Ausgabe anzeigen, dass es aktiv ist und es werden etwaige gesetzte Regeln aufgelistet. Zum Beispiel, wenn die Firewall so konfiguriert ist, SSH (Port 22
) Verbindungen von überall zuzulassen, könnte die Ausgabe so aussehen:
OutputStatus: 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 prüfen möchten, wie UFW die Firewall konfiguriert hat.
Schritt 9 — Deaktivieren oder Zurücksetzen der Firewall
Wenn Sie sich entscheiden, die UFW-Firewall nicht mehr verwenden zu wollen, können Sie sie mit diesem Befehl deaktivieren:
OutputFirewall stopped and disabled on system startup
Alle Regeln, die Sie mit UFW erstellt haben, sind nicht mehr aktiv. 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 entscheiden, dass Sie von vorne beginnen möchten, können Sie den Zurücksetzen-Befehl 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'
Dadurch wird UFW deaktiviert und alle zuvor definierten Regeln gelöscht. Dies gibt Ihnen einen neuen Start mit UFW. Beachten Sie jedoch, dass sich die Standardrichtlinien nicht auf ihre Originalwerte zurücksetzen, wenn Sie sie zu irgendeinem Zeitpunkt geändert haben.
Bereitstellen Sie Ihre Frontend-Anwendungen von GitHub mit dem DigitalOcean App Platform. Lassen Sie DigitalOcean sich auf die Skalierung Ihrer App konzentrieren.
Fazit
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, damit Ihr Server funktionsfähig und sicher ist.
Um mehr über häufigere UFW-Konfigurationen zu erfahren, schauen Sie sich das UFW Essentials: Häufige Firewall-Regeln und Befehle Tutorial an.
Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-ubuntu-22-04