38.3Firewalls – eine Einführung
Der Begriff »Firewall« ist zwar in aller Munde, es gibt aber keine allgemein akzeptierte Definition dafür. Eine »Firewall« kann sich auf die Hardware beziehen: Dann ist damit meist ein Rechner gemeint, der zwischen dem lokalen Netz und dem Internet steht. Viele ADSL-Router enthalten elementare Firewall-Funktionen.
Oft wird mit »Firewall« aber auch ein Programm bezeichnet, das auf dem Rechner installiert wird und das bei korrekter Konfiguration die Sicherheit verbessern soll. Manche Distributionen enthalten Werkzeuge zur Konfiguration der Firewall.
In diesem Buch bezeichne ich mit dem Begriff »Firewall« die Absicherung des TCP/IP-Verkehrs durch einen Paketfilter. Ein derartiger Filter analysiert alle Netzwerkpakete, die in den Rechner kommen bzw. diesen wieder verlassen. Je nachdem, ob dabei alle Regeln eingehalten werden, dürfen die Pakete passieren oder werden blockiert. Details zur Konfiguration eines solchen Paketfilters folgen im nächsten Abschnitt. Hier geht es vorerst darum, die Terminologie zu klären.
Die Notwendigkeit von Firewalls auf privaten Rechnern ist umstritten. Die Ubuntu-Entwickler sind beispielsweise der Ansicht, dass bei einer Desktop-Installation von Ubuntu ohnedies keine Netzwerkdienste laufen, die zu schützen sind. Bei einer Minimalinstallation ist das an sich korrekt, aber dabei bleibt es selten: Sobald der Benutzer Samba installiert, um eigene Dateien über ein Netzwerkverzeichnis anderen Benutzern zur Verfügung zu stellen, gibt es den ersten von außen angreifbaren Dienst.
Solange der Computer zu Hause betrieben wird und den Internetzugang durch einen ADSL-Router bezieht, sorgt der Router für einen gewissen Schutz von außen – einerseits durch das üblicherweise eingesetzte NAT-Verfahren, andererseits vielleicht auch durch eine Firewall, die auf dem Router läuft. Ganz anders sieht die Sache aus, wenn Sie mit Ihrem Notebook im ungesicherten WLAN eines Hotels E-Mails abrufen. Spätestens dann sollte eine Firewall auch auf Privat-PCs selbstverständlich sein.
Bei einem Firmen-LAN ist der Wunsch nach einer guten Absicherung noch stärker ausgeprägt. Gleichzeitig bestehen auch bessere Voraussetzungen, was die Infrastruktur betrifft. In der Praxis kümmert sich oft ein eigener Rechner um den Internetzugang für die Firma und um dessen Absicherung. Alle weiteren Netzwerkdienste laufen auf anderen Rechnern. Abbildung 38.1 veranschaulicht das Konzept.
Abbildung 38.1Firewall für lokale Netzwerke
Bei sehr kleinen Netzen dient manchmal ein Rechner gleichzeitig als Firewall und als Netzwerk-Server. Sicherheitstechnisch ist das nicht optimal, weil auf diesem Rechner zwangsläufig eine ganze Menge Netzwerkdienste laufen, die alle ein gewisses Sicherheitsrisiko darstellen.
Bei sehr großen Netzwerken gibt es oft sogar zwei Firewalls: Die erste Firewall dient nur zur Basisabsicherung, ist aber durchlässig für gewöhnliche Internetprotokolle wie HTTP oder FTP. Der Netzwerkbereich dahinter wird als Demilitarized Zone (DMZ) bezeichnet. Das soll zum Ausdruck bringen, dass in diesem Bereich nur eine eingeschränkte Sicherheit gegeben ist. In dieser Zone befinden sich in der Regel der Webserver sowie andere Netzwerk-Server, die öffentlich (also über das Internet) zugänglich sein müssen.
Die DMZ wird vom eigentlichen lokalen Netzwerk durch eine zweite Firewall getrennt. Erst dahinter befinden sich alle weiteren Server-Dienste, die nur für das lokale Netzwerk zuständig sind und die von außen absolut unzugänglich sein sollen. Die Konfiguration einer mehrstufigen Firewall geht allerdings weit über die Bandbreite dieses Buchs hinaus. Konfigurationsanleitungen finden Sie in speziellen Firewall-Büchern.
Netfilter
Kernelintern kümmert sich das Netfilter-System um die Verarbeitung von Firewall-Regeln. Abbildung 38.2 veranschaulicht stark vereinfacht, welche Wege IP-Pakete innerhalb des Paketfiltersystems gehen können. Eine detailliertere Abbildung finden Sie unter:
http://open-source.arkoon.net/kernel/kernel_net.png
Abbildung 38.2Vereinfachte Darstellung des iptables/netfilter-Systems
Die folgende Liste beschreibt ganz kurz die Stationen eines IP-Pakets im Kernel:
-
Routing: Anhand der IP- und Port-Adresse entscheidet der Kernel, ob das Paket lokal bearbeitet werden soll oder ob es an eine Netzwerkschnittstelle und damit an einen anderen Rechner weitergeleitet werden soll. Dieser Mechanismus ist unabhängig davon, ob sich der andere Rechner im lokalen Netz oder im Internet befindet.
-
Filter Input: Anhand einer Reihe von Regeln wird getestet, ob das Paket zur weiteren Verarbeitung durch lokale Programme akzeptiert wird oder nicht.
-
Local Process: Diese Box symbolisiert alle Programme, die IP-Pakete auf dem lokalen Rechner verarbeiten bzw. die selbst neue IP-Pakete erzeugen. Dazu zählen Programme wie Apache, MySQL, Samba oder der NFS-Server.
-
Filter Output: Anhand einer Reihe von Regeln wird getestet, ob das Paket den Kernel wieder verlassen darf.
-
Filter Forward: Dieser Filter entscheidet, welche der Pakete, die nur weitergeleitet, aber nicht bearbeitet werden sollen, den Kernel passieren dürfen.
-
NAT Postrouting: Falls der lokale Rechner via Masquerading anderen Rechnern einen Zugang ins Internet gewähren soll, kümmert sich diese Station um die erforderliche Manipulation der IP-Pakete.
Einem Paketfilter sind in Abbildung 38.2 nur die Boxen Filter Input, Filter Output, Filter Forward und eventuell auch NAT Postrouting zuzuordnen. Alle anderen Teile der Abbildung beschreiben die Netzwerkfunktionen des Kernels bzw. gewöhnliche Netzwerkdienste, die auf dem lokalen System laufen und mit dem Paketfilter nichts zu tun haben.
Firewall-Abbildungen
Bei vielen Firewall-Abbildungen sehen Sie links das gefährliche Internet, dann die Firewall und rechts das vergleichsweise sichere lokale Netz. Abbildung 38.2 entspricht nicht diesem Schema! Die Pakete, die links in den Rechner kommen, stammen sowohl aus dem lokalen Netz als auch aus dem Internet. Dasselbe gilt auch für die Pakete, die die Firewall rechts verlassen.
Für die Weiterleitung von Paketen – egal, ob diese von einer Netzwerkschnittstelle kommen oder von einem lokalen Programm erzeugt wurden – ist der Kernel zuständig. Dieser hat dabei in den unterschiedlichen Stufen des Filtersystems jeweils drei Alternativen:
-
Deny: Die Weiterleitung des Pakets wird ohne Rückmeldung abgelehnt. Das Paket wird damit gewissermaßen gelöscht. Es existiert nicht mehr weiter. Der Sender erfährt nie, was mit seinem Paket passiert ist.
-
Reject: Die Weiterleitung wird mit einer Rückmeldung abgelehnt. Die Folgen für das Paket sind dieselben, allerdings bekommt der Sender durch ein anderes ICMP-Paket die Nachricht, dass sein Paket abgelehnt wurde.
-
Accept: Das Paket wird weitergeleitet.
Die Grundidee eines Netfilter-Systems sieht so aus: Jedes IP-Paket durchläuft verschiedene Orte im Kernel, an denen anhand von Regeln überprüft wird, ob das Paket zulässig ist. Wenn das der Fall ist, wird es weitergeleitet, sonst wird es gelöscht oder zurückgesandt. Mehrere Tabellen steuern den Netfilter:
-
Filter-Tabelle: Diese Tabelle enthält üblicherweise das gesamte Regelsystem für den eigentlichen Paketfilter, also die »Firewall«.
-
NAT-Tabelle: Diese Tabelle ist nur aktiv, wenn die Masquerading-Funktion des Kernels aktiviert ist. Sie ermöglicht verschiedene Formen der Adressveränderung (Network Address Translation) bei Paketen, die von außen in den Kernel eintreten bzw. diesen wieder verlassen.
-
Mangle-Tabelle: Auch mit dieser Tabelle können IP-Pakete manipuliert werden. Die Tabelle dient Spezialaufgaben. Ein Anwendungsbeispiel folgt in Kapitel 39, »Squid und DansGuardian (Webfilter)«, bei der Konfiguration eines transparenten HTTP-Proxys.
Daneben gibt es noch die Raw- und die Security-Tabelle, auf die ich in diesem Buch aber nicht eingehe.
Jede dieser Tabellen sieht wiederum mehrere Regelketten (Chains) vor:
-
Filter-Tabelle: Input, Forward und Output
-
NAT-Tabelle: Prerouting, Input, Output und Postrouting
-
Mangle-Tabelle: Prerouting, Input, Forward, Output und Postrouting
Von diesen insgesamt zwölf Regelketten sind in Abbildung 38.2 nur die wichtigsten dargestellt.
Unterschiedliche Regelketten gleichen Namens
Alle Regelketten sind voneinander unabhängig! Es gibt also zwei verschiedene Prerouting- und sogar drei Output-Regelketten.
Dennoch ist in der iptables-Dokumentation oft einfach von der Output-Regelkette die Rede, ohne genaue Angabe, auf welche Tabelle sich diese Regelkette eigentlich bezieht. Gemeint sind in derartigen Fällen immer die Regelketten der Filter-Tabelle, die bei Weitem am wichtigsten ist.
Diese Sprachregelung gilt auch für das Kommando iptables: Dort kann die gewünschte Tabelle mit der Option -t angegeben werden. Entfällt diese Option, gilt das Kommando automatisch für die Filter-Tabelle.
Wenn ein IP-Paket bei seiner Wanderung durch den Kernel auf eine Regelkette stößt, überprüft der Kernel der Reihe nach sämtliche Regeln. Sobald eine Regel auf das Paket zutrifft, wird die in der Regel vorgesehene Aktion durchgeführt und das Paket weitergeleitet, gelöscht oder zurückgesendet. Nur wenn keine einzige der Regeln auf das Paket zutrifft, kommt das Standardverhalten des Filters zur Anwendung. Dieses lautet je nach Konfiguration abermals: weiterleiten, löschen oder zurücksenden.
Im Grundzustand des Kernels ist nur die Filter-Tabelle mit ihren drei Regelketten Input, Forward und Output aktiv. Keine dieser drei Regelketten enthält eine Regel, und das Standardverhalten lautet für alle drei Regelketten: weiterleiten.
Die Regelsysteme für IPv4 und IPv6 sind vollkommen voneinander getrennt. Es gibt also gewissermaßen eine Firewall für IPv4 und eine zweite für IPv6. Im Regelfall ist es zweckmäßig, das Firewall-System parallel für IPv4 und IPv6 aufzubauen. Wenn Sie also einkommende Pakete für den Port 23456 sperren wollen, sind dazu zwei nahezu gleichlautende Regeln für IPv4 und IPv6 erforderlich.
Nicht jede IPv4-Firewall-Regel ist auch für IPv6 geeignet: Beispielsweise ist NAT unter IPv4 ein wichtiges Thema, während NAT für IPv6 gänzlich unüblich ist und erst seit der Kernelversion 3.7 überhaupt unterstützt wird.
Die Kunst, einen Paketfilter zu erstellen, besteht darin, für jede relevante Filterkette das Standardverhalten sowie eine Reihe von Regeln zu definieren. Auf Kommandoebene verwalten Sie diese Regeln mit iptables für IPv4 und ip6tables für IPv6.
Das manuelle Einrichten einer Firewall erfordert eine Menge Fachwissen. Besser ist es zumeist, eine Konfigurationshilfe in Anspruch zu nehmen. Im folgenden Abschnitt stelle ich Ihnen dazu einige distributionsspezifische Programme vor.
Wenn Sie die Firewall doch lieber manuell konfigurieren möchten, gibt Abschnitt 38.5, »Firewall mit iptables selbst gebaut«, ein Einführungsbeispiel. Weitere Informationen und Details gibt es wie üblich im Internet:
http://www.netfilter.org
http://people.netfilter.org/rusty/unreliable-guides
Das Netfilter-System ist seit 2001 Bestandteil des Kernels. Mittlerweile haben sich einige grundlegende Mängel herausgestellt, weswegen bereits seit mehreren Jahren am Nachfolgesystem nftables gearbeitet wird. Im Herbst 2015 war nftables aber noch nicht praxistauglich. Bei vielen Distributionen sind die nftables-Funktionen im Kernel gar nicht aktiviert. Es ist momentan nicht abzusehen, wann und in welcher Form nftables Netfilter ablösen wird.
http://lwn.net/Articles/324989
http://heise.de/-2767676 (kostenpflichtig)