Mit Firewalld-Regeln unterschiedlichen Bedrohungsszenarien begegnen

Aus LinuxUser 07/2020

Mit Firewalld-Regeln unterschiedlichen Bedrohungsszenarien begegnen

© Sean Gladwell, Fotolia

Brandschutz

Firewalld generiert Filterregeln für die im Kernel integrierte Firewall – alternativ mit grafischer Oberfläche oder auf der Kommandozeile.

Eine Firewall dient dazu, den ein- und ausgehenden Netzwerkverkehr zu überwachen und zu filtern. Sie funktioniert durch die Definition einer Reihe von Regeln, die festlegen, ob sie bestimmten Verkehr zulässt oder blockiert.

Im Heimnetz übernimmt die Firewall im Router gemeinhin diese Funktion und lässt nur solche Datenpakete von außen passieren, die eine Antwort auf von Ihnen gestellte Anfragen darstellen. Von außen erreichbare Heimserver schalten Sie über Port-Freigaben beziehungsweise Port-Weiterleitungen frei.

Viele Router, wie etwa die beliebten Fritzboxen, genügen somit schon, um ein normal dimensioniertes Heimnetz oder eine kleinere Arbeitsgruppe abzusichern. Bei mittleren und großen Unternehmen stoßen diese Firewalls schnell an ihre Grenzen, denn sie erlauben standardmäßig keine VLANs, also mehrere voneinander getrennte Netze. Hier kommen dann professionelle Firewall-Lösungen zum Zug.

Firewall im Kernel

Aber auch die meisten Betriebssysteme bringen eine Firewall mit. So blockt Windows 10 Zugriffe aus dem Internet, lässt allerdings Anwendungen ohne Nachfrage nach draußen. Der Linux-Kernel bringt ebenfalls eine Firewall mit, die auf dem Netfilter-Projekt basiert. Die Distributionen handhaben die im Kernel vorhandene Firewall unterschiedlich: Manche aktivieren sie standardmäßig, andere nicht.

Normalerweise geben Sie dem Paketfiltersystem Iptables oder dem moderneren Nachfolger Nftables auf der Kommandozeile Filterregeln vor, die bestimmen, was hinaus und was herein darf. Beim Hantieren mit diesen komplexen Werkzeugen sollte man genauestens wissen, was man tut, andernfalls richtet man schnell viel Schaden an. Deshalb gibt es verschiedene Helfer für die Kommandozeile oder mit grafischer Oberfläche, die die komplexen Filterregeln in Form von menschenlesbarer Syntax in zielgerichtete Anweisungen übersetzen.

Mehr Kontrolle

Wenn Sie die Firewall Ihres Routers als nicht ausreichend empfinden, sollten Sie ein Frontend für die Firewall Ihrer Distribution installieren, aktivieren und konfigurieren. Das erlaubt eine bessere Kontrolle der Details als die Firewall im Router. Für einen Heimanwender bedeutet das, im Router die Ports freizugeben, die die Anwendungen benötigen, um nach außen offen zu sein. Alles andere stellen Sie in der installierten Firewall ein.

Zu den brauchbaren Kommandozeilen-Tools zählt etwa Firetable [1], Arno’s Firewall [2] oder das von Ubuntu entwickelte Ufw [3]. Dazu gibt es mit Gufw [4] und KCN-UFW [5] auch grafische Oberflächen für Gnome und KDE Plasma. Direkt auf eine GUI ausgelegt sind Werkzeuge wie Firewall Builder [6], Peerguardian Linux [7] oder Firewalld [8], um das es in diesem Artikel geht.

Firewalld

Das in Python geschriebene Firewall-Management-Tool Firewalld gibt sich bereits im Namen als Daemon zu erkennen und stellt somit seine Dienste im Hintergrund bereit. Es bietet eine vollständige Firewall-Lösung, die die Iptables-Regeln des Systems verwaltet und eine D-Bus-Schnittstelle für deren Betrieb bereitstellt. Red Hat entwickelt das Projekt bereits seit 2011.

