05.02.2013 Aufrufe

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

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!