Wie man eine Firewall mit UFW auf Ubuntu einrichtet

Einführung

UFW, oder Uncomplicated Firewall, ist eine Schnittstelle zu iptables, die darauf ausgerichtet ist, den Prozess der Konfiguration einer Feuerwalle zu vereinfachen. Obwohl iptables ein stabiler und flexibler Werkzeug ist, kann es für Anfänger schwer sein, zu erfahren, wie man sie richtig konfiguriert, um seine Netzwerk Sicherheit zu gewähren. Wenn Sie nicht sicher sind, welches Tool Sie verwenden sollen, könnte UFW Ihnen die richtige Wahl sein. Dieser Tutorial zeigt Ihnen, wie Sie mit UFW auf Ubuntu v18.04 und abwärts einen Feuerwall einrichten.

In diesem Tutorial werden Sie erfahren, wie Sie mit UFW auf Ubuntu v18.04 und abwärts einen Feuerwall einrichten.

Voraussetzungen

Wenn Sie Ubuntuversion 16.04 oder darunter benutzen, empfehlen wir Ihnen, eine neuere Version von Ubuntu zu installieren, da Ubuntu keine Support-Informationen für diese Versionen mehr bereitstellt. Diese Sammlung von Guiden helfen Ihnen bei der Upgrade-Prozedur.

Zum Folgen dieses Tutorials brauchen Sie:

  • Ein Server, der Ubuntu verwendet, zusammen mit einem nicht-root-Benutzer mit sudo-Rechten. Für Anleitungen, wie Sie diese einrichten, wählen Sie bitte Ihre Distribution aus dieser Liste und folgen Sie unserer Anleitung zum initialen ServerSetup.

  • 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 des Ubuntu-Firewalls mit UFW

  1. IPv6 aktivieren
  2. Standardrichtlinien einrichten
  3. SSH-Verbindungen erlauben
  4. UFW aktivieren
  5. Andere erforderliche Verbindungen erlauben
  6. Verbindungen ablehnen
  7. Firewall-Rollen und Regeln prüfen
  8. Ubuntu Firewall status und Regeln überprüfen
  9. Ubuntu Firewall deaktivieren oder zurücksetzen

Schritt 1 — Sicherstellen, dass IPv6 aktiviert ist

In den letzten Versionen von Ubuntu ist IPv6 standardmäßig aktiviert. In der Praxis bedeutet das, dass die meisten Firewall-Rules, die auf dem Server hinzugefügt werden, sowohl eine IPv4 als auch eine IPv6 Version enthalten, die durch v6 im Output des UFW Status-Kommandos identifiziert wird. Um zu prüfen, ob IPv6 aktiviert ist, können Sie Ihren UFW Konfigurationsdatei unter /etc/default/ufw öffnen und mit nano oder Ihrem bevorzugten Befehlzeileneditor öffnen:

  1. sudo nano /etc/default/ufw

Sicherheiten Sie sich, dass die Werte für IPV6 auf yes gesetzt ist. Es sollte so aussehen:

/etc/default/ufw excerpt
  1. IPV6=yes

Speichern und schließen Sie die Datei. Wenn Sie nano verwenden, können Sie dies tun, indem Sie CTRL+X, dann Y und ENTER eingeben.

Wenn später in dieser Anleitung UFW aktiviert wird, wird es konfiguriert, sowohl IPv4 als auch IPv6 Firewall-Rules zu schreiben.

Schritt 2 — Einstellung der Standardpolicies

Wenn Sie nur mit UFW beginnen, ist ein gutes erstes Schritt, Ihre Standard-Firewall-Politiken zu überprüfen. Diese Regeln steuerlen, wie Traffic behandelt wird, der keinem anderen Rule explizit zugeordnet ist.

Standardmäßig ist UFW so eingestellt, dass es alle ankommenden Verbindungen abwehrt und alle ausgehenden Verbindungen zulässt. Das bedeutet, dass sich jeder versucht, mit Ihrem Server zu verbinden, während innerhalb des Servers jede Anwendung die Außenwelt erreichen kann. Zusätzliche Regeln, die bestimmte Dienste und Ports zulassen, sind als Ausnahmen zu diesem allgemeinen Policy enthalten.

Um sicher zu sein, dass Sie mit dem Rest dieser Tutorial schrittweise folgen können, setzen Sie nun die Standardsettings für ankommende und ausgehende UFW-Verbindungen fest.

