Weiter Zurück [Inhalt] Online Suche im Handbuch LITTLE-IDIOT NETWORKING

14.27 Firewall Konfiguration

Die Firewall Konfiguration wird aus dem Konfigurationsfile (/etc/firewall.d/firewall.conf) ausgelesen, interpretiert und direkt in die Datenstrukturen des Firewall-Dämons eingelesen. Das Regelwerk wird über das Firewall-Device (/dev/firewall) an den Filter übergeben. Funktionen, die Regeln hinzufügen, löschen oder modifizieren, sind in der Datei sf_config.h definiert. Dieser Abschnitt beschreibt die Datenstrukturen im Firewall-Dämon. Die Datentypen sind in sf_global.h für den Firewall-Dämon und den Filter gemeinsam definiert. Definitionen allein für den Firewall-Dämon liegen in sf_config.h .

Filter Regeln

Der Parser speichert die Regeln in umgekehrter Reihenfolge in einer linearen Liste, sodaß dieser und der Kernel stets am Kopf der Liste Regeln hinzufügen können. Die ist insbesondere Notwendig für dynamische Firewallregeln. Die Zeiger für die Struktur der Variablen zeigt auf den Kopf der Liste. Jede Regel enthält einen Zeiger auf sich selber (ptr in union rule_id). Dieser Zeiger ist nur im Usermode definiert. Der Filter betrachtet diese ID als eindeutige Kennzeichnung für eine Regel. Hat der Filter eine Regel an den Firewall-Dämon übergeben, so kann der über die ID stets schnell auf die Regel erneut zugreifen, um dynamische Firewallregeln auszulesen, zu ändern o.ä.

Der Parser speichert die Kennzahl für den "notification level" in der Struktur level.num. Diese Levelnummer wird später in einen Zeiger auf die "notification" Struktur umgewandelt, unter Berücksichtigung der Konvertierungslevel in sf_config.c (convert_levels). Adressen, die von den Filterregeln benötigt werden, werden in einem Array sf_addr gespeichert. Jeder Eintrag in das Array besteht aus Adresse, Maske, Port, Portbereich...Nicht benötigte Werte werden auf NULL gesetzt. Die Struktur sf_fw zeigt auf dieses Array und benutzt hierzu einen Offset sowie Zählervariablen für Quell-IP, Ziel-IP und RIP Adresse. Die Struktur sf_addr[0].addr enthält die Zahl der IP - Nummern, die für das interne Netzwerk vergeben wurden. Die IP - Nummern werden in einem Array abgespeichert, welches mit 1 beginnt. Somit können Regeln, die sich auf die Schlüsselworte "inside" und "outside" beziehen, ohne Angabe der Portnummern auf den ersten Eintrag zeigen. Über Flags wird angezeigt, welches der beiden Schlüsselworte gültig ist.

Notification Struktur

Die Struktur "notification" enthält die Informationen über einen Level. Die unterschiedlichen Level werden in einer linearen Liste abgelegt, die die Variable "notify" als Anker benutzt. Die Struktur enthält Flags für die Benachrichtigung des SYSLOGD, e-Mail Benachrichtigung, SPY und RELEVEL. Nachrichten und Mailadressen werden in dynamisch zugeordneten Strings gespeichert. Für alle anderen Aktionen werden lineare Listen eingesetzt, daher ist die Zahl der in der Firewall Konfiguration enthaltenen Befehle beliebig, sie wird nur durch das zu Verfügung stehende RAM begrenzt. Befehle, wie let, if, exec...können somit in einem einzigen "notification level" in beliebiger Anzahl definiert werden. Der Level "relevel" wird wie ein "notification level" behandelt. Die Befehle "let" und "if" werden in einer Kette (let_if_chain) abgespeichert, damit diese stets in der richtigen Reihenfolge ausgeführt werden. Somit ist stets sichergestellt, daß "let if" Definitionen beliebig geschachtelt werden können. Die Tiefe aller Verschachtelungen ist nicht begrenzt.

Während das Konfigurationsfile abgearbeitet wird, zeigen die Variablen nicht immer auf die "notification structure", die ja gerade aufgebaut wird. Da "if" Befehle beliebig geschachtelt werden können, erfordert der Aufbau einer "if" Kette (if_chains) eine weitere Routine. Die Variable iftmp zeigt stets auf den niedrigsten Eintrag der if Struktur, die zu der zugehörigen "notification structure" gehört.

Konfiguration des Filters

Nach dem Einlesen des gesamten Konfigurationsfiles wird jede statische Regel an den Filter übergeben. Hierzu wird die Funktion sf_config_add eingesetzt. Die Funktion sf_config_addr übergibt das Array von Adressen in einem Stück. Der Firewall-Dämon überprüft dann die dynamischen Regeln. Immer dann, wenn eine dynamische Regel aktiviert wird, muß diese an den Filter übergeben werden. Wenn deren Gültigkeitszeitraum überschritten ist, wird die an die Funktion sf_config_delete übergeben und gelöscht. Das Array der IP-Adressen muß hierzu neu übergeben werden. Das ist immer dann erforderlich, wenn dessen Inhalte sich aufgrund einer Änderung der Regeln mit verändern. Die Funktion sf_config_clear löscht alle Filterregeln, bevor neue Regeln in den Filter geladen werden.

Zwei weitere Funktionen werden vom SFC Programm benutzt: sf_config_flush und sf_config_flush_all. Während die Funktion sf_config_flush_all die HASH Einträge aller aktiven TCP Verbindungen löscht, löscht die Funktion sf_config_flush nur diejenigen, die nicht erlaubt sind, entsprechend dem Regelwerk in der Firewall-Konfiguration.


Weiter Zurück [Inhalt] Online Suche im Handbuch LITTLE-IDIOT NETWORKING