Firewall Handbuch für LINUX 2.0 und 2.2 - zurück
Firewall Handbuch für LINUX 2.0 und 2.2 - zurück
Firewall Handbuch für LINUX 2.0 und 2.2 - zurück
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
Array sf_addr gespeichert. Jeder Eintrag in das Array besteht aus Adresse, Maske, Port,<br />
Portbereich...Nicht benötigte Werte werden auf NULL gesetzt. Die Struktur sf_fw zeigt auf<br />
dieses Array <strong>und</strong> benutzt hierzu einen Offset sowie Zählervariablen <strong>für</strong> Quell-IP, Ziel-IP<br />
<strong>und</strong> RIP Adresse. Die Struktur sf_addr[0].addr enthält die Zahl der IP - Nummern, die <strong>für</strong><br />
das interne Netzwerk vergeben wurden. Die IP - Nummern werden in einem Array<br />
abgespeichert, welches mit 1 beginnt. Somit können Regeln, die sich auf die<br />
Schlüsselworte "inside" <strong>und</strong> "outside" beziehen, ohne Angabe der Portnummern auf den<br />
ersten Eintrag zeigen. Über Flags wird angezeigt, welches der beiden Schlüsselworte<br />
gültig ist.<br />
Notification Struktur<br />
Die Struktur "notification" enthält die Informationen über einen Level. Die<br />
unterschiedlichen Level werden in einer linearen Liste abgelegt, die die Variable "notify"<br />
als Anker benutzt. Die Struktur enthält Flags <strong>für</strong> die Benachrichtigung des SYSLOGD, e-<br />
Mail Benachrichtigung, SPY <strong>und</strong> RELEVEL. Nachrichten <strong>und</strong> Mailadressen werden in<br />
dynamisch zugeordneten Strings gespeichert. Für alle anderen Aktionen werden lineare<br />
Listen eingesetzt, daher ist die Zahl der in der <strong>Firewall</strong> Konfiguration enthaltenen Befehle<br />
beliebig, sie wird nur durch das zu Verfügung stehende RAM begrenzt. Befehle, wie let, if,<br />
exec...können somit in einem einzigen "notification level" in beliebiger Anzahl definiert<br />
werden. Der Level "relevel" wird wie ein "notification level" behandelt. Die Befehle "let" <strong>und</strong><br />
"if" werden in einer Kette (let_if_chain) abgespeichert, damit diese stets in der richtigen<br />
Reihenfolge ausgeführt werden. Somit ist stets sichergestellt, daß "let if" Definitionen<br />
beliebig geschachtelt werden können. Die Tiefe aller Verschachtelungen ist nicht<br />
begrenzt.<br />
Während das Konfigurationsfile abgearbeitet wird, zeigen die Variablen nicht immer auf<br />
die "notification structure", die ja gerade aufgebaut wird. Da "if" Befehle beliebig<br />
geschachtelt werden können, erfordert der Aufbau einer "if" Kette (if_chains) eine weitere<br />
Routine. Die Variable iftmp zeigt stets auf den niedrigsten Eintrag der if Struktur, die zu<br />
der zugehörigen "notification structure" gehört.<br />
Konfiguration des Filters<br />
Nach dem Einlesen des gesamten Konfigurationsfiles wird jede statische Regel an den<br />
Filter übergeben. Hierzu wird die Funktion sf_config_add eingesetzt. Die Funktion<br />
sf_config_addr übergibt das Array von Adressen in einem Stück. Der <strong>Firewall</strong>-Dämon<br />
überprüft dann die dynamischen Regeln. Immer dann, wenn eine dynamische Regel<br />
aktiviert wird, muß diese an den Filter übergeben werden. Wenn deren Gültigkeitszeitraum<br />
überschritten ist, wird die an die Funktion sf_config_delete übergeben <strong>und</strong> gelöscht. Das<br />
Array der IP-Adressen muß hierzu neu übergeben werden. Das ist immer dann<br />
erforderlich, wenn dessen Inhalte sich aufgr<strong>und</strong> einer Änderung der Regeln mit verändern.<br />
Die Funktion sf_config_clear löscht alle Filterregeln, bevor neue Regeln in den Filter<br />
geladen werden.<br />
Zwei weitere Funktionen werden vom SFC Programm benutzt: sf_config_flush <strong>und</strong><br />
sf_config_flush_all. Während die Funktion sf_config_flush_all die HASH Einträge aller<br />
aktiven TCP Verbindungen löscht, löscht die Funktion sf_config_flush nur diejenigen, die<br />
nicht erlaubt sind, entsprechend dem Regelwerk in der <strong>Firewall</strong>-Konfiguration.<br />
14.28 Der Packetfilter<br />
In diesem Abschnitt sind alle Details des eigentlichen Filters beschrieben (sf_filter.c).<br />
Jedesmal, wenn ein IP Paket gesendet oder empfangen wird, wird die Funktion<br />
sf_check_packet aufgerufen. Die Parameter sind ein Zeiger auf den Beginn des IP<br />
Headers, ein Zeiger auf das Device (Netzwerkinterface) <strong>und</strong> ein Feld von Flags, die<br />
anzeigen, ob eine Paket gesendet, empfangen oder weitergeleitet wird (forward). Die<br />
Funktion wird in den Files ip.c <strong>und</strong> tcp.c des Kernels aufgerufen. Die Rückgabewerte sind<br />
in den Files sf_kernel.h definiert, <strong>und</strong> informieren den Kernel darüber, ob ein Paket<br />
Erstellt von Doc Gonzo - http://kickme.to/plugins