Um den standardmäßigen Einstellungsvorfall für ankommende Verbindungen auf deny zu setzen, führen Sie folgendes aus:

  1. sudo ufw default deny incoming
Output
Default incoming policy changed to 'deny' (be sure to update your rules accordingly)

Um den standardmäßigen Einstellungsvorfall für ausgehende Verbindungen auf allow zu setzen, führen Sie folgendes aus:

  1. sudo ufw default allow outgoing
Output
Default outgoing policy changed to 'allow' (be sure to update your rules accordingly)

Diese Befehle setzen die Voreinstellungen für ankommende und ausgehende Verbindungen auf deny und allow. Diese Firewall-Standards allein genügen möglicherweise für einen privaten Computer, aber Servern benötigen oft eine Antwort auf Anfragen von außen. Wir schauen uns das nächste Mal an.

Schritt 3 — Erlauben von SSH-Anschlüssen

Wenn Sie Ihr UFW-Feuerwall aktivieren, wird es alle ankommenden Verbindungen ablehnen. Das bedeutet, dass Sie potenzielle Anfragen wie SSH oder HTTP-Anfragen erstellen müssen, um mit Ihrem Server verbinden zu können. Wenn Sie einen Cloud-Server verwenden, wahrscheinlich möchten Sie ankommende SSH-Anfragen erlauben, damit Sie mit Ihrem Server verbinden und daraufhin verwalten können.

Die Erstellung eines OpenSSH-UFW-Anwendungsprofils

Nach der Installation registriert sich die meisten Anwendungen, die auf Netzwerkverbindungen beruhen, automatisch einen Anwendungsprofil innerhalb von UFW, damit Benutzer schnell festlegen können, ob externer Zugriff zu einem Dienst erlaubt oder verboten ist. Sie können mit folgendem Befehl überprüfen, welche Profile momentan in UFW registriert sind:

  1. sudo ufw app list
Output
Available applications: OpenSSH

Zum Enablement des OpenSSH-Anwendungsprofils führen Sie den Befehl aus:

  1. sudo ufw allow OpenSSH
Output
Rule added Rule added (v6)

Dieser wird Firewall-Rollen erstellen, die alle Verbindungen auf dem Standardport 22 zulassen, auf dem das SSH-Daemon normalerweise läuft.

Allow SSH durch Service-Name

Eine weitere Methode, um UFW einzustellen, um SSH-Verbindungen zu erlauben, ist Referenzierung des Service-Namens: ssh.

  1. sudo ufw allow ssh
Output
Rule added Rule added (v6)

UFW kennt die Ports und Protokolle, die ein Service benötigt, basierend auf der Datei /etc/services.

Allow SSH by Port Number

Alternativ können Sie die äquivalente Regel durch Angabe des Ports anstelle des Anwendungprofils oder des Dienstnamens festlegen. Zum Beispiel funktioniert dieser Befehl genauso wie die vorherigen Beispiele:

  1. sudo ufw allow 22
Output
Rule added Rule added (v6)

Wenn Sie Ihren SSH-Daemon so konfiguriert haben, dass er einen anderen Port verwendet, müssen Sie den entsprechenden Port angeben. Wenn zum Beispiel Ihr SSH-Server auf Port 2222 horcht, können Sie diesen Befehl verwenden, um Verbindungen auf diesem Port zu erlauben:

  1. sudo ufw allow 2222
Output
Rule added Rule added (v6)

Nun, da Ihre Firewall so konfiguriert ist, dass eingehende SSH-Verbindungen zulässt, können Sie sie aktivieren.

Schritt 4 — UFW aktivieren

Ihre Firewall sollte nun so konfiguriert sein, dass sie SSH-Verbindungen zulässt. Um zu überprüfen, welche Regeln bisher hinzugefügt wurden, auch wenn die Firewall noch deaktiviert ist, können Sie verwenden:

  1. sudo ufw show added
Output
Added user rules (see 'ufw status' for running firewall): ufw allow OpenSSH

Nachdem Sie bestätigt haben, dass Sie eine Regel haben, die eingehende SSH-Verbindungen zulässt, können Sie die Firewall mit folgendem Befehl aktivieren:

  1. sudo ufw enable