Firewalld agiert als Frontend für das Netfilter-Framework dar, indem es die Filterregeln für Nftables grafisch umsetzt. Das Tool lässt sich sowohl auf der Kommandozeile als auch über eine Qt-basierte GUI ansteuern (Abbildung 1).

Abbildung 1: Standardansicht der GUI von Firewalld. Die Standardzone ist <span class="ui-element">public</span>, zudem besagt die Option <span class="ui-element">Runtime</span>, dass erstellte Regeln nur f&uuml;r die aktuelle Sitzung gelten.

Abbildung 1: Standardansicht der GUI von Firewalld. Die Standardzone ist public, zudem besagt die Option Runtime, dass erstellte Regeln nur für die aktuelle Sitzung gelten.

Firewalld gehört vorinstalliert und aktiviert zum festen Bestandteil der Distributionen Fedora, CentOS, Red Hat Enterprise Linux, OpenSuse und Suse Enterprise Linux. Bei Debian und dessen Derivaten müssen Sie die Software zunächst installieren.

Die Anwendung besteht aus drei Teilen. Die Installation bezieht neben Firewall-cmd die grafische Oberfläche Firewall-config mit ein. Sollte das bei der von Ihnen verwendeten Distribution nicht der Fall sein, installieren Sie das Paket nach. Zusätzlich steht mit Firewall-applet ein Indikator für den Systemabschnitt der Panel-Leiste bereit.

Zonen und Dienste

Firewalld arbeitet mit einem Modell aus Zonen und Diensten. Zonen definieren unterschiedliche Level an Vertrauen. Basierend auf Zonen und Diensten, die Sie auch selbst definieren können, steuern Sie, welcher Datenverkehr zum und vom System zulässig ist.

Zu den vordefinierten Zonen gehören unter anderem Home, Public, Work und Trusted, denen Sie Netzwerk-Interfaces zuweisen (Abbildung 2). Standardmäßig nimmt die Home-Zone alle eingehenden Verbindungen an, während die Public-Zone alles nicht explizit zugelassene herausfiltert.

Abbildung 2: Der Befehl <code>firewall-cmd --get-zones</code> listet alle vordefinierten Zonen auf. Bei Debian kommt noch eine Zone f&uuml;r Libvirt hinzu.

Abbildung 2: Der Befehl firewall-cmd --get-zones listet alle vordefinierten Zonen auf. Bei Debian kommt noch eine Zone für Libvirt hinzu.

Zonen

Das Zonenmodell erlaubt bei Notebooks, die häufig in verschiedenen Netzen auf das Internet zugreifen, viel Flexibilität. Bei entsprechender Konfiguration gelten zu Hause andere Regeln als in ungesicherten öffentlichen Netzwerken und an Hotspots. Den größten Teil des Datenverkehrs, den die Firewall zu Hause erlaubt, verbietet sie dort (Abbildung 3).

Abbildung 3: F&uuml;r Notebooks in ungesch&uuml;tzten Netzen verwenden wir den WLAN-Zugang in der Zone <span class="ui-element">Drop</span> nur mit den n&ouml;tigsten Freigaben.

Abbildung 3: Für Notebooks in ungeschützten Netzen verwenden wir den WLAN-Zugang in der Zone Drop nur mit den nötigsten Freigaben.

Standardmäßig bringt Firewalld zehn vordefinierte Zonen mit, die Sie mit dem Befehl firewall-cmd --get-zones auflisten. Die Tabelle “Vordefinierte Zonen” listet alle Standardzonen mit den jeweiligen Standardaktionen auf. Der Befehl firewall-cmd --get-active-zones zeigt aktivierte Zonen an.

Zone

Aktion

Drop

Kein Vertrauen, nur ausgehende Verbindungen möglich, eingehende Anfragen verwirft die Firewall.

Block

Ähnlich wie Drop; die Firewall lehnt eingehende Verbindungen ab, die Gegenstelle erhält eine ICMP-Meldung.

Public

Für öffentliche, nicht vertrauenswürdige Netze. Ausgewählte eingehende Verbindungen möglich.

Libvirt

