[OpenBSD]

[Vorige: Van Start Gaan] [Inhoud] [Volgende: Tabellen]

PF: Lijsten en Macro's


Inhoudsopgave


Lijsten

Een lijst laat de specificatie toe van meerdere gelijkaardige criteria binnen een regel. Bijvoorbeeld meerdere protocols, poortnummers, adressen, enz. Dus, in plaats van één filterregel te schrijven voor elk IP adres dat geblokkeerd moet worden, kan één regel geschreven worden door de IP adressen in een lijst te specificeren. Lijsten worden gedefinieerd door items binnen { } accolades te specificeren.

Wanneer pfctl(8) een lijst tegenkomt tijdens het laden van een regelset, creëert het meerdere regels, één voor elk item in de lijst. Bijvoorbeeld:

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

wordt ontvouwen in:

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

Meerdere lijsten kunnen binnen een regel gespecificeerd worden:

match in on fxp0 proto tcp to port { 22 80 } rdr-to 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 }

Merk op dat de komma's tussen items in de lijst optioneel zijn.

Lijsten kunnen ook geneste lijsten bevatten:

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

Behoed u voor constructies zoals de volgende, ook wel bekend als "uitgesloten lijsten", die een veel voorkomende fout zijn:

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

Hoewel de bedoelde betekenis gewoonlijk is om overeen te stemmen met "gelijk welk adres binnen 10.0.0.0/8, behalve 10.1.2.3", ontvouwt de regel tot:

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

wat overeenstemt met gelijk welk mogelijk adres. In plaats hiervan wordt beter een tabel gebruikt.

Macro's

Macro's zijn door de gebruiker gedefinieerde variabelen die IP adressen, poortnummers, interfacenamen, enz. kunnen bevatten. Macro's kunnen de complexiteit van een PF regelset verminderen en ook het onderhouden van een regelset veel gemakkelijker maken.

Macronamen moeten beginnen met een letter en mogen letters, cijfers en underscores bevatten. Macronamen mogen geen gereserveerde woorden zijn zoals pass, out of queue.

ext_if = "fxp0"

block in on $ext_if from any to any

Dit creëert een macro met de naam ext_if. Wanneer naar een macro verwezen wordt nadat hij aangemaakt is, wordt zijn naam voorafgegaan door een $ teken.

Macro's kunnen ook ontvouwen tot lijsten, zoals:

friends = "{ 192.168.1.1, 10.0.2.5, 192.168.43.53 }"

Macro's kunnen recursief gedefinieerd worden. Aangezien macro's niet ontvouwen worden binnen aanhalingstekens, moet de volgende syntaxis gebruikt worden:

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

De macro $all_hosts ontvouwt nu tot 192.168.1.1, 192.168.1.2.

[Vorige: Van Start Gaan] [Inhoud] [Volgende: Tabellen]


[terug] www@openbsd.org
$OpenBSD: macros.html,v 1.23 2013/11/03 08:09:59 ajacoutot Exp $