[OpenBSD]

[Zurück: Listen und Makros] [Inhalt] [Weiter: Pakete filtern]

PF: Tabellen


Inhalt


Einführung

Eine Tabelle enthält eine Gruppe von IPv4- und/oder IPv6-Adressen. Es ist wesentlich schneller - und verbraucht weniger Prozessorzeit und Speicher - Adressen aus Tabellen auszulesen als aus Listen. Aus diesem Grund sind Tabellen ideal, um große Gruppen von Adressen aufzunehemen. Das Auslesen einer Tabelle, die 50.000 Adressen enthält, dauert nur wenig länger als das einer Tabelle mit 50 Adressen. Tabellen können auf folgende Art und Weise benutzt werden:

Tabellen werden entweder in der pf.conf oder mit pfctl(8) erzeugt.

Konfiguration

In der Datei pf.conf werden die Tabellen mittels der table-Direktive erzeugt. Die folgenden Eigenschaften können zusätzlich für jede Tabelle festgelegt werden:

Beispiel:

table <goodguys> { 192.0.2.0/24 }
table <rfc1918> const { 192.168.0.0/16, 172.16.0.0/12, \
   10.0.0.0/8 }
table <spammers> persist

block in on fxp0 from { <rfc1918>, <spammers> } to any
pass  in on fxp0 from <goodguys> to any

Adressen können auch mit dem Negierermodifizierer (oder ,not') angegeben werden:

table <goodguys> { 192.0.2.0/24, !192.0.2.5 }

Die Tabelle goodguys entspricht nun allen Adressen des 192.0.2.0/24er Netzwerkes mit Ausnahme der Adresse 192.2.0.5.

Der Name einer Tabelle steht immer zwischen spitzen Klammern < >.

Tabellen können den Inhalt einer Textdatei enthalten, die aus einer Aufzählung von IP- oder Netzwerk-Adressen besteht:

table <spammers> persist file "/etc/spammers"

block in on fxp0 from <spammers> to any

Die Datei /etc/spammers enthält eine Liste von IP-Adressen und/oder CIDR-Netzwerkbereichen - eine pro Zeile. Auch hier ist jede Zeile, die mit einem # beginnt, eine Kommentarzeile und wird ignoriert.

Manipulationen mit pfctl

Tabellen können während der Laufzeit mit pfctl(8) verändert werden. Hier ein Beispiel, um einen Eintrag zur weiter oben erzeugten Tabelle <spammers> hinzuzufügen:
# pfctl -t spammers -T add 218.70.0.0/16

Sollte die Tabelle <spammers> vorher noch nicht existiert haben, wird sie erzeugt. Der folgende Befehl dient dazu, die Adressen einer Tabelle aufzulisten:

# pfctl -t spammers -T show
Die Option -v kann zusammen mit -T show benutzt werden, um eine Statistik für die Tabelle zu zeigen. Der folgende Befehl dient dazu, Adressen aus einer Tabelle zu entfernen:
# pfctl -t spammers -T delete 218.70.0.0/16

Weitere Informationen, wie Tabellen mit pfctl verändert werden, finden sich in der Manualseite von pfctl(8).

Adressen angeben

Außer der IP-Adresse kann auch der Hostname angegeben werden. Sobald der Hostname in eine IP-Adresse aufgelöst wird, werden alle sich daraus ergebenden IPv4- und IPv6-Adressen in die Tabelle eingefügt. Außerdem kann eine IP-Adresse durch die Angabe des Namens eines gültigen Interfaces oder des self-Schlüsselwortes in eine Tabelle eingefügt werden. Die Tabelle enthält dann alle IP-Addressen, die dem Interface oder der Maschine zugewiesen sind (einschließlich der Loopback-Adressen).

Eine Ausnahme beim Angeben von Adressen ist, dass 0.0.0.0/0 und 0/0 nicht in Tabellen funktionieren. Die Alternative ist das Festlegen der Adresse oder die Benutzung eines Makros.

Wann eine Adresse zutrifft

Eine Adressabfrage an die Tabelle gibt den am besten zutreffenden Eintrag zurück. Dieses erlaubt, Tabellen wie folgt aufzubauen:
table <goodguys> { 172.16.0.0/16, !172.16.1.0/24, 172.16.1.100 }

block in on dc0 all
pass  in on dc0 from <goodguys> to any

Die Quell-Adresse jeden Paketes, das dc0 durchläuft, wird mit den Einträgen der Tabelle <goodguys> verglichen:

[Zurück: Listen und Makros] [Inhalt] [Weiter: Pakete filtern]


[zurück] www@openbsd.org
$OpenBSD: tables.html,v 1.20 2007/11/12 20:29:59 saad Exp $