Sicherheit zum Nulltarif

04.03.1999
Bei der Suche nach kostengünstigen Firewall-Lösungen bietet sich Linux an. Das Betriebssystem enthält alles, was für einfache oder auch komplexe Firewall-Lösungen im Intra- oder Internet benötigt wird.

Eine Firewall soll das lokale Netz vor unerwünschten Blicken auf interne Netzstrukturen und Zugriffe von außen schützen. Bei der Überlegung, Linux als Basis für Firewallsysteme zu nutzen, sprechen gleich mehrere Faktoren für das freie Unix-Derivat. Ein wesentliches Argument ist, daß es ab der Kernelversion 1.2.1 alle Komponenten zum Aufbau von Firewallsystemen enthält. Sowohl einfache Paketfilter-Systeme als auch komplexere Proxy-Firewallsysteme sind mit einer der handelsüblichen Standarddistributionen (Suse, Redhat) aufzubauen. Auf der anderen Seite ist Linux hardwareseitig derart genügsam, daß auch ein ausgemusterter 80486er oder Pentium I-PC für den reinen Firewallbetrieb ausreicht. "Last but not least" bieten eine ganze Reihe von freien Tools Hilfestellung bei der Firewallkonfiguration an.

Entscheidet man sich für ein Linux-System als Firewall, gelten prinzipiell die gleichen Regeln wie für andere Unix-Varianten auch. Das System selbst ist jedoch vor der Firewallkonfiguration beim reinen Einsatz als Gateway-Rechner von einigen Systemdiensten zu befreien. Der Start von Server-Diensten durch den inetd sollte durch Auskommentieren der Zeilen in /etc/inetd.conf verhindert werden. Ebenso sind normalerweise aktive Dienste wie beispielsweise sendmail zu deaktivieren. Weiterhin muß man eventuell in der /etc/rc.d/rc.inet2 definierte Aufrufe von Daemon-Prozessen bis auf syslogd und inetd auskommentieren.

Um Linux als Firewallrechner einsetzen zu können, muß das System über mindestens zwei Netzwerk-Devices verfügen. Eines stellt dabei die Brücke nach außen dar, das andere liefert die Anbindung zum internen Netz. Als Netzwerk-Device können sowohl Internet-Karten als auch ein ISDN-Interface oder SLIP- und PPP-Devices dienen. Wichtig ist dabei jedoch, daß die Devices statisch vorhanden sein müssen und nicht dynamisch auftauchen und wieder verschwinden, was beispielsweise beim modularen Einsatz einer PPP-Verbindung der Fall wäre.

Linux Firewall Code

Der in Linux verwendete Firewallcode entstammt ursprünglich aus dem 4.4BSD-Kern von Daniel Boulet und Ugen Antsilevich. Alan Cox adaptierte diesen Code dann für Linux. Implemetiert ist ein sogenannter Block- sowie ein Forward-Filter. Ein Filter ist in der Lage, IP-Pakete zu untersuchen und sie entweder abzuweisen, zu verwerfen oder aber weiterzuleiten. Bei einer Zurückweisung zeigen ICMP-Pakete an, daß die IP-Pakete das Ziel nicht erreicht haben. Block-Filter prüfen alle vom Rechner empfangenen und versendeten Pakete. Die Paketfilterung basiert auf der Funktion ip_fw_chk() in /net/inet/ip_fw.c, die für Filter- sowie Zählfunktionen Verwendung findet. Verschiedene Funktionen rufen diese Grundroutinen auf. Gesendet wird über ip_queue_xmit() und empfangen mit ip_forward. Die Weiterleitung von IP-Paketen übernimmt ip_forward(). ip_fw_chk() überprüft einzelne IP-Pakete auf verschiedene Firewallkriterien. Ein vom Block-Filter zurückgewiesenes IP-Paket erzeugt eine "Port unreachable"-Nachricht.

Aufbau eines Paketfilters

Um Linux als Paketfilterfirewall einzusetzen, sind die Funktionen innerhalb des Kernels zu installieren. Dazu ist ein neuer Kernel zu konfigurieren. Über make config werden die Parameter CONFIG_IP_FIREWALL sowie CONFIG_IP_ACCT gesetzt. Beim Einsatz als Router ist außerdem CONFIG_IP_FORWARDING zu aktivieren.

Die Unterstützung für "transparent proxy" läßt sich nur dann anwählen, wenn unter dem Label "Code maturity level options" die Option "Prompt for development and/or incomplete code/drivers" eingeschaltet ist. Richtet man die Firewallsoftware unter yast (Suse-Distribution) ein, werden dabei folgende Dateien eingespielt:

- sbin/init.d/masquerade - Aufsetzen des Masquerading,

- /sbin/init.d/firewall - Aufsetzen der Firewall,

- /sbin/fcii - Daemon zur IP-Paket-Umleitung,

- /etc/fw-ssh - Liste von Rechnern mit ssh-Zugriff,

- /etc/fw-friends - Liste befreundeter Rechner,

- /etc/fw-inout - Rechner mit Internet-zugang

"Masquerading" bedeutet, daß lokale IP-Adressen versteckt werden. Nach draußen gilt als Absender-Adresse immer die des Masquerade-Rechners. Damit läßt sich beispielsweise die Struktur eines Netzwerkes verbergen. Auch der Einsatz von "wilden", nicht offiziellen IP-Adressen im lokalen Netz läßt sich damit realisieren, ohne daß diese nach außen bekannt werden. Zu bedenken ist auch ein Nachteil von Proxy-Firewall-gestützten Netzen. Durch die Abschottung der inneren Rechner sind keine direkten Server-, Talk- und Archie-Verbindungen oder E-Mails zu den Computern im geschützten Netz möglich.

Tools zur Firewallkonfiguration

Zur Konfiguration der Linux-Firewall gibt es einige frei verfügbare Tools, die viel Arbeit abnehmen und auch ungeübteren Systemadministratoren das Einrichten von Linux-Firewallsystemen ermöglichen. Ein in verschiedenen Distributionen enthaltenes Konfigurationstool ist ipf beziehungsweise ipfwadm von Jos Vos. Dieses liegt beispielsweise der Redhat und der Suse-Distribution bei. Ein ebenfalls in der Linux-Welt recht verbreitetes Tool zur Firewallkonfiguration ist fwc. Dieses Programm arbeitet sowohl im Dialogmodus als auch über Konfigurationsdateien.

Das TIS-Firewalltoolkit bietet mit vielen Beispieldateien und einer umfangreichen Dokumentation auch dem unge-übten Systemadministrator die Möglichkeit, auf Basis freier Software einen Firewall unter Linux aufzusetzen (http://www.erols.com/avenger/index.html).

Mit dem TIS-Toolkit läßt sich sogar das Gateway applikationsbezogen konfigurieren. Bei Beachtung der hier vorgestellten Tips und Hinweise sowie der Dokumentation zur verwendeten Linux-Distribution ist der Aufbau von Firewallsystemen keine Zauberei. Die Web- Sites der Linux-Distributeure (http://www.suse.de/patches/index.html) und Redhat (http://www.redhat.de/support/) bieten darüber hinaus mit Beispielkonfigurationsdateien und FAQs ergänzende Hinweise, die sich auf die speziellen Belange der verwendeten Packages beziehen. (us)