[Zurück: Erste Schritte] [Inhalt] [Weiter: Tabellen]
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.
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]