[OpenBSD]

[Vorige: Adrespools en Load Balancing] [Inhoud] [Volgende: Loggen]

PF: Pakketmarkering (Policy Filtering)


Inhoudsopgave


Inleiding

Pakketmarkering is een manier om pakketten met een interne identifier te markeren die later kan gebruikt worden in filter- en veralingsregel criteria. Met markering is het mogelijk om dingen te doen zoals het aanmaken van "trusts" tussen interfaces en bepalen of pakketten verwerkt zijn door vertalingsregels. Het is ook mogelijk om regel-gebaseerd filteren te verlaten en te beginnen met beleid-gebaseerd filteren.

Markeringen Toekennen aan Pakketten

Om een markering aan een pakket toe te voegen, gebruikt u het tag sleutelwoord:
pass in on $int_if all tag INTERNAL_NET keep state

De markering INTERNAL_NET zal toegevoegd worden aan gelijk welk pakket dat overeenstemt met de bovenstaande regel.

Een markering kan ook toegekend worden door gebruik van een macro. Bijvoorbeeld:

name = "INTERNAL_NET"
pass in on $int_if all tag $name

Er zijn een stel van voorgedefinieerde macro's die ook kunnen gebruikt worden.

Deze macro's worden ontvouwen bij het laden van de regelset en NIET in runtime.

Markering volgt deze regels:

Neem de volgende regelset als voorbeeld.

(1) pass in on $int_if tag INT_NET
(2) pass in quick on $int_if proto tcp to port 80 tag INT_NET_HTTP
(3) pass in quick on $int_if from 192.168.1.5

Zoeken naar Aangebrachte Markeringen

Om te zoeken naar voorheen aangebrachte markeringen, gebruikt u het tagged sleutelwoord:
pass out on $ext_if tagged INT_NET

Buitengaande pakketten op $ext_if moeten gemarkeerd zijn met de INT_NET markering om overeen te stemmen met de bovenstaande regel. Inverse overeenstemming kan ook gedaan worden door de ! operator te gebruiken:

pass out on $ext_if ! tagged WIFI_NET

Beleid Filtering

Beleid filtering neemt een andere aanpak om een filterregelset te schrijven. Een beleid wordt gedefinieerd dat de regels opstelt voor welke types van verkeer doorgelaten worden en welke types geblokkeerd worden. Pakketten worden vervolgens ingedeeld in het beleid op basis van de traditionele criteria van bron/bestemmings-IP adres/poort, protocol, enz. Onderzoek bijvoorbeeld het volgende firewall beleid:

Merk op hoe het beleid alle verkeer omvat dat doorheen de firewall zal passeren. Het item tussen haakjes duidt de markering aan die gebruikt zal worden voor dat beleidsitem.

Regels moeten nu geschreven worden om pakketten in het beleid in te delen.

block all
pass out on $ext_if tag LAN_INET_NAT tagged LAN_INET nat-to ($ext_if)
pass in on $int_if from $int_net tag LAN_INET
pass in on $int_if from $int_net to $dmz_net tag LAN_DMZ
pass in on $ext_if proto tcp to $www_server port 80 tag INET_DMZ
pass in on $ext_if proto tcp from <spamd> to port smtp \
   tag SPAMD rdr-to 127.0.0.1 port 8025

Nu worden de regels die het beleid definiëren, ingesteld.

pass in  quick on $ext_if tagged SPAMD
pass out quick on $ext_if tagged LAN_INET_NAT
pass out quick on $dmz_if tagged LAN_DMZ
pass out quick on $dmz_if tagged INET_DMZ

Nu de gehele regelset opgesteld is, zijn veranderingen een kwestie van de indelingsregels te wijzigen. Als er bijvoorbeeld een POP3/SMTP server wordt toegevoegd aan de DMZ, zal het nodig zijn om indelingsregels voor POP3 en SMTP verkeer toe te voegen, zoals:

mail_server = "192.168.0.10"
...
pass in on $ext_if proto tcp to $mail_server port { smtp, pop3 } \
   tag INET_DMZ

Email verkeer zal nu doorgelaten worden als onderdeel van het INET_DMZ beleidsitem.

De volledige regelset:
# macro's
int_if  = "dc0"
dmz_if  = "dc1"
ext_if  = "ep0"
int_net = "10.0.0.0/24"
dmz_net = "192.168.0.0/24"
www_server = "192.168.0.5"
mail_server = "192.168.0.10"

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

# indeling -- deel pakketten in op basis van het gedefinieerde firewall
# beleid.
block all
pass out on $ext_if tag LAN_INET_NAT tagged LAN_INET nat-to ($ext_if)
pass in on $int_if from $int_net tag LAN_INET
pass in on $int_if from $int_net to $dmz_net tag LAN_DMZ
pass in on $ext_if proto tcp to $www_server port 80 tag INET_DMZ pass in on $ext_if proto tcp from <spamd> to port smtp \
   tag SPAMD rdr-to 127.0.0.1 port 8025
# beleid afdwingen -- pass/block gebaseerd op het gedefinieerde firewall # beleid. pass in quick on $ext_if tagged SPAMD pass out quick on $ext_if tagged LAN_INET_NAT pass out quick on $dmz_if tagged LAN_DMZ pass out quick on $dmz_if tagged INET_DMZ

Ethernet Frames Markeren

Markering kan uitgevoerd worden op het Ethernet-niveau indien de machine die markering/filtering doet ook fungeert als een bridge(4). Door bridge(4) filterregels te creëren die het tag sleutelwoord gebruiken, kan men PF laten filteren op basis van bron- of bestemmings-MAC adres. Bridge(4) regels worden aangemaakt met het ifconfig(8) commando. Voorbeeld:
# ifconfig bridge0 rule pass in on fxp0 src 0:de:ad:be:ef:0 \
   tag USER1

En vervolgens in pf.conf:

pass in on fxp0 tagged USER1

[Vorige: Adrespools en Load Balancing] [Inhoud] [Volgende: Loggen]


[terug] www@openbsd.org
$OpenBSD: tagging.html,v 1.17 2011/01/29 15:46:37 ajacoutot Exp $