Output
Command 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 unterbrechen könnte. Da Sie jedoch bereits eine Firewall-Regel eingerichtet haben, die SSH-Verbindungen zulässt, sollte es in Ordnung sein, fortzufahren. Antworten Sie auf die Aufforderung mit y und drücken Sie ENTER.

Die Firewall ist nun aktiv. Führen Sie den Befehl sudo ufw status verbose aus, um die gesetzten Regeln anzuzeigen. Der Rest dieser Anleitung behandelt, wie man UFW detaillierter verwendet, um verschiedene Arten von Verbindungen zu erlauben oder zu verweigern.

Schritt 5 — Andere Verbindungen erlauben

An diesem Punkt sollten Sie alle weiteren Verbindungen zulassen, die Ihrem Server zur Antwort bereitstellen müssen. Diejenigen, die Sie zulassen sollen, hängen von Ihren speziellen Bedürfnissen ab. Sie kennen schon die Regeln, wie Sie nach einem Anwendungsprofil, einem Dienstnamen oder einer Portnummer verbindungen zulassen können; Sie haben das schon für den SSH-Port 22 gemacht. Sie können auch so machen:

  • HTTP auf Port 80, der für unverschlusselte Web-Server verwendet wird, mit sudo ufw allow http oder sudo ufw allow 80
  • HTTPS auf Port 443, der für verschlusselte Web-Server verwendet wird, mit sudo ufw allow https oder sudo ufw allow 443
  • Apache mit beiden HTTP und HTTPS, mit sudo ufw allow ‘Apache Full’
  • Nginx mit beiden HTTP und HTTPS, mit sudo ufw allow ‘Nginx Full’

Vergessen Sie nicht, zu prüfen, welche Anwendungsprofile Ihnen für Ihr Server verfügbar sind, indem Sie sudo ufw app list ausführen.

Es gibt mehrere andere Möglichkeiten, Verbindungen zu erlauben, neben dem Spezifizieren eines Ports oder bekannten Service-Namens. Wir sehen einige davon im nächsten Schritt an.

Spezielle Portbereiche

Sie können mit UFW Portbereiche angeben. Einige Anwendungen verwenden mehrere Ports anstatt eines einzelnen Ports.

Zum Beispiel, um X11-Verbindungen zu erlauben, die Ports 60006007 verwenden, können Sie diese Befehle verwenden:

  1. sudo ufw allow 6000:6007/tcp
  2. sudo ufw allow 6000:6007/udp

Beim Angeben von Portbereichen mit UFW müssen Sie das Protokoll (tcp oder udp) angeben, auf das die Regeln gelten. Wir haben dies bisher nicht erwähnt, weil die Angabe 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. Zum Beispiel, wenn Sie Verbindungen von einer bestimmten IP-Adresse zulassen möchten, wie z.B. einer Arbeits- oder Heimadresse von 203.0.113.4, müssen Sie den Parameter from verwenden und die IP-Adresse angeben, die Sie zulassen möchten:

  1. sudo ufw allow from 203.0.113.4
Output
Rule added

Sie können auch einen Port angeben, dem die IP-Adresse zugelassen ist, indem Sie to any port folgen und die Portnummer angeben. Zum Beispiel, wenn Sie 203.0.113.4 zulassen möchten, um auf Port 22 (SSH) zu verbinden, verwenden Sie diesen Befehl:

  1. sudo ufw allow from 203.0.113.4 to any port 22
Output
Rule added

Subnetze

Um eine Unternetzadresse zu erlauben, können Sie dies mit dem CIDR-Notation machen. Beispielsweise wollen Sie alle IP-Adressen zwischen 203.0.113.1 und 203.0.113.254 zulassen, können Sie folgendes Kommando verwenden:

  1. sudo ufw allow from 203.0.113.0/24
Output
Rule added

Auch können Sie die Zielportnummer festlegen, über die das Subnetz 203.0.113.0/24 verbinden darf. Wir nehmen hier den Port 22 (SSH) als Beispiel an:

  1. sudo ufw allow from 203.0.113.0/24 to any port 22
Output
Rule added

Zu einem bestimmten Netzwerkinterface verbinden

Wenn Sie einen Firewall-Regel erstellen möchten, die nur auf ein bestimmtes Netzwerkinterface angewendet werden soll, können Sie dies durch die Angabe „allow in on“ gefolgt von dem Namen des Netzwerkinterfaces tun.

