Neues Mäuerchen

Fedoras frische Firewall

20.08.2012
Im stillen Kämmerlein werkeln die Fedora-Entwickler seit einer ganzen Weile an Firewalld. Der Daemon soll die Konfiguration der Firewall drastisch vereinfachen und kommt ab Fedora 18 standardmäßig zum Einsatz.

Zum Lieferumfang eines jeden Linux-Kernels gehört auch eine recht mächtige Firewall. Ihre Einrichtung über die üblichen Kommandozeilenwerkzeuge wie iptables gestaltet sich jedoch recht kompliziert und fehleranfällig. Darüber hinaus kann sie nicht gezielt einzelne Programme in ihre Schranken verweisen und vergisst nach einem Systemneustart alle im laufenden Betrieb hinzugefügten Filterregeln.

Wer schließlich noch ihren Funktionsumfang der Firewall über spezielle Kernelmodule aufbohren möchte, den zwingt sie mitunter zu einem Neustart und kappt dabei alle aktuellen Verbindungen – was nur selten erwünscht sein dürfte. Aus diesen Gründen setzen viele Distributionen mittlerweile eigene Firewalls ein. Ubuntu-Nutzer dürfen sich beispielsweise an der "Uncomplicated Firewall" Ufw samt grafischem Frontend Gufw erfreuen [1].

Fedora bot bislang nur eine grafische Benutzeroberfläche für Iptables. Das soll sich jedoch schon im November mit Fedora 18 ändern: Es bekommt mit dem Firewall-Daemon oder kurz Firewalld ebenfalls eine eigene Firewall spendiert. Wie deren Name schon andeutet, läuft sie ständig als Dienst im Hintergrund. Filterregeln dürfen Sie jederzeit hinzufügen und entfernen, ohne die Firewall neu starten zu müssen. Das ist besonders nützlich, wenn andere Dienste während des Betriebs dynamisch Regeln ergänzen (müssen). Zu solchen Gesellen zählt beispielsweise Libvirtd, der virtuelle Maschinen verwaltet [2].

Darüber hinaus möchte Firewalld die Einrichtung vereinfachen. Dank der sogenannten Services müssen Sie in der Regel nur noch den Namen des Dienstes nennen, um die passenden Ports zu öffnen oder zu schließen. Darüber hinaus kann Firewalld zwischen verschiedenen Aufenthaltsorten unterscheiden und beispielsweise am Flughafen die Schotten dichtmachen, im Heimnetz jedoch den Zugriff auf den Dateiserver gewähren.

Firewall im Kernel

Die im Kernel enthaltene Firewall besteht aus mehreren Teilen. Die Basis bildet ein Netfilter genanntes Modul. Es bietet Funktionen an, über die andere Kernel-(Helfer-)Module die ein- und ausgehenden Netzwerkpakete untersuchen und filtern können. Dazu zählt beispielsweise das Modul Iptables, das wiederum vom gleichnamigen Kommandozeilenprogramm die Filter-Regeln erhält. Auch Firewalld nutzt das Netfilter-Angebot und ersetzt mit seinen eigenen Funktionen auf einen Schlag die vier Module Iptables, Ip6tables, Arptables sowie Ebtables (Abbildung 1). Firewalld selbst ist übrigens komplett in Python geschrieben – für eine Firewall recht ungewöhnlich.

Abbildung 1: Firewall-cmd steuert den Firewall-Daemon, der wiederum die Funktionen von Netfilter nutzt.

Feuer-Dämon

Firewalld tauchte erstmals in den Repositories von Fedora 15 auf. Auch im aktuellen F17 müssen Sie Firewalld noch explizit nachinstallieren, erst ab Fedora 18 soll der Dienst dann standardmäßig zum Einsatz kommen. Den Quellcode aller bislang veröffentlichten Firewalld-Versionen finden Sie bei Fedorahosted.org [3]. Er sollte sich auch auf anderen Distributionen installieren lassen – vorausgesetzt, dort kollidiert Firewalld nicht mit einer bereits laufenden Firewall.

Aber auch unter Fedora müssen Sie sich entscheiden: Wer Iptables und Co. nutzt, schiebt die Regeln an Firewalld vorbei. Das ergibt im Extremfall einen inkonsistenten Regel-Mischmasch. Tabu bleibt somit auch die grafische Benutzeroberfläche System-config-firewall, die auf dem Desktop schlicht als Firewall firmiert (unter Gnome 3 steckt sie unter Anwendungen | Sonstige, Abbildung 2). Derzeit lassen sich Firewalld und die Iptables-Werkzeuge noch gleichzeitig installieren. Zukünftig soll sich der Benutzer bei der Installation, dem ersten Systemstart oder der ersten Benutzung des Netzwerks für eine der beiden Varianten entscheiden können beziehungsweise müssen.

