[OpenBSD]

[Vorige: Lijsten en Macro's] [Inhoud] [Volgende: Pakketen Filteren]

PF: Tabellen


Inhoudsopgave


Inleiding

Een tabel wordt gebruikt om een groep van IPv4 en/of IPv6 adressen te bevatten. Opzoekingen in een tabel zijn heel snel en verbruiken minder geheugen en processortijd dan lijsten. Om deze reden is een tabel ideaal om een grote groep adressen te bevatten aangezien de opzoekingstijd in een tabel die 50.000 adressen bevat slechts iets langer is dan voor n die 50 adressen bevat. Tabellen kunnen op de volgende manieren gebruikt worden:

Tabellen worden aangemaakt ofwel in pf.conf ofwel met pfctl(8).

Configuratie

In pf.conf worden tabellen aangemaakt met de table instructie. De volgende kenmerken mogen voor elke tabel gespecificeerd worden:

Voorbeeld:

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 kunnen ook als volgt gespecificeerd worden met een negatie (of "not") door ze te laten voorafgaan door een !

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

De goodguys tabel zal nu overeenstemmen met alle adressen in het 192.0.2.0/24 netwerk behalve 192.0.2.5.

Merk op dat tabelnamen altijd besloten zijn in < > haakjes.

Tabellen kunnen ook gevuld worden vanuit tekstbestanden die een lijst met IP adressen en netwerken bevatten:

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

block in on fxp0 from <spammers> to any

Het bestand /etc/spammers zou een lijst van IP adressen en/of CIDR netwerkblokken bevatten, n per lijn. Gelijk welke lijn die begint met # wordt behandeld als commentaar en wordt genegeerd.

Manipulatie met pfctl

Tabellen kunnen al draaiend gemanipuleerd worden met pfctl(8). Om bijvoorbeeld entries toe te voegen aan de <spammers> tabel die hoger aangemaakt werd:
# pfctl -t spammers -T add 218.70.0.0/16

Dit zal ook de <spammers> tabel aanmaken als die nog niet bestaat. Om de adressen in een tabel op te sommen:

# pfctl -t spammers -T show
Het -v argument kan ook gebruikt worden bij -Tshow om statistieken voor elke entry in de tabel te tonen. Om adressen uit een tabel te verwijderen:
# pfctl -t spammers -T delete 218.70.0.0/16

Lees voor meer informatie over het bewerken van tabellen met pfctl alstublieft de pfctl(8) man pagina.

Adressen Specificeren

Naast het gespecificeerd zijn met IP adres, kunnen hosts ook gespecificeerd worden met hun hostname. Wanneer de hostname vertaald kan worden naar een IP adres, worden alle resulterende IPv4 en IPv6 adressen in de tabel geplaatst. IP adressen kunnen ook in een tabel ingegeven worden door een geldige interfacenaam, interface groep of het self sleutelwoord te specificeren. De tabel zal dan alle IP adressen bevatten die respectievelijk toegekend zijn aan die interface of groep, of aan de machine (loopback adressen inbegrepen).

En beperking bij het specificeren van adressen is dat 0.0.0.0/0 en 0/0 niet zullen werken in tabellen. Het alternatief is om dat adres hard te coderen of een macro te gebruiken.

Adres Overeenstemming

Een adresopzoeking in een tabel zal de meest nauw overeenstemmende entry teruggeven. Dit laat toe tabellen aan te maken zoals:
table <goodguys> { 172.16.0.0/16, !172.16.1.0/24, 172.16.1.100 }

block in on dc0
pass  in on dc0 from <goodguys>

Gelijk welk pakket dat binnenkomt via dc0 zal zijn bronadres zien overeenstemmen in de tabel <goodguys>:

[Vorige: Lijsten en Macro's] [Inhoud] [Volgende: Pakketten Filteren]


[terug] www@openbsd.org
$OpenBSD: tables.html,v 1.25 2013/05/02 06:05:50 ajacoutot Exp $