[Zurück: Listen und Makros]
[Inhalt]
[Weiter: Optionen [en] ]
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 finden Verwendung in den Quell-
und Zieladressfeldern in Filter,
scrub, nat
und Umleitungs (rdr) Regeln. Tabellen können jedoch
nicht als Umleitungsadressen in nat Regeln oder in den Routing
Optionen (route-to, reply-to, dup-to) der
Filterregeln verwendet werden. Tabellen werden entweder in der
/etc/pf.conf oder mit
pfctl(8) erzeugt.
Konfiguration
In der Datei pf.conf werden die Tabellen mittels der Anweisung
table erzeugt. Die folgenden Eigenschaften können zusätzlich
für jede Tabelle festgelegt werden:
- const - Der Inhalt der Tabelle kann nicht mehr verändert
werden nachdem sie erzeugt wurde. Ohne Vergabe dieser Eigenschaft ist es
möglich, jederzeit mit
pfctl(8) der Tabelle Adressen hinzuzufügen oder aus ihr
zu entfernen, selbst wenn das System unter einem
securelevel(7) von zwei oder höher läuft.
- persist - Veranlasst den Kernel die Tabelle im Speicher zu
behalten, selbst wenn kein Regel sie mehr verwendet. Ohne die Vergabe
dieser Eigenschaft entfernt der Kernel die Tabelle automatisch aus dem
Speicher sobald die letzte Regel die von der Tabelle Gebrauch machte
entfernt wurde.
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 in Verneinungsform mit vorangestelltem !
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 Adressen oder Netzwerkadressen 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
- 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 -Tadd 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 -Tshow
Die Option -v kann zusammen mit -Tshow 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 -Tdelete 218.70.0.0/16
Weitere Informationen wie Tabellen mit pfctl verändert weden
finden sich in der Man Page von
pfctl(8).
Adressen angeben
Ausser 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. Ausserdem kann eine IP Adresse durch die Angabe des Namens einer
gültigen Schnittstelle in eine Tabelle eingefügt werden. Durch
die Angabe des Schlüsselwortes self werden die Adressen
aller verfügbaren Schnittstellen eingefügt.
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 Quelladresse jeden Paketes das dc0 durchläuft wird mit den
Einträgen der Tabelle <goodguys> verglichen:
- 172.16.50.5 - die nächste Übereinstimmung ist 172.16.0.0/16;
das Paket entspricht einem Tabelleneintrag und wird die Schnittstelle passieren
- 172.16.1.25 - die nächste Übereinstimmung ist !172.16.1.0/24;
das Paket entspricht einem Tabelleneintrag, dieser ist jedoch in der
Verneinungsform (mit dem vorangestelltem !) angegeben; das Paket wird also
blockiert werden
- 172.16.1.100 - entspricht genau 172.16.1.100; das Paket entspricht
einem Tabelleneintrag und wird die Schnittstelle passieren
- 10.1.4.55 - kommt nicht in der Tabelle vor und wird blockiert
[Zurück: Listen und Makros]
[Inhalt]
[Weiter: Optionen [en] ]
www@openbsd.org
Originally [OpenBSD: tables.html,v 1.7 ]
$Translation: tables.html,v 1.2 2003/11/27 20:37:14 sl Exp $
$OpenBSD: tables.html,v 1.2 2003/11/29 18:32:59 horacio Exp $