[OpenBSD]

[Zurück: Erste Schritte] [Inhalt] [Weiter: Tabellen]

PF: Listen und Makros


Inhalt


Listen

Eine Liste erlaubt die Aufstellung mehrfach vorkommender gleichartiger Angaben innerhalb einer Regel, z. B. mehrere Protokolle, Portnummern, Adressen usw. Statt für jede IP-Adresse, die geblockt werden soll, eine eigene Regel zu schreiben, kann eine einzige Regel so formuliert werden, dass die IP-Adressen in einer Liste angegeben sind. Die Syntax der Liste ist so definiert, dass die darin vorkommenden Objekte innerhalb von geschweiften Klammern { } stehen.

Wann immer pfctl(8) während des Einlesens der Regeln auf eine Liste trifft, erzeugt es mehrfache Regeleinträge daraus - einen für jeden Eintrag in der Liste. Zum Beispiel:

block out on fxp0 from { 192.168.0.1, 10.5.32.6 } to any

wird erweitert zu:

block out on fxp0 from 192.168.0.1 to any
block out on fxp0 from 10.5.32.6 to any

Innerhalb einer Regel können mehrfache Listen vorkommen. Listen sind nicht darauf beschränkt, nur in Filterregeln vorzukommen:

rdr on fxp0 proto tcp from any to any port { 22 80 } -> \
   192.168.0.6
block out on fxp0 proto { tcp udp } from { 192.168.0.1, \
   10.5.32.6 } to any port { ssh telnet }

Die Kommas zwischen den Listeneinträgen sind optional.

Listen können ebenfalls ineinander verschachtelt werden:

trusted = "{ 192.168.1.2 192.168.5.36 }"
pass in inet proto tcp from { 10.10.0.0/24 $trusted } to port 22

Hüte dich vor Konstrukten wie der folgenden doppelt negierten Liste, die einen typischen Fehler darstellen:

pass in on fxp0 from { 10.0.0.0/8, !10.1.2.3 }

Während die gemeinte Idee dahinter vielleicht »jede Adresse innerhalb 10.0.0.0/8, mit Ausnahme von 10.1.2.3« war, wird die Regel wie folgt erweitert:

pass in on fxp0 from 10.0.0.0/8
pass in on fxp0 from !10.1.2.3

was auf jede mögliche Adresse zutrifft. Stattdessen sollte eine Tabelle verwendet werden.

Makros

Makros sind benutzerdefinierte Variablen, die IP-Adressen, Portnummern, Interfacenamen usw. enthalten können. Makros vereinfachen die Komplexität eines PF-Regelwerkes und die Pflege der Regeln.

Makronamen müssen mit einem Buchstaben beginnen und können außer Buchstaben noch Zahlen und Unterstriche enthalten. Reservierte Bezeichnungen wie pass, out oder queue dürfen nicht als Makronamen verwendet werden.

ext_if = "fxp0"

block in on $ext_if from any to any

Dieser Eintrag erzeugt ein Makro mit dem Namen ext_if. Wird ein definiertes Makro später aufgerufen, wird dem Namen ein $ vorangestellt.

Makros können auch aus Listen bestehen, wie zum Beispiel:

friends = "{ 192.168.1.1, 10.0.2.5, 192.168.43.53 }"

Es ist möglich, Makros rekursiv zu definieren. Da die Werte der Makros, die innerhalb von Anführungszeichen stehen, nicht ausgelesen werden, muss die folgende Syntax verwendet werden:

host1 = "192.168.1.1"
host2 = "192.168.1.2"
all_hosts = "{" $host1 $host2 "}"

Das Makro $all_hosts enthält nun den Wert 192.168.1.1, 192.168.1.2.

[Zurück: Erste Schritte] [Inhalt] [Weiter: Tabellen]


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