Abbildung 2: Das Firewall-Einrichtungsprogramm ist für Firewalld nicht nur nutzlos, sondern sogar kontraproduktiv.

Brandstifter

Wenn Sie Firewalld ausprobieren möchten, installieren Sie unter Fedora 17 die Pakete firewalld und firewall-applet samt Abhängigkeiten. Das Firewall-Applet zeigt später wie in Abbildung 3 den Status der Firewall an. Nach der Installation der Pakete bietet Fedora an, das Applet zu starten, was Sie per Ausführen annehmen.

Abbildung 3: Das Firewalld-Applet liefert Statusinformationen über die Firewall (hier unter dem XFCE-Spin von F17).

Da Firewalld noch nicht läuft, blinkt das Applet nur einmal kurz auf und verschwindet umgehend wieder. Daher schließen Sie den Paketmanager, öffnen ein Terminalfenster, melden sich dort als Benutzer root an und starten schließlich über den Aufruf systemctl start firewalld.service den Dienst Firewalld (Abbildung 4). Jetzt sollte auch das Applet wieder auftauchen und eine zu Firewalld aufgebaute Verbindung melden.

Abbildung 4: Firewalld lässt sich direkt nach der Installation bequem über systemctl starten, danach fährt der Dienst automatisch beim Systemstart mit hoch.

Um Ports für den Netzwerkverkehr zu öffnen, gilt es irgendwie mit dem laufenden Firewalld Verbindung aufzunehmen. Dem Willen der Entwickler zufolge soll das primär über das Kommunikationssystem D-Bus geschehen. Über dieses lässt sich Firewalld steuern und nach dem aktuellen Befinden der Firewall befragen. Die Kommunikation über den D-Bus hat den Vorteil, dass auf diese Weise der Berechtigungsdienst PolicyKit [4] den Zugriff auf die Firewall reglementieren kann. Zur D-Bus-Schnittstelle und ihrer Verwendung gibt es allerdings derzeit keine weiteren Informationen. Die entsprechende Manpage existierte zu Redaktionsschluss schlichtweg noch nicht, und auch die Firewalld-Seiten im Fedora-Wiki [5] schweigen sich hierüber aus.

Glücklicherweise liegt Firewalld noch das Kommandozeilenwerkzeug firewall-cmd bei, mit dem sich alle administrativen Aufgaben vornehmen lassen. Um mit ihm bequem Löcher in die Firewall bohren zu können, müssen allerdings erst noch ein paar passende Firewalld-Services her.

Dienstleistungsgesellschaft

Einige Dienste, wie beispielsweise DNS, verlangen mehrere offene Ports. Diese dürfen Sie zusammen mit etwaigen benötigten Netfilter-Helfer-Modulen auf eine Liste schreiben. Firewalld bezeichnet solch eine Liste als Service, das Fedora-Wiki spricht hingegen noch von einem Feature [5]. Firewall-cmd müssen Sie dann nur noch anweisen den Service zu laden – schon ist die Firewall passend konfiguriert.

Für gebräuchliche Dienste, wie etwa den SSH-Daemon, bringt Firewalld bereits passende Services mit. Um beispielsweise die Ports für besagten SSH-Daemon zu öffnen, Setzen Sie schlicht folgendes Kommando ab:

# firewall-cmd --add --service=ssh

Soll Firewalld die Ports nach einer Weile automatisch wieder schließen, hängen Sie zusätzlich den Parameter --timeout an:

# firewall-cmd --add --service=ssh --timeout=10

In diesem Fall wäre der SSH-Dienst nach exakt 10 Sekunden nicht mehr von außen erreichbar. Eine Liste mit allen bereits vorhandenen Services liefert folgender Aufruf:

# firewall-cmd --get-services

Das Ergebnis zeigt Abbildung 5. Um einen Service wieder zu deaktivieren, nutzen Sie den Parameter --remove:

firewall-cmd --remove --service=ssh

Damit würde Firewalld umgehend die von SSH genutzten Ports schließen – und zwar wirklich nur diese.

Abbildung 5: Für die wichtigsten Dienste bringt Firewalld bereits passende Services mit, die selbsterklärende Namen tragen.

Alle von Firewalld mitgebrachten Services lagern im Unterverzeichnis /usr/lib/firewalld/services. Jede XML-Datei dort definiert genau einen Service. Eigene Service-Dateien gehören dagegen in das Unterverzeichnis /etc/firewalld/services: Eine hier platzierte XML-Datei überschreibt die Einstellungen einer bereits mitgebrachten Service-Datei gleichen Namens.

