![]() ![]() ![]() |
Online Suche im Handbuch | LITTLE-IDIOT NETWORKING |
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 .
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.
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.
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.
![]() ![]() ![]() |
Online Suche im Handbuch | LITTLE-IDIOT NETWORKING |