Eine Firewall kontrolliert den Fluss der Daten in einem Netzwerk. Dank einfacher Konfiguration und umfangreichen Logging-Funktionen haben Sie mit Zeroshell schnell und einfach einen entsprechenden Dienst aufgesetzt.
Zeroshell-Workshop
| Teil 1 – Zeroshell aufsetzen | LU 07/2013, S. 22 | https://www.linux-community.de/29626 |
| Teil 2 – Routing und WLAN-Bridge | LU 08/2013, S. 38 | https://www.linux-community.de/29993 |
| Teil 3 — Firewall einrichten | LU 08/2013, S.**66 | https://www.linux-community.de/30220 |
Die Inbetriebnahme einer Firewall gehört bei jedem Netzwerk, das mit dem Internet kommuniziert, zu den grundlegenden Arbeiten. Zwar regulieren die meisten Router bereits den Datenverkehr, doch die wenigsten bieten eine Möglichkeit, die Regeln für die Pakete an eigene Bedürfnisse anzupassen. Zeroshell springt mit seinem Firewall-Dienst in die Bresche.
Filter und Tabellen
Der Firewall-Dienst von Zeroshell [1] setzt auf das bewährte Duo Netfilter und Iptables [2] auf, das unter Linux seit Kernel 2.4 als Paketfilter fungiert. Die beiden Techniken im Duett ermöglichen es, anhand von klar definierten Regeln Paketen zu prüfen und über deren weiteren Weg zu entscheiden. Jedes Paket durchläuft unterschiedliche Regelketten, bis eine Regel zutrifft und das System die passende Aktion ausführt.
Die drei Tabellen filter für den eigentlichen Paketfilter, nat für die Network Address Translation sowie mangle zum Markieren einzelner Pakete bilden die grundlegenden Funktionen ab. In ihnen verwalten Sie die Regellisten in die Kategorien INPUT, FORWARD und OUTPUT in der Tabelle filter und PREROUTING, OUTPUT und POSTROUTING in der Tabelle nat.
Die Tabelle mangle differenziert nach PREROUTING, INPUT, FORWARD, OUTPUT und POSTROUTING. Für jede einzelne Regel in diesen Ketten definieren Sie ein sogenanntes target, also ein Ziel, das festlegt, was mit dem betreffenden Datenpaket geschieht. Die häufigsten Targets sind ACCEPT, DROP und REJECT, die dafür sorgen, dass das System ein Paket akzeptiert, verwirft oder zurückweist.
Neben dem reinen Filtern von Paketen beherrscht das Duo Netfilter und Iptables zusätzlich die sogenannte Stateful Packet Inspection (SPI, [3]), die neben der Analyse der einzelnen Pakete den Zustand der Verbindung beim Prüfen mit einbezieht. Die Firewall merkt sich diesen in einer internen Tabelle und wendet auf die einzelnen Pakete nach dem Prüfen die vorgegebenen Regeln an. Den Status definiert das System über die Parameter NEW, ESTABLISHED, RELATED oder INVALID.
Kriterien
Um das Regelwerk sehr fein zu justieren, bietet Netfilter/Iptables außerdem die Möglichkeit, einzelne Kriterien auf die Quell- und Zieladressen der Datenpakete anzuwenden. Neben der Angabe der IP-Adressen besteht hier die Option, physikalisch vorhandene Netzwerkschnittstellen oder MAC-Adressen zu definieren. Zudem können Sie die Regeln auf unterschiedliche Protokolle und Verbindungs-Flags eingrenzen.
Durch die vielen Parameter wächst sich eine manuell angelegte und gepflegte Firewall bei größeren Netzwerken mit unterschiedlichsten Anwendungen sehr schnell zu einer komplexen und wartungsintensiven Angelegenheit für den Administrator aus. Bei zunehmender Komplexität schleichen sich zudem gerne Fehler ein.
Grafisches Management
Zeroshell vereinfacht durch eine grafische Oberfläche die Pflege der Firewall erheblich. Sie öffnen als Administrator die GUI über das Menü Security | Firewall links in der vertikalen Leiste der Oberfläche. Zeroshell wechselt nun in die Kette INPUT und zeigt einen leeren Bildschirm, in dem Sie Ihre individuellen Regeln definieren.
Um die Firewall durch eigene Regeln zu ergänzen, suchen Sie sich zunächst die entsprechenden Kategorie mittig oben im Fenster aus, indem Sie diese in der entsprechenden Schaltfläche Policy aktivieren. Anschließend definieren Sie die Regelkette, wobei es sich empfiehlt, in der Reihenfolge INPUT, FORWARD und OUTPUT vorzugehen.
Danach klicken Sie auf den kleinen Schalter Add oben rechts. In einem neuen Fenster finden Sie nun alle möglichen Optionen inklusive jener für die Stateful Packet Inspection (SPI). Da eine fehlerhaft eingestellte Firewall ein gravierendes Sicherheitsrisiko darstellt, empfiehlt sich ein detailliertes Wissen über die Funktionsweise von Netzwerken. Die beim Übertragen genutzten Protokolle sollten ebenfalls bekannt sein.
Vergegenwärtigen Sie sich zudem, in welcher Richtung Datenpakete die einzelnen Schnittstellen Ihres Zeroshell-Rechners durchlaufen, da die Angabe eines falschen Interface den Effekt des Filters zunichte macht.
Beispiel
Im nachfolgenden Beispiel (Abbildung 1) für eine Firewall-Regel geht es darum, von außen ins Intranet geleitete ICMP-Pakete zu unterbinden. Massenhafte Anfragen über das ICMP-Protokoll sind vor allem bei Skript-Kiddies immer noch das Mittel der Wahl, um schwächere Computersysteme mit einer löchrigen Firewall außer Gefecht zu setzen, indem sie betroffene Zielrechner mit solchen Anfragen überlasten.
Um eingehende Ping-Anfragen zu blockieren, definieren Sie zunächst in der Policy DROP und der INPUT-Kette das passende Interface. Hierbei handelt es sich nicht um die Schnittstelle, die ins Intranet führt, sondern um jenen Netzanschluss, der dem DSL-Gateway zugewandt ist. Anschließend tragen Sie in den Feldern Source IP und Destination IP jeweils gültige IP-Adressen mitsamt ihren Subnetzmasken ein.
Dabei dürfen Sie – sofern das Intranet aus mehreren angeschlossenen Computern und Peripheriegeräten besteht – komplette Netze als Quell- oder Ziel-IP angeben. Im nächsten Schritt wählen Sie links mittig im Fenster das betreffende Protokoll. Ein Klick auf das kleine Dreieck rechts neben der Anzeige Protocol Matching zeigt eine stattliche Liste.
Wählen Sie das ICMP-Protokoll und danach rechts daneben im Feld ICMP Type den Eintrag echo-request (ping). Im letzten Schritt definieren Sie noch ganz unten, was mit entsprechenden Paketen passiert, die von außen einen Ihrer Rechner ansprechen wollen. Hier stehen im Bereich ACTION die Alternativen ACCEPT, DROP, REJECT, CHAIN und RETURN zur Auswahl.
Im Beispiel empfiehlt es sich, die Aktion DROP zu wählen, da bei dieser das System das Paket verwirft, ohne dass der Quellrechner eine Rückmeldung erhält – für den absendenden Computer bleibt unklar, ob der angefragte Rechner existiert. Ein Feedback mithilfe der Aktion REJECT würde dem absendenden System die Existenz des Rechners bestätigen. Der Angreifer hätte die Möglichkeit, daraus Rückschlüsse zu ziehen, um weitere Aktivitäten zu planen.
Um die neue Regel in die Firewall einzugliedern, klicken Sie abschließend auf die Schaltfläche Confirm. Sofern die neue Regel korrekt konfiguriert ist, zeigt das System sie nun im Hauptfenster an. Ein Häkchen in der Spalte Active signalisiert, dass die Regel bereits aktiv ist (Abbildung 2).
Überwachung
Falls die Firewall oder ein Dienst nicht korrekt arbeitet, bietet Ihnen Zeroshell die Option, Fehler anhand von Log-Dateien aufzuspüren. Es zeigt diese Protokolle als übersichtliche Liste an. Klicken Sie dazu oben rechts im Konfigurationsfenster auf die Schaltfläche Show Log.
Zeroshell öffnet nun ein weiteres Fenster mit dem Log Viewer, in welchem Sie genaue Angaben zum Datenverkehr finden (Abbildung 3). Anhand der Angaben zur Schnittstelle sowie der Uhrzeit haben Sie Probleme schnell ermittelt. Log-Dateien anderer Dienste von Zeroshell erreichen Sie zusätzlich aus dem Hauptmenü heraus durch Anklicken von System | Logs.
Verfolger
Damit Sie die Verbindungen im Netzwerk stets im Blick behalten, ermöglicht Ihnen Zeroshell das Verfolgen der Kommunikation in Echtzeit. Über den Menüpunkt Firewall | Connection Tracking erreichen Sie den entsprechenden Dialog. Ab Werk ist das Logging ausgeschaltet, obwohl Zeroshell bereits die komplette Datenkommunikation visualisiert. Die Grafik fällt jedoch sehr unübersichtlich aus. Es bietet sich an, das Protokollieren anhand von Filterregeln vorzunehmen.
Oben mittig gibt es dazu eine Eingabezeile Filter, in der Sie ein Suchkriterium eingeben. Als solches kommen dabei IP-Adressen, Port-Nummern oder der Status der Verbindung infrage. Darüber hinaus haben Sie die Möglichkeit, die Liste durch einen Klick auf den Button Flush zunächst zu leeren, um neue Einträge zu filtern und so mehr Übersicht zu erhalten.
Um die Kommunikation im Netzwerk dauerhaft nach voreingestellten Kriterien zu verfolgen, bietet Zeroshell mithilfe des Logging-Dienstes die Option, gleich mehrere Filter zu definieren und die Log-Dateien somit klein zu halten. Um entsprechende Filter festzulegen, klicken Sie oben rechts im Einstellfenster des Trackings auf den Schalter Configure. Nun öffnet sich ein Eingabefenster, das maximal neun Regeln aufnimmt. Zunächst aktivieren Sie das Häkchen für Enabled, um die Protokollfunktion einzuschalten. Anschließend legen Sie verschiedene Filter an.
Syntax
Die Syntax der Regeln im Connection Tracking Logger folgt zwar sehr einfachen Prinzipien, die aber nicht dokumentiert sind. Das erfordert unter Umständen einige Experimente, um korrekte Log-Regeln anzulegen. Grundsätzlich sind Quellen (Source) und Ziele (Destination) anzugeben. Außerdem legen Sie fest, ob Sie Quelle und Ziel der jeweiligen Regel im Protokoll sehen möchten.
Um alle Pakete zu protokollieren, die einen Client im Netz 192.168.2.0/24 als Ziel haben, geben Sie als Filter dst=192.168.2.* ein. Als Kriterium wählen Sie am Ende der Zeile Include, und um den Filter zu aktivieren, setzen Sie vor der Zeile ein Häkchen.
Möchten Sie alle Pakete aus dem Protokoll ausschließen, die vom Quell-Port 80 stammen, so geben Sie in der entsprechenden Zeile sport=80 an, als Kriterium jedoch Exclude. Alle Pakete, die von der IP-Adresse 127.0.0.1 ausgehen, also von Localhost, erscheinen nicht in den Logs. Diese Regel ist bereits voreingestellt (Abbildung 4).
Sobald Sie Ihre Filterliste komplettiert und mit einem Klick auf den Button Save gespeichert haben, werden die Log-Dateien den Vorgaben entsprechend gefüllt. Um die aktuelle Log-Datei einzusehen, können Sie nun auf die Schaltfläche Show oben rechts im Konfigurationsfenster klicken. Es öffnet sich der Log Viewer, der Ihnen neben den protokollierten Paketen auch die aktiven Filterregeln anzeigt (Abbildung 5).
Proprietäre Protokolle
Durch das Internet haben sich neue Formen der Kommunikation entwickelt, in manchen Fällen abseits der herkömmlichen Standards. So entstanden neue, meist proprietäre und anwendungsspezifische Protokolle. Diese siedeln sich meist auf Layer 7 – der Anwendungsschicht – des ISO/OSI-Schichtenmodells an und verwenden eigene Ports. Vor allem Online-Spiele erweisen sich in dieser Hinsicht als sehr aktiv.
Zeroshell nimmt Ihnen auch in diesem Fall eine Menge Arbeit ab: So finden Sie in den Einstellungen zur Firewall eine Reihe Layer 7 Filters, die nach einem Klick auf den Button L7 Manager rechts in dieser Zeile den Layer 7 Filter Manager öffnet. Hier wählen Sie zunächst im Feld Group eine Protokollgruppe aus und rufen anschließend über ein spezifisches Protokoll aus dieser Gruppe, für das Sie eine Firewall-Regel anlegen möchten, nähere Informationen ab.
Die zugehörige Regel legen Sie über einen Klick auf das kleine Dreieck rechts neben der Zeile im Konfigurationsfenster der Firewall an. Sie wählen hier das gewünschte Protokoll aus und fügen es der aktiven Regelkette zu (Abbildung 6).
Firewall im Test
Nach Abschluss Ihrer Konfiguration empfiehlt es sich, die Einstellungen auf ihre Wirksamkeit hin zu überprüfen. Dazu bieten sich Online-Dienste, wie PC Flank [4] an, die verschiedene Tests vornehmen und Ihnen die Ergebnisse gleich am Bildschirm präsentieren. Ein erfolgreich durchlaufener Intensivtest sollte keine Schwachstellen der Firewall mehr anzeigen (Abbildung 7).
Fazit
Der Firewall-Dienst von Zeroshell eignet sich für lokale Netze jedweder Größe und nimmt Ihnen viel Arbeit ab. Die Konfiguration einer Firewall erfordert zwar nach wie vor detaillierte Kenntnisse, Zeroshell macht es Ihnen aber so einfach wie möglich.
Eine wirkungsvolle Firewall besteht zwar aus einer stattlichen Anzahl von Regeln, diese haben Sie jedoch in den Eingabemasken relativ schnell zusammen gestellt. Einmal angelegt, hilft die Logging-Funktion zudem, Schwachstellen ausfindig zu machen und im Bedarfsfall für forensische Zwecke zu dokumentieren.
Infos
[1] Zeroshell: http://www.zeroshell.org
[2] Netfilter/Iptables: http://www.netfilter.org
[3] Stateful Packet Inspection: http://de.wikipedia.org/wiki/Stateful_Packet_Inspection
[4] Online-Firewalltest: http://www.pcflank.com