Listing 1 zeigt die Service-Datei für den FTP-Daemon, der lediglich den geöffneten Port 21/tcp sowie das Netfilter-Helfer-Modul nf_conntrack_ftp benötigt. Die Kurzbeschreibung des Dienstes zwischen <short> und </short> sowie die anschließende ausführliche Beschreibung dürfen optional wegfallen. Der Service-Name hinter <service name= ist hingegen verpflichtend, im Listing lautet er schlicht ftp.

Listing 1

<?xml version="1.0" encoding="utf-8"?>
<service name="ftp">
  <short>FTP</short>
  <description>FTP is a protocol used for remote file transfer. If you plan to make your FTP server publicly available, enable this option. You need the vsftpd package installed for this option to be useful.</description>
  <port protocol="tcp" port="21"/>
  <module name="nf_conntrack_ftp"/>
</service>

Grenzgebiete

Während Sie einer WLAN-Verbindung am Flughafen nicht über den Weg trauen sollten, können Sie hingegen im eigenen Heimnetzwerk alle Ports öffnen. Nach einem Ortswechsel müssten Sie dazu die entsprechenden Services einzeln über Firewall-cmd starten und stoppen. Seit Fedora 17 dürfen Sie sich die Arbeit mit sogenannten Zonen erleichtern.

Bei einer Zone handelt es sich einfach um eine Liste mit den Namen mehrerer Services. Die Zone für das Heimnetzwerk könnte etwa die Services für Samba, SSH und IPP für Netzwerkdrucker umfassen. Sobald Sie Firewall-cmd anweisen, in die Zone für das Heimnetzwerk zu wechseln, öffnet Firewalld automatisch alle zugehörigen Ports – und das mit nur einem einzigen, kompakten Befehl.

Netterweise bringt Firewalld bereits ein paar vordefinierte Zonen mit: Die private Zone home winkt von IPP-, Samba- und DHCPv6-Clients angeforderte Antworten durch und gestattet von außen den Zugriff auf die Dienste SSH und MDNS. Die öffentliche Zone public stellt das genaue Gegenteil dar und weist grundsätzlich alle eingehenden Verbindungen ab – Ausnahmen bilden nur SSH-Anfragen und Antworten für einen DHCPv6-Client.

Eine Zone kann nicht nur Services aktivieren, sondern auf Wunsch auch direkt einzelne Ports öffnen, ausgewählte ICMP-Nachrichten blocken oder durchlassen, Masquerading ein- und ausschalten sowie Forward-Ports einrichten. Alle verfügbaren Zonen listet das Kommando firewall-cmd --get-zones auf.Welche davon gerade standardmäßig aktiv ist, verrät firewall-cmd --get-default-zone. Der folgende Befehl wechselt in die Zone home (das Ergebnis zeigt Abbildung 6):

# firewall-cmd --set-default-zone=home
Abbildung 6: Mit den Parametern --zone=home und --list=all aufgerufen, liefert Firewall-cmd die Netzwerkschnittstelle, für die die Zone home gerade gilt (in diesem Fall p2p1), sowie alle darin aktiven Services.

Jede einzelne Netzwerkschnittstelle können Sie in eine andere Zone verschieben. Im Beispiel aus Listing 2 fliegt die Netzwerkkarte p7p1 zunächst aus der Zone public und und landet anschließend in der Zone home (Abbildung 7).

Listing 2

# firewall-cmd --zone=public --remove --interface=p7p1
# firewall-cmd --zone=home --add --interface=p7p1
Abbildung 7: Hier wurde die Netzwerkkarte p7p1 in die Zone home gepackt.

Welche Netzwerkschnittstellen derzeit in welchen Zonen liegen, verrät der Befehl firewall-cmd --get-active-zones. Sobald Sie mehr als eine Zone verwenden, müssen Sie beim Aktivieren und Deaktivieren von einzelnen Services stets auch die Zone angeben (Abbildung 8). Der folgende Befehl schließt beispielsweise die SSH-Ports an allen Netzwerkschnittstellen in der Zone public:

# firewall-cmd --zone=public --remove --service=ssh

Die in der Zone public noch erlaubten Services verrät anschließend der Aufruf:

# firewall-cmd --zone=public --list=service
Abbildung 8: Hier wurde aus der Zone public (und nur aus dieser Zone) der Service ssh entfernt.

Die Konfigurationen der mitgelieferten Zonen liegen im Unterverzeichnis /usr/lib/firewalld/zones. Jede XML-Datei dort entspricht einer Zone, die für das Heimnetzwerk heißt beispielsweise home.xml. Wie Listing 3 zeigt, besteht deren Inhalt lediglich aus einer Liste mit allen Services, die in dieser Zone erlaubt sind.

Die Lang- und Kurzbeschreibungen sind optional, den Namen der Zone hingegen müssen Sie angeben – in Listing 3 heißt sie kurz und bündig home. Eigene Zone-Dateien gehören in das Verzeichnis /etc/firewalld/zones. Die hier platzierten XML-Dateien überschreiben wieder die mitgelieferte Zone-Datei gleichen Namens.