Sie könnten sich vor dem Fortfahren die Netzwerkgeräte ausrechnen. Um dies zu tun, verwenden Sie das folgende Kommando:

  1. ip addr
Output Excerpt
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 hervorgehobene Ausgabe zeigt die Netzwerkinterface an. Sie sind normalerweise namens eth0 oder enp3s2 genannt.

So, wenn Ihr Server ein öffentliches Netzwerkinterface namens eth0 hat, können Sie HTTP-Traffic (Port 80) zu ihm mit folgendem Kommando zulassen:

  1. sudo ufw allow in on eth0 to any port 80
Output
Rule added Rule added (v6)

Dies macht es möglich, dass Ihr Server HTTP-Anfragen vom offenen Internet empfängt.

Or, wenn Sie möchten, dass Ihr MySQL-Datenbankserver (Port 3306) auf dem privaten Netzwerkinterface eth1 auf Verbindungen horcht, könnten Sie beispielsweise diesen Befehl verwenden:

  1. sudo ufw allow in on eth1 to any port 3306
Output
Rule added Rule added (v6)

Dies würde anderen Servern auf Ihrem privaten Netzwerk ermöglichen, sich mit Ihrer MySQL-Datenbank zu verbinden.

Schritt 6 — Verbindungen verweigern

Wenn Sie die Standardrichtlinie für eingehende Verbindungen nicht geändert haben, ist UFW so konfiguriert, dass alle eingehenden Verbindungen verweigert werden. Dies vereinfacht im Allgemeinen den Prozess der Erstellung einer sicheren Firewall-Richtlinie, indem Sie Regeln erstellen müssen, die spezifische Ports und IP-Adressen explizit zulassen.

Manchmal möchten Sie jedoch spezifische Verbindungen basierend auf der Quell-IP-Adresse oder dem Subnetz verweigern, vielleicht weil Sie wissen, dass Ihr Server von dort angegriffen wird. Auch, wenn Sie Ihre Standardeingabe-Richtlinie auf erlauben ändern möchten (was nicht empfohlen wird), müssten Sie verweigern-Regeln für alle Dienste oder IP-Adressen erstellen, die Sie nicht zulassen möchten.

Um verweigern-Regeln zu schreiben, können Sie die zuvor beschriebenen Befehle verwenden und allow durch deny ersetzen.

Beispielsweise könnten Sie, um HTTP-Verbindungen zu verweigern, diesen Befehl verwenden:

  1. sudo ufw deny http
Output
Rule added Rule added (v6)

Oder wenn Sie alle Verbindungen von 203.0.113.4 verweigern möchten, könnten Sie diesen Befehl verwenden:

  1. sudo ufw deny from 203.0.113.4
Output
Rule added

Um in einigen Fällen auch die Verbindungen aus dem Server heraus zu blockieren, können Sie den Befehl deny out mit der Portnummer verwenden:

  1. sudo ufw deny out 25
Output
Rule added Rule added (v6)

Dies blockiert alle ausgehende SMTP-Traffic auf dem Server.

Schritt 7: Die Regeln loschen

Wie schon erwähnt ist es ebenso wichtig, wie das Erstellen, zu wissen, wie man Regeln löscht. Es gibt zwei verschiedene Möglichkeiten, um festzustellen, welche Regeln gelöscht werden sollen: durch die Nummer der Regel oder durch ihren menschlichen Lesbarkeitsnamen (analog zur Bezeichnung, unter der sie erstellt wurden).

Löschen einer UFW-Regel nach der Nummer

Um eine UFW-Regel nach ihrem Nummer zu löschen, erstellen Sie zuerst einen nummerierten Liste aller Ihrer Feuerwallregeln. Der Befehl ufw status hat eine Option, bei der jede Regel eine Nummer angezeigt wird, wie hier beispielsweise gezeigt:

  1. sudo ufw status numbered
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 die Regel mit der Nummer 2 loschen möchten, die den Port 80 (HTTP) zulässt, können Sie dies in einem UFW-Befehl wie folgt spezifizieren:

  1. sudo ufw delete 2
Output
Deleting: allow 80 Proceed with operation (y|n)? y Rule deleted

Dies werde Sie zu einer Bestätigung prompten und die Regel 2, die HTTP-Verbindungen zulässt, löschen. Notige, dass Sie falls IPv6 aktiviert ist, auch die entsprechende IPv6-Regel loschen sollten.

