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
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
Signale and the <strong>Firewall</strong> Pipe<br />
Der <strong>Firewall</strong>-Dämon reagiert auf alle Signale, bis auf SIGKILL <strong>und</strong> SIGSTOP. Die Signale<br />
des Signalhandlers (kill) wirken sich auf alle Funktionen der <strong>Firewall</strong> aus.<br />
Über den Signalhändler werden Timeouts von dynamischen <strong>Firewall</strong>regeln <strong>und</strong> Variablen<br />
(Alarmfunktion) geregelt, das Programm beendet (SIGTERM), <strong>und</strong> eine Kopie initiiert<br />
(SIGUSR2), sowie Variablen in eine <strong>Firewall</strong> Pipe geschrieben.<br />
Das Signal SIGUSR2 wird von dem SFC Programm gesendet, z.B. um Variablen<br />
anzuzeigen (sfc show). Der <strong>Firewall</strong>-Dämon forkt dann, um einen Schnappschuß seines<br />
momentanen Zustandes festzuhalten. Andernfalls würden sich Variablen während des<br />
Auslesens verändern, der Zustand wäre nicht eindeutig. Da nun der User mit dem SFC<br />
Programm in Ruhe den Zustand betrachten <strong>und</strong> analysieren kann, kann auch der <strong>Firewall</strong>-<br />
Dämon weiter laufen. Es ist allerdings zu beachten, daß gerade bei Hispeed Netzwerken<br />
genügend RAM zur Verfügung steht.<br />
Die <strong>Firewall</strong> Pipe ist eine "named pipe" <strong>und</strong> wird dazu benutzt, um diejenigen Daten, wie<br />
Variablen, dynamische Regeln von der Kopie des <strong>Firewall</strong>-Dämons zu erhalten. Da die<br />
Daten aus dem <strong>Firewall</strong>-Device zu dem laufenden <strong>Firewall</strong>-Dämon gehören, kann nur über<br />
dieses Ersatzdevice der Zustand der momentanen Kopie des <strong>Firewall</strong>-Dämons abgerufen<br />
werden. Diese steht unter der Kontrolle des SFC Programms.<br />
Sehr wichtig ist zu erwähnen, daß der <strong>Firewall</strong>-Dämon niemals auf die Beendigung seiner<br />
Kinder (child) wartet. Damit keine Zombies entstehen, muß dieser immun gegen das<br />
Signal SIGCHLD sein. Er ignoriert dieses, da ein Returnwert der Children (error,<br />
successfully terminated) ohne Belang ist. Diese Verhalten veranlaßt das Betriebssytem,<br />
die Prozesstabelle zu bereinigen <strong>und</strong> belegte Plätze aus der Tablle zu entfernen. Das<br />
Aufsetzen der Signaltabelle erfolgt in der Funktion start_log.<br />
Starten externer Befehle<br />
Der <strong>Firewall</strong>-Dämon benutzt auf dem Host installierte Programme, um E-Mails o.ä. zu<br />
versenden, counter intelligence Programme zu starten, oder irgendwelche Prozesse<br />
auszuführen, die mit Userrechten ausgeführt werden können. Da der <strong>Firewall</strong>-Dämon ein<br />
unprivilegierter Prozess ist, kann er auch keine privilegierten Programme starten, oder<br />
Befehlsparameter übernehmen, die von einem anderen Host übermittelt wurden. Es sollte<br />
aber stets berücksichtigt werden, daß der <strong>Firewall</strong>-Dämon über die Kernelroutine<br />
"system()" Programme startet. Die Ausführung von Programmen übergeben an den<br />
<strong>Firewall</strong>-Dämon Rückgabewerte, die zu einem "buffer overflow" führen können. Aus<br />
diesem Gr<strong>und</strong> werden "control character" aus den Rückgabedaten herausgefiltert.<br />
Endlose Datenströme als Rückgabewert (dev/random) werden nach einem Timout<br />
beendet. Die maximale Zahl der Einträge in Prozeßtabellen ist begrenzt.<br />
Der Ereignis Mechanismus<br />
Der <strong>Firewall</strong>-Dämon muß viel mit Timeouts arbeiten. Da viele Ereignisse <strong>und</strong> deren Dauer<br />
von anderen Ereignissen abhängig sind, besitzt die <strong>Firewall</strong> einen Eventmanager.<br />
Timeouts werden hierin in einer linearen Liste festgehalten, der Event Queue<br />
(event_queue). Hierin werden auch Funktionsadressen <strong>und</strong> deren Parameter festgehalten.<br />
(struct timeout in sf_log.c). Um ein Ereignis hinzuzufügen, wird die add_event() Funktion<br />
benutzt. Sie benutzt den Alarm-Mechanismus <strong>und</strong> definiert den Timeout des nachsten<br />
Ereignisses. Wenn vom Signalhändler das SIGALARM Signal an die Funktion<br />
"catch_alarm()" gesendet wird, dann wird der nächstfolgende Timeout <strong>für</strong> einen Befehl<br />
abgearbeitet. Falls der <strong>Firewall</strong>-Dämon in diesem Moment zu beschäftigt sein sollte, wird<br />
die Ausführung des Befehls von der Funktion "process_alarm" ausgeführt. Der <strong>Firewall</strong>-<br />
Dämon wird hierzu unterbrochen.<br />
Erstellt von Doc Gonzo - http://kickme.to/plugins