Unterabschnitte

8.7 Arbeit mit dem Paketfilter

8.7.1 Hinzufügen von eigenen Chains und Regeln

Zur Manipulation des Paketfilters steht eine Reihe von Routinen zur Verfügung, mit deren Hilfe man Chains und Regeln hinzufügen und wieder löschen kann.

add_chain chain, add_nat_chain chain
Fügt eine Chain zur Filter- oder Nat-Tabelle hinzu.
flush_chain chain, flush_nat_chain chain
Entfernt alle Regeln aus einer Chain
del_chain chain, del_nat_chain chain
Entfernt eine Chain aus der Filter- oder Nat-Tabelle; Chains müssen leer sein, bevor sie gelöscht werden können und es darf auch keine Referenz mehr auf sie geben

add_rule, ins_rule, del_rule
Fügt Regeln am Ende einer Chain (add) bzw. in die chain (ins) ein und löscht Regeln wieder (del). Ein Aufruf sieht wie folgt aus:

add_rule table chain rule comment
ins_rule table chain rule position comment
del_rule table chain rule comment
wobei die Parameter folgende Bedeutung haben:
table
Die Tabelle, in deren Chain die Regel eingefügt werden soll
chain
Die Chain, in die die Regel eingefügt werden soll
rule
Die Regel, die eingefügt werden soll; das Format entspricht dem im Config-File verwendeten
position
Die Position, an der die Regel eingefügt werden soll
comment
Ein Kommentar, der zusammen mit der Regel angezeigt werden soll, wenn sich jemand den Paketfilter ansieht.

8.7.2 Einordnen in bestehende Regeln

Fli4l konfiguriert den Paketfilter mit einem gewissen Standardregelsatz. Will man eigene Regeln einfügen, wird man diese in der Regel nach dem Standardregelsatz einfügen wollen. Ebenfalls wird man wissen wollen, was denn die vom Nutzer gewünschte Aktion beim Verwerfen eines Paketes ist. Diese Informationen bekommt man für die FORWARD und INPUT Chain durch Aufruf zweier Funktionen wie im folgenden gezeigt:

get_defaults FORWARD # get default actions for forward chain
get_count    FORWARD # get number of default rules for forward

$res
res enthält die Position nach den default rules
$drop
drop enthält die Chain, in die verzweigt werden soll, wenn ein Paket verworfen wird
$reject
enthält die Chain, in die verzweigt werden soll, wenn ein Paket abgelehnt wird

8.7.3 Erweiterung der Paketfilter-Matches

Fli4l verwendet in den Paketfilterregeln die Syntax match:params, um zusätzliche Bedingungen an die Pakete zu stellen (siehe mac:, limit:, length:, prot:, ...). Will man zusätzliche Matches hinzufügen, wird das folgendermassen gemacht:

  1. Anlegen einer Datei opt/etc/rc.d/fwrules-<name>.ext. In diesem File steht in etwa folgendes:
    # extension is available
    foo_p=yes
    
    # the actual extension, adding matches to match_opt
    do_foo ()
    {
            param=$1
            get_negation $param
            match_opt="$match_opt -m foo $neg_opt --fooval $param"
    }
    

  2. Testen der Erweiterung
    > cd opt/etc/rc.d
    > sh test-rules.sh 'foo:bar ACCEPT'
    add_rule filter FORWARD 'foo:bar ACCEPT'
    iptables -t filter -A FORWARD -m foo --fooval bar -s 0.0.0.0/0 \
        -d 0.0.0.0/0 -m comment --comment foo:bar ACCEPT -j ACCEPT
    

  3. Aufnahme der Erweiterung und aller noch benötigten Dateien (iptables-Komponenten, netfilter-Kernelmodule) ins Archiv über einen der bekannten Mechanismen.
  4. Zulassen der Erweiterung in der Konfiguration durch Erweitern von PF_GENERIC_MATCH in einem *.exp file, z.B. wie folgt:

    +FW_GENERIC_MATCH='foo:bar' : ''
    
Das Fli4l-Team
3. Mai 2009