So richten Sie eine Firewall mit UFW unter Ubuntu ein 18.04

Eine frühere Version dieses Tutorials wurde vonHazel Virdó geschrieben

Einführung

UFW oder Uncomplicated Firewall ist eine Schnittstelle zuiptables, die darauf abzielt, die Konfiguration einer Firewall zu vereinfachen. Währendiptables ein solides und flexibles Tool ist, kann es für Anfänger schwierig sein, zu lernen, wie man es verwendet, um eine Firewall richtig zu konfigurieren. Wenn Sie mit der Sicherung Ihres Netzwerks beginnen möchten und nicht sicher sind, welches Tool Sie verwenden sollen, ist UFW möglicherweise die richtige Wahl für Sie.

Dieses Tutorial zeigt Ihnen, wie Sie eine Firewall mit UFW unter Ubuntu 18.04 einrichten.

Voraussetzungen

Um diesem Tutorial zu folgen, benötigen Sie:

UFW ist standardmäßig auf Ubuntu installiert. Wenn es aus irgendeinem Grund deinstalliert wurde, können Sie es mitsudo apt install ufw installieren.

[[Schritt-1 -—- Verwenden von IPv6-mit-UFW-optional]] == Schritt 1 - Verwenden von IPv6 mit UFW (optional)

Dieses Tutorial wurde unter Berücksichtigung von IPv4 geschrieben, funktioniert jedoch auch für IPv6, sofern Sie es aktivieren. Wenn auf Ihrem Ubuntu-Server IPv6 aktiviert ist, stellen Sie sicher, dass UFW für die Unterstützung von IPv6 konfiguriert ist, damit neben IPv4 auch Firewall-Regeln für IPv6 verwaltet werden. Öffnen Sie dazu die UFW-Konfiguration mitnano oder Ihrem bevorzugten Editor.

sudo nano /etc/default/ufw

Stellen Sie dann sicher, dass der Wert vonIPV6yes ist. Es sollte so aussehen:

/etc/default/ufw excerpt

IPV6=yes

Speichern und schließen Sie die Datei. Wenn UFW jetzt aktiviert ist, wird es so konfiguriert, dass sowohl IPv4- als auch IPv6-Firewallregeln geschrieben werden. Bevor Sie UFW aktivieren, sollten Sie jedoch sicherstellen, dass Ihre Firewall so konfiguriert ist, dass Sie eine Verbindung über SSH herstellen können. Beginnen wir mit dem Festlegen der Standardrichtlinien.

[[Schritt-2 - Einrichten von Standardrichtlinien]] == Schritt 2 - Einrichten von Standardrichtlinien

Wenn Sie gerade erst mit Ihrer Firewall beginnen, müssen Sie als Erstes Ihre Standardrichtlinien definieren. Diese Regeln steuern, wie Datenverkehr behandelt wird, der nicht explizit mit anderen Regeln übereinstimmt. Standardmäßig verweigert UFW alle eingehenden Verbindungen und lässt alle ausgehenden Verbindungen zu. 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.

Setzen Sie Ihre UFW-Regeln auf die Standardeinstellungen zurück, damit Sie dieses Lernprogramm mitverfolgen können. Verwenden Sie die folgenden Befehle, um die von UFW verwendeten Standardeinstellungen festzulegen:

sudo ufw default deny incoming
sudo ufw default allow outgoing

Diese Befehle setzen die Standardeinstellungen so, dass eingehende und ausgehende Verbindungen verweigert werden. Diese Firewall-Standardeinstellungen allein können für einen Personalcomputer ausreichen, Server müssen jedoch normalerweise auf eingehende Anforderungen von externen Benutzern reagieren. Wir werden uns das als nächstes ansehen.

[[Schritt 3 - Zulassen von SSH-Verbindungen]] == Schritt 3 - Zulassen von SSH-Verbindungen

Wenn wir unsere UFW-Firewall jetzt aktivieren würden, würden alle eingehenden Verbindungen verweigert. Das bedeutet, dass wir Regeln erstellen müssen, die ausdrücklich legitime eingehende Verbindungen zulassen - beispielsweise SSH- oder HTTP-Verbindungen -, wenn unser Server auf diese Art von Anforderungen antworten soll. Wenn Sie einen Cloud-Server verwenden, möchten Sie wahrscheinlich eingehende SSH-Verbindungen zulassen, damit Sie eine Verbindung zu Ihrem Server herstellen und diesen verwalten können.

Mit dem folgenden Befehl können Sie Ihren Server so konfigurieren, dass eingehende SSH-Verbindungen zugelassen werden:

sudo ufw allow ssh

Dadurch werden Firewall-Regeln erstellt, die alle Verbindungen an Port22 zulassen. Dies ist der Port, den der SSH-Dämon standardmäßig überwacht. UFW weiß, was Portallow sshbedeutet, da er in der/etc/services-Datei als Dienst aufgeführt ist.

Wir können die äquivalente Regel jedoch tatsächlich schreiben, indem wir den Port anstelle des Dienstnamens angeben. Dieser Befehl funktioniert zum Beispiel genauso wie der obige:

sudo ufw allow 22

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 Port2222 überwacht, können Sie diesen Befehl verwenden, um Verbindungen an diesem Port zuzulassen:

sudo ufw allow 2222

Nachdem Ihre Firewall so konfiguriert ist, dass eingehende SSH-Verbindungen zugelassen werden, können wir sie aktivieren.

[[Schritt-4 -—- aktivieren-ufw]] == Schritt 4 - Aktivieren von UFW

Verwenden Sie diesen Befehl, um UFW zu aktivieren:

sudo ufw enable

Sie erhalten eine Warnung, dass der Befehl möglicherweise vorhandene SSH-Verbindungen unterbricht. Wir haben bereits eine Firewall-Regel eingerichtet, die SSH-Verbindungen zulässt, daher sollte es in Ordnung sein, fortzufahren. Antworten Sie auf die Eingabeaufforderung mity und drücken SieENTER.

Die Firewall ist jetzt aktiv. Führen Sie den Befehlsudo ufw status verbose aus, um die festgelegten Regeln anzuzeigen. Der Rest dieses Tutorials befasst sich ausführlicher mit der Verwendung von UFW, z. B. dem Zulassen oder Ablehnen verschiedener Arten von Verbindungen.

[[Schritt 5 - Andere Verbindungen zulassen]] == Schritt 5 - Andere Verbindungen zulassen

Zu diesem Zeitpunkt sollten Sie alle anderen Verbindungen zulassen, auf die Ihr Server antworten muss. Die Verbindungen, die Sie zulassen sollten, hängen von Ihren spezifischen Anforderungen ab. Glücklicherweise wissen Sie bereits, wie Sie Regeln schreiben, die Verbindungen basierend auf einem Dienstnamen oder Port zulassen. Wir haben dies bereits für SSH auf Port22 getan. Sie können dies auch tun für:

  • HTTP an Port 80, das von unverschlüsselten Webservern verwendet wird, mitsudo ufw allow http odersudo ufw allow 80

  • HTTPS auf Port 443, den verschlüsselte Webserver mitsudo ufw allow https odersudo ufw allow 443 verwenden

Es gibt mehrere andere Möglichkeiten, andere Verbindungen zuzulassen, abgesehen von der Angabe eines Ports oder eines bekannten Dienstes.

Spezifische Portbereiche

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

Verwenden Sie beispielsweise die folgenden Befehle, um X11-Verbindungen zuzulassen, die die Ports6000 -6007 verwenden:

sudo ufw allow 6000:6007/tcp
sudo ufw allow 6000:6007/udp

Wenn Sie Portbereiche mit UFW angeben, müssen Sie das Protokoll (tcp oderudp) angeben, für das die Regeln gelten sollen. Wir haben dies zuvor noch nicht erwähnt, da die nicht automatische Angabe des Protokolls 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, z. B. einer Arbeits- oder Privat-IP-Adresse von203.0.113.4, müssen Siefrom und dann die IP-Adresse angeben:

sudo ufw allow from 203.0.113.4

Sie können auch einen bestimmten Port angeben, zu dem die IP-Adresse eine Verbindung herstellen darf, indem Sieto any port gefolgt von der Portnummer hinzufügen. Wenn Sie beispielsweise zulassen möchten, dass203.0.113.4 eine Verbindung zu Port22 (SSH) herstellen, verwenden Sie diesen Befehl:

sudo ufw allow from 203.0.113.4 to any port 22

Subnetze

Wenn Sie ein Subnetz von IP-Adressen zulassen möchten, können Sie dazu die CIDR-Notation verwenden, um eine Netzmaske anzugeben. Wenn Sie beispielsweise alle IP-Adressen von203.0.113.1 bis203.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 den Zielport angeben, zu dem das Subnetz203.0.113.0/24 eine Verbindung herstellen darf. Auch hier verwenden wir Port22 (SSH) als Beispiel:

sudo ufw allow from 203.0.113.0/24 to any port 22

Verbindungen zu einer bestimmten Netzwerkschnittstelle

Wenn Sie eine Firewall-Regel erstellen möchten, die nur für eine bestimmte Netzwerkschnittstelle gilt, können Sie dies tun, indem Sie "Zulassen ein" gefolgt vom Namen der Netzwerkschnittstelle angeben.

Möglicherweise möchten Sie Ihre Netzwerkschnittstellen nachschlagen, bevor Sie fortfahren. Verwenden Sie dazu diesen Befehl:

ip addr
Output Excerpt2: eth0:  mtu 1500 qdisc pfifo_fast state
. . .
3: eth1:  mtu 1500 qdisc noop state DOWN group default
. . .

Die hervorgehobene Ausgabe zeigt die Namen der Netzwerkschnittstelle an. Sie werden normalerweise alseth0 oderenp3s2 bezeichnet.

Wenn Ihr Server über eine öffentliche Netzwerkschnittstelle mit dem Nameneth0 verfügt, können Sie mit diesem Befehl HTTP-Verkehr (Port80) zulassen:

sudo ufw allow in on eth0 to any port 80

Andernfalls kann Ihr Server HTTP-Anforderungen aus dem öffentlichen Internet empfangen.

Wenn Ihr MySQL-Datenbankserver (Port3306) beispielsweise auf Verbindungen auf der privaten Netzwerkschnittstelleeth1 warten soll, können Sie diesen Befehl verwenden:

sudo ufw allow in on eth1 to any port 3306

Auf diese Weise können andere Server in Ihrem privaten Netzwerk eine Verbindung zu Ihrer MySQL-Datenbank herstellen.

[[Schritt 6 - Verbindungen verweigern]] == Schritt 6 - Verbindungen verweigern

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 das Erstellen einer sicheren Firewallrichtlinie, indem Sie Regeln erstellen müssen, die bestimmte Ports und IP-Adressen explizit zulassen.

Manchmal möchten Sie jedoch bestimmte Verbindungen basierend auf der Quell-IP-Adresse oder dem Subnetz verweigern, möglicherweise weil Sie wissen, dass Ihr Server von dort aus angegriffen wird. Wenn Sie Ihre Standardrichtlinie für eingehende Nachrichten inallow ändern möchten (was nicht empfohlen wird), müssen Sie die Regeln vondenyfür alle Dienste oder IP-Adressen erstellen, für die Sie keine Verbindungen zulassen möchten zum.

Umdeny Regeln zu schreiben, können Sie die oben beschriebenen Befehle verwenden undallow durchdeny ersetzen.

Um beispielsweise HTTP-Verbindungen zu verweigern, können Sie den folgenden Befehl verwenden:

sudo ufw deny http

Oder wenn Sie alle Verbindungen von203.0.113.4 verweigern möchten, können Sie diesen Befehl verwenden:

sudo ufw deny from 203.0.113.4

Schauen wir uns nun an, wie Sie Regeln löschen.

[[Schritt-7 - Löschen von Regeln]] == Schritt 7 - Löschen von Regeln