Die Deletion einer UFW-Regel nach Namen

Anstatt die Regeln mit Nummern zu verwenden, können Sie auch auf eine Regel zurückgreifen, indem Sie den menschenlesbaren Bezeichner verwenden, der aufgrund des Typus der Regel (normalerweise allow oder deny) und dem Service-Namen oder Portnummer basiert, auf welchem diese Regel eingestellt wurde. Wenn Sie beispielsweise eine allow-Regel für einen Applikationsprofil namens Apache Full loschen möchten, die zuvor aktiviert war, können Sie folgendes benutzen:

  1. sudo ufw delete allow "Apache Full"
Output
Rule deleted Rule deleted (v6)

Die delete-Befehle funktioniert ähnlich für Regeln, die durch den Service-Namen oder Portnummer festgelegt wurden. Zum Beispiel, wenn Sie vorher eine Regel setzten, die HTTP-Verbindungen mit sudo ufw allow http erlaubte, so könnten Sie diese Regel wie folgt löschen:

  1. sudo ufw delete allow http
Output
Rule deleted Rule deleted (v6)

Aufgrund der Interchangeabilität zwischen Service-Namen und Portnummern bei der Festlegung von Regeln können Sie auch auf dieselbe Regel als allow 80 verreferen, statt als allow http.

  1. sudo ufw delete allow 80
Output
Rule deleted Rule deleted (v6)

Wenn Sie eine Regel nach Namen loschen, werden sowohl IPv4- als auch IPv6-Rules gelöscht, falls sie existieren.

Schritt 8 — Überprüfen der UFW-Status und Regeln

Sie können jederzeit den Status von UFW mit dem folgenden Befehl überprüfen:

  1. sudo ufw status verbose

Wenn UFW deaktiviert ist, was standardmäßig der Fall ist, sieht das etwas wie dieses aus:

Output
Status: inactive

Wenn UFW aktiviert ist, was empfohlen ist, wenn Sie Schritt 3 befolgen, zeigt die Ausgabe an, dass es aktiv ist und zeigt eine Liste der festgelegten Regeln an. Beispielsweise wird es so aussehen, wenn die Firewall auf Anfragen von beliebigen IP-Adressen über Port 22 (SSH-Anfragen) zulässt:

Output
Status: active Logging: on (low) Default: deny (incoming), allow (outgoing), disabled (routed) New profiles: skip To Action From -- ------ ---- 22/tcp ALLOW IN Anywhere

Benutzen Sie den Befehl status, um zu erkennen, wie UFW die Firewall konfiguriert hat.

Schritt 9 — Deaktivieren oder Resetten des Feuwalls

Wenn Sie entscheiden, dass Sie UFW nicht mehr benötigen, können Sie es mit dem folgenden Befehl deaktivieren:

  1. sudo ufw disable
Output
Firewall stopped and disabled on system startup

Alle durch UFW erstellten Regeln werden nicht mehr aktiv sein. Sie können jederzeit mit sudo ufw enable aktivieren, falls Sie später darauf zurückkehren möchten.

Falls Sie bereits UFW-Regeln konfiguriert haben, aber entscheiden, dass Sie beginnen wollen, können Sie den reset-Befehl verwenden:

  1. sudo ufw reset
Output
Resetting 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 wird UFW deaktivieren und alle bisher definierten Regeln löschen. Dies sollte Ihnen einen neuen Start mit UFW geben. Denken Sie an, dass die Standardpolicies nicht wieder zu ihrem ursprünglichen Zustand geändert werden, wenn Sie sie irgendwann einmal geändert haben.

Deploy your frontend applications from GitHub using DigitalOcean App Platform. Let DigitalOcean handle the scaling of your app.

Schluss

Ihre Firewall ist nun konfiguriert, um SSH-Anwendungen zu erlauben. Stellen Sie sicher, dass Ihr Server auch die notigen Einheiten für seine Funktionsfähigkeit und Sicherheit zulässt, während Sie unnotige Anwendungen einlimitieren, so dass Ihr Server funktioniert und sicher ist.

Um mehr über übliche UFW-Konfigurationen zu lernen, schauen Sie sich bitte den Tutorial UFW Essentials: Common Firewall Rules and Commands an.

Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-ubuntu-20-04