Für virtuelle Interfaces. Erlaubt NAT, ist aber strikt eingestellt. Die Firewall erlaubt die Dienste SSH, HTTP, HTTPS, DNS, DHCP und ICMP.

External

Für NAT-Masquerading. Deckt den Fall ab, dass die Firewall als Gateway arbeitet. Dabei ist das Heimnetz zwar versteckt, aber erreichbar.

Internal

Für den internen Teil des Gateways. Einige Dienste lassen sich erreichen.

DMZ

Für isolierte Rechner im Netz. Nur explizit zugelassene eingehende Verbindungen. Keine Verbindung zu anderen Rechnern im Netzwerk.

Work

Für Arbeitsgeräte; die Firewall vertraut den meisten anderen Rechnern im Netzwerk. Dienste sind zulässig.

Home

Häusliche Arbeitsumgebung. die Firewall vertraut den meisten anderen Rechnern im Netzwerk. Zusätzliche Dienste möglich.

Trusted

Vertraut allen Maschinen im Netzwerk.

Firewalld verwendet zwei getrennte, als Runtime und Permanent definierte Konfigurationssätze. Regeln, die Sie mit der Standardeinstellung Runtime erstellen, gelten nur bis zum nächsten Neustart; permanente Regeln bleiben darüber hinaus erhalten. In der GUI gibt es zum Ändern oben mittig einen Schalter. Auf der Kommandozeile muss ein Befehl den Parameter --permanent enthalten, wenn die Regel einen Neustart überleben soll.

Standardzone Public

Nach dem eventuell notwendigen Aktivieren des Firewalld-Dienstes mittels systemctl start firewalld und systemctl enable firewalld aktiviert der Daemon in der Grundeinstellung die Zone Public als Standard. Das sehen Sie mit sudo firewall-cmd --get-default-zone. Im Regelfall weist die Software allen Netzwerkschnittstellen diese Standardzone zu.

Der Standardbefehl zum Manipulieren von Regeln auf der Kommandozeile lautet firewall-cmd, sie erweitern ihn durch Parameter. Die erhaltenen Befehle setzt Firewalld sofort über den D-Bus um. Neben Firewall-cmd gibt es Firewall-offline-cmd, sodass sich auch offline Regeln erstellen und editieren lassen. Das erweist sich als vorteilhaft, falls Sie sich einmal vom Netz aussperren.

Die Konfigurationsdateien von Firewalld finden Sie unter /etc/firewalld/firewalld.conf, wo Sie etwa das Backend vom derzeit noch genutzten Iptables auf Nftables ändern. Die vordefinierten Zonen und die Dienste liegen als XML-Dateien unter /usr/lib/firewalld/. Selbst erstellte oder editierte Zonen legen Sie unter /etc/firewalld/zones/ ab.

Löchrige Mauer

Um nun Löcher in die Feuerwand zu bohren, sehen Sie sich die Liste der bereits vordefinierten Dienste mit firewall-cmd --get-services an. Dann lassen Sie beispielsweise in der Zone work SSH mit dem Befehl firewall-cmd --zone=work --add-service=ssh zu. Die zeitliche Verfügbarkeit lässt sich noch durch den Parameter --timeout=Sekunden begrenzen.

Geschlossene Ports öffnen Sie per firewall-cmd --zone=Zone --add-port=Port/tcp. Als Protokoll käme auch UDP infrage. Zum Schließen von Ports oder Diensten dient der Parameter --remove-[...] mit Zusätzen wie port, service oder protocol. Der Parameter --permanent sorgt für eine bleibende Gültigkeit (Abbildung 4).

Abbildung 4: Ports &ouml;ffnen Sie f&uuml;r Zonen und legen das oder die Protokolle fest. Mit dem Parameter <code>--timeout</code> bestimmen Sie die zeitliche G&uuml;ltigkeit der Regel. <code>firewall-cmd --list-all</code> zeigt anschlie&szlig;end den Erfolg.

Abbildung 4: Ports öffnen Sie für Zonen und legen das oder die Protokolle fest. Mit dem Parameter --timeout bestimmen Sie die zeitliche Gültigkeit der Regel. firewall-cmd --list-all zeigt anschließend den Erfolg.