Es ist genauso wichtig zu wissen, wie Firewall-Regeln gelöscht werden, wie zu wissen, wie sie erstellt werden. Es gibt zwei Möglichkeiten, anzugeben, welche Regeln gelöscht werden sollen: nach Regelnummer oder nach der tatsächlichen Regel (ähnlich wie die Regeln beim Erstellen angegeben wurden). Wir beginnen mit der Methodedelete by rule number, da dies einfacher ist.

Nach Regelnummer

Wenn Sie die Regelnummer zum Löschen von Firewall-Regeln verwenden, möchten Sie zunächst eine Liste Ihrer Firewall-Regeln abrufen. Der UFW-Statusbefehl bietet eine Option zum Anzeigen von Zahlen neben jeder Regel, wie hier gezeigt:

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 die Regel 2 löschen möchten, die HTTP-Verbindungen (Port 80) zulässt, können Sie diese in einem UFW-Löschbefehl wie folgt angeben:

sudo ufw delete 2

Dies würde eine Bestätigungsaufforderung anzeigen und dann Regel 2 löschen, die HTTP-Verbindungen zulässt. Beachten Sie, dass Sie bei aktiviertem IPv6 auch die entsprechende IPv6-Regel löschen möchten.

Nach tatsächlicher Regel

Die Alternative zu Regelnummern besteht darin, die tatsächlich zu löschende Regel anzugeben. Wenn Sie beispielsweise dieallow http-Regel entfernen möchten, können Sie sie folgendermaßen schreiben:

sudo ufw delete allow http

Sie können die Regel auch durchallow 80 anstelle des Dienstnamens angeben:

sudo ufw delete allow 80

Diese Methode löscht sowohl IPv4- als auch IPv6-Regeln, sofern vorhanden.

[[Schritt-8 -—- Überprüfung des UFW-Status und der Regeln]] == Schritt 8 - Überprüfung des UFW-Status und der Regeln

Mit diesem Befehl können Sie jederzeit den Status von UFW überprüfen:

sudo ufw status verbose

Wenn UFW deaktiviert ist, was standardmäßig der Fall ist, wird Folgendes angezeigt:

OutputStatus: inactive

Wenn UFW aktiv ist, wie es sein sollte, wenn Sie Schritt 3 befolgt haben, sagt die Ausgabe, dass es aktiv ist, und listet alle Regeln auf, die festgelegt wurden. Wenn die Firewall beispielsweise so eingestellt ist, dass SSH-Verbindungen (Port22) von überall zugelassen werden, sieht die Ausgabe möglicherweise folgendermaßen aus:

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 Befehlstatus, wenn Sie überprüfen möchten, wie UFW die Firewall konfiguriert hat.

[[Schritt 9 - Deaktivieren oder Zurücksetzen von ufw-optional]] == Schritt 9 - Deaktivieren oder Zurücksetzen von UFW (optional)

Wenn Sie beschließen, UFW nicht zu verwenden, können Sie es mit folgendem Befehl deaktivieren:

sudo ufw disable

Alle Regeln, die Sie mit UFW erstellt haben, sind nicht mehr aktiv. Sie könnensudo ufw enable jederzeit ausführen, wenn Sie es später aktivieren müssen.

Wenn Sie bereits UFW-Regeln konfiguriert haben, sich aber für einen Neustart entscheiden, können Sie den Befehl reset verwenden:

sudo ufw reset

Dadurch wird UFW deaktiviert und alle zuvor definierten Regeln werden gelöscht. Beachten Sie, dass sich die Standardrichtlinien nicht auf die ursprünglichen Einstellungen ändern, wenn Sie sie zu einem bestimmten Zeitpunkt ändern. Dies sollte Ihnen einen Neuanfang mit UFW geben.

Fazit

Ihre Firewall ist jetzt so konfiguriert, dass (mindestens) SSH-Verbindungen zugelassen werden. Achten Sie darauf, andere eingehende Verbindungen zuzulassen, während Sie unnötige Verbindungen einschränken, damit Ihr Server funktionsfähig und sicher ist.

Weitere Informationen zu gängigen UFW-Konfigurationen finden Sie im Tutorial vonUFW Essentials: Common Firewall Rules and Commands.