Die Netfilter Infrastruktur im Linux Kernel besteht zum einen aus Netfilter-Hooks und zum anderen aus Funktionen zur Registrierung und Verwaltung dieser. Netfilter-Hooks sind ,,Kontrollpunkte`` im Linux Netzwerkcode, für welche sich Kernelmodule registrieren können. Diese Kontrollpunkte sind so verteilt, dass alle Netzwerkpakete mindestens einen passieren müssen.
Im Folgendem werden die Netfilter Hooks für das Protokoll IPv4 beschrieben, da dies zur Zeit das am meisten genutzte ist.
Abb. 1.1:
Netfilter Hooks IPv4
|
 |
Abbildung 1.1 zeigt schematisch den Paketfluss durch den IPv4 Netzwerkstack. Links kommen Pakete vom Netzwerk,
rechts gehen sie zurück ins Netzwerk. Unten ist der lokale Rechner bzw. die lokalen Prozesse.
Die fünf Hooks in Abb. 1.1 heißen:
- NF_IP_PRE_ROUTING
- NF_IP_LOCAL_IN
- NF_IP_FORWARD
- NF_IP_POST_ROUTING
- NF_IP_LOCAL_OUT
Pakete, die von diesem Rechner nur weitergeleitet werden sollen, passieren Hook #1.
Entscheidet das Routing, dass das Paket nicht für den lokalen Rechner bestimmt ist,
passiert es Hook #3 und #4 und verlässt den Rechner wieder.
Für die lokale Zustellung bestimmte Pakete passieren Hook #1 und #2 und werden dann an den lokalen Prozess übergeben.
Lokal erstellte Pakete passieren zuerst Hook #5, darauf folgend wird eine Routingentscheidung getroffen
und die Pakete passieren Hook #4. Anschließend verlässt das Paket den Rechner.
Zur Registrierung der Hooks stehen die Funktionen nf_register_hook() und nf_unregister_hook() zur Verfügung. Um einen Netfilter-Hook zu registrieren, erzeugt man zunächst eine nf_hook_ops Struktur, die einen Funtionszeiger, das verwendete Protokoll, den Hook und eine Priorität enthält. Die durch den Funktionszeiger spezifizierte Funktion, wird dann für jedes, den registrierten Hook passierende Paket, aufgerufen und erhält einen Zeiger auf das Paket. Sie kann das Paket analysieren und muss abschließend ein Urteil über das Paket zurückgeben. Dabei sind folgende Rückgabewerte möglich:
- NF_ACCEPT = das Paket kann den Hook passieren
- NF_DROP = verwirft das Paket
- NF_STOLEN = das Paket darf nicht weitergereicht werden, das Modul ist jetzt für das Paket verantwortlich
- NF_QUEUE = das Paket wird an registrierte Queue-Handler übergeben
- NF_REPEAT = diesen Hook nochmal aufrufen
Klaus Rechert
2004-03-09