[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 keep state

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 keep state
(2) pass in quick on $int_if proto tcp to port 80 tag \
        INT_NET_HTTP keep state
(3) pass in quick on $int_if from 192.168.1.5 keep state

Bovenop het aanbrengen van markeringen met filterregels, kunnen de nat, rdr en binat vertalingsregels ook markeringen aanbrengen op pakketten door gebruik van het tag sleutelwoord.

Zoeken naar Aangebrachte Markeringen

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

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 keep state

Vertalingsregels (nat/rdr/binat) kunnen ook het tagged sleutelwoord gebruiken om overeen te stemmen met pakketten.

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.

Filter- en vertalingsregels moeten nu geschreven worden om pakketten in het beleid in te delen.

rdr on $ext_if proto tcp from <spamd> to port smtp \
   tag SPAMD -> 127.0.0.1 port 8025
nat on $ext_if tag LAN_INET_NAT tagged LAN_INET -> ($ext_if)

block all
pass in on $int_if from $int_net tag LAN_INET keep state
pass in on $int_if from $int_net to $dmz_net tag LAN_DMZ keep state
pass in on $ext_if proto tcp to $www_server port 80 tag INET_DMZ keep state

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

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

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 keep state

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. rdr on $ext_if proto tcp from <spamd> to port smtp \ tag SPAMD -> 127.0.0.1 port 8025 nat on $ext_if tag LAN_INET_NAT tagged LAN_INET -> ($ext_if) block all pass in on $int_if from $int_net tag LAN_INET keep state pass in on $int_if from $int_net to $dmz_net tag LAN_DMZ keep state pass in on $ext_if proto tcp to $www_server port 80 tag INET_DMZ keep state pass in on $ext_if proto tcp to $mail_server port { smtp, pop3 } \ tag INET_DMZ keep state # beleid afdwingen -- pass/block gebaseerd op het gedefinieerde firewall # beleid. pass in quick on $ext_if tagged SPAMD keep state pass out quick on $ext_if tagged LAN_INET_NAT keep state pass out quick on $dmz_if tagged LAN_DMZ keep state pass out quick on $dmz_if tagged INET_DMZ keep state

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 brconfig(8) commando. Voorbeeld:
# brconfig 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.14 2007/05/15 19:23:25 jufi Exp $