Listing 3

<?xml version="1.0" encoding="utf-8"?>
<zone name="home">
  <short>Home</short>
  <description>For use in home areas. You mostly trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
  <service name="ssh"/>
  <service name="ipp-client"/>
  <service name="mdns"/>
  <service name="samba-client"/>
  <service name="dhcpv6-client"/>
</zone>

Keine Panik

Für extreme Fälle kennt Firewalld noch einen Panik-Modus, in dem die Firewall sämtliche ein- und ausgehenden Pakete verwirft:

# firewall-cmd --enable --panic

Den Panik-Modus sollten Sie dann einsetzen, wenn Sie einen konkreten Angriff auf den eigenen Rechner vermuten. Sie deaktivieren ihn wieder mit:

firewall-cmd --disable --panic

Standardmäßig vergisst Firewalld nach einem Neustart sämtliche Einstellungen. Um das zu verhindern, müssen Sie in der Konfigurationsdatei /etc/firewalld/firewalld.conf die Zeile CleanupOnExit=yes auf no setzen. In unseren Tests mit einem frisch installierten Fedora 17 blieb die Änderung jedoch wirkungslos, nach einem Neustart landeten alle Regeln wieder im Nirvana.

Wenn Sie Firewalld gar nicht mehr nutzen möchten, stellen die Befehle aus Listing 4 den alten Zustand wieder her. Vor einem Neustart müssen Sie zusätzlich noch die Firewalld-Pakete deinstallieren.

Listing 4

# systemctl stop firewalld.service
# lokkit --enabled

Ausblick

In den nächsten Versionen soll Firewalld sukzessive zahlreiche weitere Funktionen erhalten. So planen die Entwickler beispielsweise einen User-Interaction-Modus, in dem Firewalld den Netzwerkverkehr aller laufenden Anwendungen beobachtet. Möchte ein Programm ins Internet, fragt Firewalld den Benutzer, ob er dies zulassen möchte – ganz so wie die Firewall unter Windows. Bereits in Arbeit befindet sich ein grafisches Einrichtungswerkzeug, das System-config-firewall ähnelt. Einen Überblick über sämtliche geplanten Funktionen liefert das Fedora-Wiki [5].

In Fedora 18 soll Firewalld erstmals standardmäßig zum Einsatz kommen. Über Bord und aus den Init-Skripten fliegen damit gleichzeitig system-config-firewall sowie iptables, iptables-ipv6 und ebtables. Sie sollen sich aber fürs Erste noch manuell zurückholen lassen, erst Fedora 19 stellt die Unterstützung für das alte System endgültig ein.

Damit gilt es aber auch gleichzeitig alle Dienste und Anwendungen, die derzeit noch direkt Firewall-Regeln mit dem Iptables-Werkzeug anlegen oder modifizieren, für den Einsatz mit Firewalld umzurüsten. Für die Anwendungen im Fedora-Repository übernehmen das wahrscheinlich das Distributionsteam. Fraglich bleibt im Moment, ob Firewalld auch in andere Distributionen einzieht, bringen diese doch durchweg bereits eigene Firewall-Lösungen mit.

Die Dokumentation zu Firewalld [5] fällt derzeit noch äußerst dürftig aus, ist teilweise nicht auf dem aktuellen Stand und zudem mit zahlreichen geplanten Funktionen [6]. Möchten Sie sich näher mit Firewalld beschäftigen, dann sollten Sie sich daher soweit möglich nur auf die Manpages stützen, deren Hauptseite Sie über man firewalld erreichen.

Fazit

Firewalld selbst macht in seiner jetzigen Form eine recht gute Figur. Die Bedienung fällt leicht einfach, der Aufbau von Service- und Zone-Dateien lässt sich schnell durchschauen. Es bleibt zu hoffen, dass die Entwickler alle noch geplanten Funktionen umsetzen, insbesondere den äußerst interessanten User-Interaction-Mode, und für Administratoren rasch eine benutzbare Dokumentation nachliefern. 

Infos

[1] Ufw und Gufw: Kristian Kißling, "Mauern mit Ubuntu", LU 07/2009, S. 78, http://www.linux-community.de/18182

[2] Libvirtd: http://libvirt.org/remote.html

[3] Firewalld-Quellcode: https://fedorahosted.org/firewalld/

[4] Workshop PolicyKit: Tim Schürmann, "Türsteher", LU 07/2010, S. 24, http://www.linux-community.de/21107

[5] Firewalld im Fedora-Wiki: http://fedoraproject.org/wiki/FirewallD

[6] Funktionen von Firewalld: https://fedoraproject.org/wiki/Features/firewalld-default

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 4 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 

Ähnliche Artikel

Kommentare