[Wstecz: Pule adresów i kierowanie ruchem] [Spis treści] [Dalej: Logowanie]
pass in on $int_if all tag INTERNAL_NET keep state
Znacznik INTERNAL_NET zostanie dodany do każdego pakietu, który pasuje do powyższej regułki. Proszę zwrócić uwagę na zastosowanie klauzuli keep state; keep state (lub modulate state/ synproxy state) musi być użyte w regułkach pass, które pozostawiają tag w pakiecie.
Packet tagging odbywa się wg następujących zasad:
Rozważmy poniższy zestaw regułek:
(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
Obok regułek filtrujących znaczniki mogą być także dodawane do pakietów przez regułki NAT, czyli nat, rdr i binat, poprzez użycie słowa kluczowego tag.
pass out on $ext_if tagged INT_NET keep state
Pakiety chcące opuścić interfejs $ext_if niezależnie od konieczności spełnienia warunków regułki muszą posiadać znacznik INT_NET. Warunek nie posiadania danego znacznika oznacza się operatorem !:
pass out on $ext_if tagged ! WIFI_NET keep state
Proszę zauważyć, że przedstawiona powyżej polityka obejmuje cały ruch sieciowy przechodzący przez firewall. W nawiasach podane zostały znaczniki przypisywane dla określonego ruchu.
Mając określoną politykę filtrowania niezbęde będzie teraz napisanie odpowiednich regułek filtrujących oraz NAT, które uwzględniać będą powyższe założenia i odpowiednio przypisywać znaczniki.
rdr on $ext_if proto tcp from <spamd> to port smtp \
tag SPAMD -> 127.0.0.1 port 8025
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
Po zdefiniowaniu regułek przychodzi pora na określenie jaki ruch może zostać przepuszony, a jak ma być zablokowany.
pass in quick on $ext_if tagged SPAMD keep state
pass out quick on $ext_if tagged LAN_INET keep state
pass out quick on $dmz_if tagged LAN_DMZ keep state
pass out quick on $dmz_if tagged INET_DMZ keep state
Posiadając gotowy zestaw reguł, wprowadzanie wielu zmian odbywa się tylko przez dodanie lub odjęcie regułek klasyfikujących ruch. Na przykłąd jeśli zostanie dodany serwer POP3/SMTP do DMZ, wystarczy dodać regułkę podobną do tej:
mail_server = "192.168.0.10"
...
pass in on $ext_if proto tcp to $mail_server port { smtp, pop3 } \
tag INET_DMZ keep state
Ruch poczty elektornicznej zostanie przepuszczony jako, że należy do polityki INET_DMZ.
Kompletny zestaw reguł:
# makra 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" # klasyfikacja -- podział pakietów na podstawie polityki filtrowania # określonej dla firewalla. rdr on $ext_if proto tcp from <spamd> to port smtp \ tag SPAMD -> 127.0.0.1 port 8025 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 # wprowadzenie w życie -- przepuszczanie/blokowanie oparte na polityce # filtrowania określonej dla firewalla. pass in quick on $ext_if tagged SPAMD keep state pass out quick on $ext_if tagged LAN_INET keep state pass out quick on $dmz_if tagged LAN_DMZ keep state pass out quick on $dmz_if tagged INET_DMZ keep state |
# brconfig bridge0 rule pass in on fxp0 src 0:de:ad:be:ef:0 \
tag USER1
Aby wykorzystać znacznik USER1 można w pliku pf.conf umieścić poniższą regułkę:
pass in on fxp0 tagged USER1
[Wstecz: Pule adresów i kierowanie ruchem] [Spis treści] [Dalej: Logowanie]