Eigene Dienste

Nach diesem Prinzip erstellen Sie bei Bedarf auch Filterlisten für Dienste. Als Beispiel erstellen wir eine Regel, die für den Medienserver Plex die nötigen Ports öffnet. Diese definiert Debian vor, Ubuntu dagegen nicht.

Um die Regel zu erstellen, kopieren Sie eine bestehende (Abbildung 5), benennen sie in plex.xml um und platzieren sie unter /etc/firewalld/services/ (Listing 1). Eigene Zonen (Abbildung 6) etwa für Gaming erstellen Sie beispielsweise mit sudo firewall-cmd --permanent --new-zone=gaming.

Listing 1

<?xml version="1.0" encoding="utf-8"?>
<service version="1.0">
<short>plex</short>
<description>Plex ist ein Medienserver.</description>
<port protocol="udp" port="1900"/>
<port protocol="tcp" port="32400"/>
</service>

Abbildung 5: Nachdem Sie in der Liste der vordefinierten Dienste-Filter einen von Ihnen ben&ouml;tigten finden, aktivieren Sie diesen f&uuml;r eine oder mehrere Zone.

Abbildung 5: Nachdem Sie in der Liste der vordefinierten Dienste-Filter einen von Ihnen benötigten finden, aktivieren Sie diesen für eine oder mehrere Zone.


Abbildung 6: Die durch den aktivierten Docker-Dienst angelegte Schnittstelle <span class="ui-element">Docker0</span> geh&ouml;rt im Beispiel zur Zone <span class="ui-element">work</span>.

Abbildung 6: Die durch den aktivierten Docker-Dienst angelegte Schnittstelle Docker0 gehört im Beispiel zur Zone work.

Wenn es einmal brennt, bietet die GUI unter Optionen einen Panikmodus, der dafür sorgt, dass die Software sämtlich ein- und ausgehenden Verbindungen kappt. Auf der Kommandozeile entspricht das dem Befehl firewall-cmd --panic-on. Ein weiteres Sicherheitsmerkmal im selben Menüpunkt nennt sich Sperrung. Damit sperren Sie die Konfiguration, sodass sich diese nur durch Anwendungen auf der Sperr-Positivliste ändern lässt.

Der entsprechende Befehl für die Kommandozeile lautet firewall-cmd --lockdown=on. Danach sollten sie zumindest den Befehl firewall-cmd in die Positivliste aufnehmen, da Sie sonst nichts mehr ändern können. Das gelingt mit firewall-cmd --add-lockdown-whitelist-command='/usr/bin/python /usr/bin/firewall-cmd*'

Fazit

Ob Sie Firewalld per GUI oder Kommandozeile bedienen, bleibt sich gleich, da beide denselben Befehlssatz unterstützen. Der Autor empfand es jedoch als angenehm, die Firewall mittels der GUI aufzusetzen, da es etwa das Verwalten von Diensten innerhalb von Zonen deutlich vereinfacht. Im täglichen Betrieb erweist sich das Bedienen per Kommandozeile aber als sehr eingängig: Es genügt, den Standardbefehl firewall-cmd um Parameter zu ergänzen, denen er dann Zonen, Dienste, Protokolle und so weiter zuordnet.

Unter Debian trafen wir auf mehreren Geräten auf einen Fehler, der IPv6 betrifft und auch mit ausgeschaltetem IPv6 bestehen blieb (Abbildung 7). Unter Ubuntu und Fedora funktionierte Firewalld dagegen einwandfrei. Eine ausführliche Dokumentation von Fedora [9] erklärt die Konzepte und listet alle Befehle auf, ähnliches gilt für das Arch-Wiki [10]. (tle)

Abbildung 7: Den hier gezeigten Fehler lie&szlig; sich unter Debian nicht umgehen. Ubuntu zeigte dieses Verhalten dagegen nicht.

Abbildung 7: Den hier gezeigten Fehler ließ sich unter Debian nicht umgehen. Ubuntu zeigte dieses Verhalten dagegen nicht.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDF
LinuxUser 07/2020 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben