#################################################################
# Zestaw regu pochodzcy z ksiki:
#
#  "OpenBSD. Tworzenie firewalli za pomoc PF"
#  Jacek Artymiak, November 2003, ISBN: 83-916651-1-9
#
#  Copyright (c) 2003-2004 Jacek Artymiak
#
#  Przykadowe reguy mona wykorzysta we wasnych konfiguracjach
#  zapory.
#
#  Prosz nie umieszcza kopii tych regu na wasnych stronach,
#  zamiast tego prosz umieszcza odnonik do oficjalnej wersji
#  tego pliku:
#
#  http://www.devguide.net/books/openbsdfw-02-ed/rules.txt
#
#################################################################

# --- page [115] ---

########################################################
# makrodefinicje
# ext_if -- nazwa zewntrznego interfejsu zapory
ext_if = "ne1"

# dmz_ad -- adres sieci DMZ
dmz_ad = "192.168.255.1/24"

########################################################
# reguy normalizacyjne: "scrub"
#-------------------------------------------------------

# przykad 1: normalizujemy wszystkie wchodzce pakiety
scrub in all

# przykad 2: normalizujemy wszystkie pakiety, wchodzce i wychodzce
scrub in all
scrub out all

# przykad 3: normalizujemy wszystkie wchodzce pakiety
#             na interfejsie zewntrznym przesane z dowolnego adresu
#             skierowane do segmentu DMZ
scrub in on $ext_if from any to $dmz_ad

# --- page [116] ---

########################################################
# opcje: "set"
#-------------------------------------------------------
# ograniczamy liczb fragmentw w pamici do 30 000

set limit frags 30000

# --- page [117 - 118] ---

########################################################
# makrodefinicje
#-------------------------------------------------------

# ext_if -- nazwa zewntrznego interfejsu zapory
ext_if = "ne1"

# dmz_ad -- adresy komputerw w DMZ
dmz_ad = "d.d.d.d/24"

########################################################
# opcje: "set"
#-------------------------------------------------------

# ograniczamy liczb fragmentw przechowywanych w pamici do 10 000
set limit frags 10000

########################################################
# reguy normalizujce: "scrub"

# przykad 1: defragmentacja pakietw wychodzcych opuszczajcych
#             interfejs zewntrzny zapory oraz zastpowanie ich
#             numerw identyfikacyjnych liczbami losowymi
scrub out on $ext_if all random-id

# przykad 2: defragmentacja pakietw wchodzcych przesyanych na
#             interfejs zewntrzny zapory, wyczyszczenie znacznika DF,
#             ustawienie TTL na 10, MSS na 1460 oraz zastosowanie
#             funkcji porzdkowania fragmentw
scrub in on $ext_if all no-df min-ttl 10 max-mss 1460 fragment reassemble

# przykad 3: defragmentacja pakietw wychodzcych opuszczajcych
#             interfejs zewntrzny zapory wyczyszczenie znacznika
#             DF, ustawienie TTL na 100, MSS na 1460 oraz
#             zastosowanie funkcji przycinania fragmentw
scrub out on $ext_if all no-df min-ttl 100 max-mss 1460 fragment crop

# przykad 4: defragmentacja pakietw wchodzcych przesyanych na
#             interfejs zewntrzny zapory, adresowanych do hostw
#             w segmencie DMZ, oczyszczenie znacznika DF, ustawienie
#             TTL na 10, MSS na 1460 oraz zastosowanie funkcji
#             odrzucania duplikatw
scrub in on $ext_if from any to $dmz_ad no-df min-ttl 10 max-mss 1460 fragment drop-ovl

# --- page [125] ---

########################################################
# makrodefinicje
#-------------------------------------------------------

# ext_if -- nazwa zewntrznego interfejsu zapory
ext_if = "ne1"

# ext_ad -- publiczny adres IPv4 przypisany zewntrznemu interfejsowi
#           zapory
ext_ad = "e.e.e.e/32"

# prv_ad -- pula prywatnych adresw IPv4 wykorzystywanych
#           w izolowanej sieci LAN
prv_ad = "p.p.p.p/24"

# nat_proto -- protokoy obsugiwane mechanizmem translacji NAT
nat_proto = "{tcp, udp, icmp}"

########################################################
# reguy NAT: "rdr", "nat", "binat"
#-------------------------------------------------------

nat on $ext_if inet proto $nat_proto from $prv_ad to any -> $ext_ad

# --- page [125 - 126] ---

########################################################
# makrodefinicje
#-------------------------------------------------------

# ext_if -- nazwa zewntrznego interfejsu zapory
ext_if = "ne1"

# ext_ad -- publiczny adres IPv4 przypisany zewntrznemu interfejsowi
#           zapory
ext_ad = "e.e.e.e/32"

# prv1_ad -- pula prywatnych adresw IPv4 wykorzystywanych
#            w izolowanej sieci LAN #1
prv_ad = "p.p.1.p/24"

# prv2_ad -- pula prywatnych adresw IPv4 wykorzystywanych
#            w izolowanej sieci LAN #2
prv2_ad = "p.p.2.p/24"

# nat_proto -- protokoy obsugiwane mechanizmem translacji NAT
nat_proto = "{tcp, udp, icmp}"

########################################################
# reguy NAT: "rdr", "nat", "binat"
#-------------------------------------------------------

nat on $ext_if inet proto $nat_proto from {$prv1_ad, $prv2_ad} to any -> $ext_ad

# --- page [126] ---

########################################################
# makrodefinicje
#-------------------------------------------------------

# ext_if -- nazwa zewntrznego interfejsu zapory
ext_if = "ne1"

# ext_ad -- publiczny adres IPv4 przypisany zewntrznemu interfejsowi
#           zapory
ext_ad = "e.e.e.e/32"

# prv1_ad -- pula prywatnych adresw IPv4 wykorzystywanych
#            w izolowanej sieci LAN #1
prv_ad = "p.p.1.p/24"

# prv2_ad -- pula prywatnych adresw IPv4 wykorzystywanych
#            w izolowanej sieci LAN #2
prv2_ad = "p.p.2.p/24"

# nat_proto -- protokoy obsugiwane mechanizmem translacji NAT
nat_proto = "{tcp, udp, icmp}"

########################################################
# reguy NAT: "rdr", "nat", "binat"
#-------------------------------------------------------

no nat on $ext_if inet proto $nat_proto from $prv1_ad to $prv2_ad
no nat on $ext_if inet proto $nat_proto from $prv2_ad to $prv1_ad
nat on $ext_if inet proto $nat_proto from {$prv1_ad, $prv2_ad} to any -> $ext_ad

# --- page [127] ---

########################################################
# makrodefinicje
#-------------------------------------------------------

# ext_if -- nazwa zewntrznego interfejsu zapory
ext_if = "ne1"

# ext1_ad -- pierwszy publiczny adres IPv4 przypisany zewntrznemu
#            interfejsowi zapory
ext1_ad = "e.e.e.e/32"

# ext2_ad -- drugi publiczny adres IPv4 przypisany zewntrznemu
#            interfejsowi zapory
ext2_ad = "e.e.e.f/32"

# prv1_ad -- pula prywatnych adresw IPv4 wykorzystywanych
#            w izolowanej sieci LAN #1
prv_ad = "p.p.1.p/24"

# prv2_ad -- pula prywatnych adresw IPv4 wykorzystywanych
#            w izolowanej sieci LAN #2
prv2_ad = "p.p.2.p/24"

# nat_proto -- protokoy obsugiwane mechanizmem translacji NAT
nat_proto = "{tcp, udp, icmp}"

########################################################
# reguy NAT: "rdr", "nat", "binat"
#-------------------------------------------------------

no nat $ext_if inet proto $nat_proto from $prv1_ad to $prv2_ad
no nat $ext_if inet proto $nat_proto from $prv2_ad to $prv1_ad
nat on $ext_if inet proto $nat_proto from $prv1_ad to any -> $ext1_ad
nat on $ext_if inet proto $nat_proto from $prv2_ad to any -> $ext2_ad

# --- page [127] ---

nat on $ext_if inet proto $nat_proto from $prv1_ad to any -> $ext1_ad port 10000:20000
nat on $ext_if inet proto $nat_proto from $prv2_ad to any -> $ext2_ad port 20001:30000

# --- page [127] ---

nat on $ext_if inet proto $nat_proto from $prv1_ad port 22 to any -> $ext1_ad port 8022

# --- page [127] ---

nat on $ext_if inet proto $nat_proto from $prv1_ad port 1024:65535 to any -> $ext1_ad port 1024:*

# --- page [128] ---

nat on $ext_if inet proto $nat_proto from $prv1_ad port 22 to any -> $ext1_ad static-port

# --- page [128] ---

nat on $ext_if inet proto $nat_proto from $prv1_ad to any -> $ext1_ad static-port

# --- page [128] ---

# translacja adresw hostw wewntrznych na zewntrzny adres
# interfejsu ext_if
nat on $ext_if inet proto tcp from $prv_ad to any -> ($ext_if)

# blokowanie wszystkich pocze z zewntrz na port 25
block out on $ext_if inet proto tcp from ($ext_if) to any port 25

# --- page [128] ---

nat pass on $ext_if inet proto tcp from $prv_ad to any port != 25 -> ($ext_if)

# --- page [130] ---

########################################################
# makrodefinicje
#-------------------------------------------------------

# ext_if -- nazwa zewntrznego interfejsu zapory
ext_if = "ne1"

# ext_ad -- publiczny adres IPv4 przypisany zewntrznemu interfejsowi
#           zapory
ext_ad = "e.e.e.e/32"

# www_ad -- prywatny adres IPv4 przypisany serwerowi HTTP w segmencie
#           DMZ
www_ad = "w.w.w.w/32"

########################################################
# reguy NAT: "rdr", "nat", "binat"
#-------------------------------------------------------

rdr on $ext_if inet proto tcp from any to $ext_ad port 80 -> $www_ad port 8080

# --- page [130] ---

########################################################
# makrodefinicje
#-------------------------------------------------------

# ext_if -- nazwa zewntrznego interfejsu zapory
ext_if = "ne1"

# prv_if -- nazwa interfejsu zapory poczonego z sieci LAN
prv_if = "ne2"

# ext_ad -- publiczny adres IPv4 przypisany zewntrznemu interfejsowi
#           zapory
ext_ad = "e.e.e.e/32"

# prv_ad -- pula prywatnych adresw IPv4 wykorzystywanych
#           w izolowanej sieci LAN
prv_ad = "p.p.p.p/24"

# www_ad -- prywatny adres IPv4 przypisany serwerowi HTTP w segmencie
#           DMZ
www_ad = "w.w.w.w/32"

########################################################
# reguy NAT: "rdr", "nat", "binat"
#-------------------------------------------------------

rdr on $ext_if inet proto tcp from any to $ext_ad port 80 -> $www_ad port 8080
rdr on $prv_if inet proto tcp from $prv_ad to $ext_ad port 80 -> $www_ad port 8080

# --- page [131] ---

########################################################
# makrodefinicje
#-------------------------------------------------------

# ext_if -- nazwa zewntrznego interfejsu zapory
ext_if = "ne1"

# prv_if -- nazwa interfejsu zapory poczonego z sieci LAN
prv_if = "ne2"

# ext_ad -- publiczny adres IPv4 przypisany zewntrznemu interfejsowi
#           zapory
ext_ad = "e.e.e.e/32"

# prv_ad -- pula prywatnych adresw IPv4 wykorzystywanych
#           w izolowanej sieci LAN
prv_ad = "p.p.p.p/24"

# www_ad -- prywatny adres IPv4 przypisany serwerowi HTTP w segmencie
#           DMZ
www_ad = "w.w.w.w/32"

########################################################
# reguy NAT: "rdr", "nat", "binat"
#-------------------------------------------------------

rdr on {$ext_if, $prv_if} inet proto tcp from any to $ext_ad port 80 -> $www_ad port 8080

# --- page [131] ---

########################################################
# makrodefinicje
#-------------------------------------------------------

# ext_if -- nazwa zewntrznego interfejsu zapory
ext_if = "ne1"

# prv_if -- nazwa interfejsu zapory poczonego z sieci LAN
prv_if = "ne2"

# prv_ad -- pula prywatnych adresw IPv4 wykorzystywanych
#           w izolowanej sieci LAN
prv_ad = "p.p.p.p/24"

# ch_ad -- prywatny adres IPv4 serwera poredniczcego HTTP
ch_ad = "w.w.w.w/32"

########################################################
# reguy NAT: "rdr", "nat", "binat"
#-------------------------------------------------------

rdr on $prv_if inet proto tcp from $prv_ad to any port 80 -> $ch_ad port 1080

# --- page [132] ---

########################################################
# makrodefinicje
#-------------------------------------------------------

# ...

# boss_ad -- adres uprzywilejowanego uytkownika sieci,
#            ktry czy si bez porednika HTTP
boss_ad = "p.p.p.b/24"

########################################################
# reguy NAT: "rdr", "nat", "binat"
#-------------------------------------------------------

no rdr on $prv_if inet proto tcp from $boss_ad to any port 80
rdr on $prv_if inet proto tcp from $prv_ad to any port 80 -> $ch_ad port 1080

# --- page [132] ---

rdr on ! ne1 inet proto tcp from ! s.s.s.s/32 to ! e.e.e.e/32 port 80 -> d.d.d.d/32 port 8080

# --- page [133] ---

rdr on $ext_if inet proto tcp from any to $ext_ad port 22 -> 192.168.1.1 port 1022
rdr on $ext_if inet proto tcp from any to $ext_ad port 25 -> 192.168.1.2 port 1025
rdr on $ext_if inet proto tcp from any to $ext_ad port 53 -> 192.168.1.3 port 1053
rdr on $ext_if inet proto tcp from any to $ext_ad port 80 -> 192.168.1.4 port 8080

# --- page [133] ---

binat on $ext_if inet proto tcp from 192.168.1.37 to any -> $ext_ad_1
binat on $ext_if inet proto tcp from 192.168.1.38 to any -> $ext_ad_2
binat on $ext_if inet proto tcp from 192.168.1.54 to any -> $ext_ad_3

# --- page [136] ---

block in all
block out all

# --- page [136] ---

pass in all
pass out all

# --- page [136] ---

block in all
block out all

# --- page [137] ---

##############################################################
# makrodefinicje
# -----------------------------------------------------------
# ext_if - nazwa zewntrznego interfejsu zapory
#
ext_if = "ne1"
# ext_ad - adres zewntrznego interfejsu zapory
#
ext_ad = "e.e.e.e/32"

#############################################################
# reguy filtrowania  pakietw: "antispoof", "block", "pass"
#------------------------------------------------------------
# zatrzymaj wszystkie pakiet wejciowe
block in all
# zatrzymaj wszystkie pakiety wejciowe z portu 113 (auth)
# i zwr nadawcy komunikat ICMP destination-unreachable
block return-icmp in quick on $ext_if proto tcp \
    from any to $ext_ad port auth
# przepu pakiety wejciowe z portu 25 (smtp)
pass in quick on $ext_if \
    from any to $ext_ad port smtp

# --- page [138] ---

#############################################################
# makrodefinicje
# -----------------------------------------------------------
# ext_if - nazwa zewntrznego interfejsu zapory
#
ext_if = "ne1"
# ext_ad - adres zewntrznego interfejsu zapory
#
ext_ad = "e.e.e.e/32"

#############################################################
# reguy filtrowania  pakietw: 'antispoof', 'block', 'pass'
#------------------------------------------------------------
block return-rst in quick on $ext_if proto tcp \
    from any to $ext_ad port auth

# --- page [138] ---

block return-rst (ttl 100) in quick on $ext_if proto tcp \
    from any to $ext_ad port auth

# --- page [138] ---

block return in quick on $ext_if \
    from any to $ext_ad

# --- page [139] ---

#############################################################
# opcje: set
# -----------------------------------------------------------
# odpowiada na zablokowane pakiety TCP za pomoc TCP RST a na
# pakiety UDP za pomoc ICMP destination-unreachable
set block-policy return

#############################################################
# reguy filtrowania  pakietw: "antispoof", "block", "pass"
# -----------------------------------------------------------
# zatrzymaj i porzu pakiety (nadpisuje set block-policy return)
block drop in quick on $ext_if proto tcp \
    from any to $ext_ad port auth

# --- page [140] ---

pass in log-all quick on $ext_if proto tcp from any \
    to $ext_ad port 80

# --- page [140] ---

pass in quick on $ext_if proto tcp from any \
    to $ext_ad port 80

# --- page [140] ---

block in on $ext_if
block in log-all on $ext_if
block in log-all quick on $ext_if

# --- page [141] ---

pass in on $ext_if route-to ($int_if $int_ad) all
pass in on $ext_if route-to $int_if all

# --- page [141] ---

# ext_if - zewntrzny interfejs na zaporze
# log_if - interfejs do maszyny zapisujcej dziennik 
pass in on $ext_if dup-to $log_if all
pass out on $ext_if dup-to $log_if all

# --- page [142] ---

# ext_if - zewntrzny interfejs na maszynie zapisujcej dziennik 
block in log on $ext_if all

# ext_if - zewntrzny interfejs na maszynie zapisujcej dziennik
# log_keeper - adres maszyny zapisujcej dziennik
block in log on $ext_if all
block return-icmp in log quick on $ext_if proto tcp \
    from any to $log_keeper port auth
pass in log on $ext_if from any to $log_keeper port ssh

# --- page [142] ---

block in quick inet6 all
block out quick inet6 all

# --- page [142] ---

block in all
pass in inet all
pass out inet all

# --- page [143] ---

pass in quick on $ext_if proto tcp

# --- page [143] ---

$block_ads = \
    {10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 \
     224.0.0.0/4, 240.0.0.0/4, 127.0.0.0/8, 0.0.0.0}
block in quick on $ext_if from $block_ads

# --- page [144] ---

block in quick on $ext_if from ! $allow_ads to any

# --- page [144] ---

block in on $ext_if from any to $log_ad
block in quick on $ext_if from $blockIPs to any

# --- page [144] ---

block in on $ext_if from any to any
block in on $ext_if all

# --- page [144 - 145] ---

block in on $ext_if proto tcp from any port 80 ...

# --- page [144] ---

# blokuje pakiety wysyane z portu 80
block in on $dmz_if proto tcp from $dmz_www_ad port = 80 \
    to any 

# blokuje pakiety wysyane z dowolnego portu z wyjtkiem 80
block in on $dmz_if proto tcp from $dmz_www_ad port != 80 \
    to any 

# blokuje pakiety wysyane z dowolnego portu o numerze mniejszym  ni 80
block in on $dmz_if proto tcp from $dmz_www_ad port < 80 \
    to any 

# blokuje pakiety wysyane z portu o numerze nie wikszym ni 80
block in on $dmz_if proto tcp from $dmz_www_ad port <= 80 \
    to any 

# blokuje pakiety wysyane z portu o numerze wikszym ni 80
block in on $dmz_if proto tcp from $dmz_www_ad port > 80 \
    to any 

# blokuje pakiety wysyane z portu o numerze nie mniejszym ni 80
block in on $dmz_if proto tcp from $dmz_www_ad port >= 80 \
    to any 

# blokuje pakiety wysyane z portu o numerze wikszym ni 80
# i mniejszym ni 1024
block in on $dmz_if proto tcp from $dmz_www_ad port 80 >< 1024 \
    to any 

# blokuje pakiety wysyane z portu o numerze mniejszym ni 80
# lub wikszym ni 1024
block in on $dmz_if proto tcp from $dmz_www_ad port 80 <> 1024 \
    to any 

# --- page [145] ---

pass in on $ext_if proto tcp from any os "Windows"

# --- page [145] ---

pass in on $ext_if proto tcp from any os "Windows 2000"

# --- page [146] ---

pass in on $ext_if proto tcp from any os "Windows 2000 SP4"

# --- page [146] ---

pass in on ne1 proto tcp from any os "Windows 2000 SP4"

# --- page [146] ---

pass in on ne1 proto tcp from any os "unknown"

# --- page [146] ---

set fingerprints "/etc/pf.os-special-modifications"

# --- page [147] ---

pass in on $ext_if from any to $dmz_www_ad

# --- page [147] ---

pass in on $ext_if proto tcp from any to \
    $ext_www_ad port $ext_www_port
pass in on $ext_if proto tcp from any to \
    $ext_smtp_ad port $ext_smtp_port
pass in on $ext_if proto tcp from any to \
    $ext_ftp_ad port $ext_ftp_port

# --- page [147] ---

pass out on $ext_if proto {tcp, udp} \
    from any to any user joe keep state

pass out on $ext_if proto {tcp, udp} \
    from any to any user > 10000 group users keep state

# --- page [149] ---

# FIN musi by ustawione, ignoruj reszt
block in proto tcp all flags F/F
# FIN nie moe by ustawione, ignoruj reszt
block in proto tcp all flags /F
# FIN musi by ustawione, reszta nie moe by ustawiona
block in proto tcp all flags F
# FIN musi by ustawione, ACK nie moe by ustawione, ignoruj reszt
block in proto tcp all flags F/FA
# FIN i ACK nie mog by ustawione, ignoruj reszt
block in proto tcp all flags /FA

# --- page [149] ---

pass in inet proto icmp icmp-type 8 code 0 keep state

# --- page [149] ---

pass in inet6 proto icmpv6 icmpv6-icmp-type 8 code 0 keep state

# --- page [150] ---

pass out on $ext_if proto tcp all keep state

# --- page [150] ---

pass out proto tcp all keep state
pass in proto tcp all port 80 keep state

# --- page [150] ---

pass in proto tcp all port 80 flags S/SA keep state
pass out proto tcp all flags S/SA keep state

# --- page [151] ---

pass out inet proto icmp all icmp-type echoreq keep state

# --- page [151] ---

pass in proto tcp all port 80 flags S/SA keep state
pass out proto tcp all flags S/SA keep state

# --- page [151] ---

pass in proto tcp all port 80 flags S/SA modulate state
pass out proto tcp all flags S/SA modulate state

p# --- page [151] ---

ass in proto tcp all port 80 flags S/SA synproxy state

# --- page [152] ---

#############################################################
# opcje: "set"

# przykad 1. ustawia limit czasu poczenia stanowego na 20 
# sekund po odebraniu pierwszego pakietu od maszyny 
# inicjalizujcej to poczenie
set timeout tcp.first 20

# przykad 2. ustawia limit czasu  poczenia stanowego na 20
# sekund po odebraniu pierwszego pakietu od maszyny
# inicjalizujcej to poczenie, a potem, jeeli poczenie
# zostao ustanowione, kady pakiet, ktrego stan pasuje do
# stanu okrelonego dla tego poczenia, ustawia na nowo 
# warto limitu czasu  tego poczenia na 10 sekund. Jest to bardzo 
# agresywne podejcie i spowoduje duy procent zerwanych pocze 
# w przypadku wolnych czy.
set timeout tcp.first 20
set timeout tcp.established 10

# przykad 3. jest taki sam jak 2.,  tym razem jednak obie reguy 
# zostay poczone w jednym wierszu (kolejno regu 
# protocol.state nie jest znaczca).
set timeout { tcp.first 20, tcp.established 10 }

# --- page [153] ---

set timeout { adaptive.start 5000, adaptive.end 20000 }

# --- page [153] ---

#############################################################
# opcje: "set"

set timeout interval 20
set timeout frags 20

# --- page [154] ---

pass in proto tcp all port 80 flags S/SA \
    modulate state (max 1000, tcp.established 120, tcp.closing 10)

# --- page [154] ---

#############################################################
# makrodefinicje
#------------------------------------------------------------
# ext_if - nazwa zewntrznego interfejsu zapory
ext_if = "ne1"

#############################################################
# reguy filtrowania pakietw: "antispoof", "block", "pass"
#------------------------------------------------------------

pass in on $ext_if all allow-opts

# --- page [154] ---

pass in on rl0 all label "incoming"
pass out on rl0 all label "departing"

# --- page [156] ---

antispoof for ne1

# --- page [156] ---

# pakiety pochodzce z prywatnej, wewntrznej
# sieci ($prv_ad) wysyane pod dowolny adres na port 80, przechodzce przez 
# interfejs czcy prywatn sie z zapor ($prv_if) przekieruj 
# na port 8080 podrcznego serwera o adresie $ch_ad 

rdr on $prv_if proto tcp from $prv_ad \
    to any port 80 -> $ch_ad port 8080
pass in on $prv_if proto tcp from $prv_ad \
    to $ch_ad port 8080

# --- page [156] ---

# komputery poddane NAT z prywatnej sieci ($prv_ad) na interfejsie
# czcym zapor z internetem ($ext_if) uywaj zewntrznego adresu zapory ($ext_ad)

nat on $ext_if from $prv_ad to any -> $ext_ad
pass out on $ext_if proto tcp from $ext_ad to any

# --- page [157] ---

#############################################################
# workstation_int - wewntrzny adres IP maszyny poddanej regule binat.
# workstation_ext - zewntrzny adres IP maszyny poddanej regule binat

binat on $ext_if from $workstation_int to any -> $workstation_ext
pass in on $ext_if proto tcp from any to $workstation_int
pass out on $ext_if proto tcp from $workstation_ext to any

# --- page [163] ---

# kotwica ziggy bdzie przetwarzana tylko wtedy, gdy pakiety 
# zostan dopasowane do warunkw filtrowania opisanych za kotwic ziggy
anchor ziggy in on ne1 inet proto tcp \
    from any port 80 to any port > 1023

# --- page [167] ---

rdr on ne0 proto tcp from any to $ext_ad port 80 \
    -> { 10.1.1.1/24 } round-robin

# --- page [167] ---

rdr on ne0 proto tcp from any to $ext_ad port 80 \
    -> { 10.1.1.1/24, 192.168.22.5/8, 10.34.2.76 } round-robin

# --- page [167] ---

rdr on ne0 proto tcp from any to $ext_ad port 80 \
    -> { 10.1.1.45, 192.168.22.5, 10.34.2.76 } round-robin

# --- page [167] ---

rdr on ne0 proto tcp from any to $ext_ad port 80 \
    -> 10.4.3.6/29 random

# --- page [168] ---

rdr on ne0 proto tcp from any to $ext_ad port 80 \
    -> 10.4.3.6/29 source-hash

# --- page [168] ---

rdr on ne0 proto tcp from any to $ext_ad port 80 \
    -> 10.4.3.6/29 source-hash lancuchmieszajacymozebycdowolny

# --- page [168] ---

# przekierowanie pocze:
# od 192.168.1.1 do 10.4.3.1
# od 192.168.1.2 do 10.4.3.2
# od 192.168.1.3 do 10.4.3.3
# i tak dalej...
nat on ne0 proto tcp from 192.168.1/24 to any \
    -> 10.4.3/24 bitmask

# --- page [168] ---

nat on $ext_if from 10.3.3.1/24 to any \
    -> 192.168.23.34/31 source-hash

# --- page [170] ---

# definiuje kolejk nadrzdn i daje jej pod zarzdzanie 
# 45Mb z caego pasma; definiuje cztery kolejki podrzdne: ssh, 
# www, other (domylna), ctrl (sterujca); zarzdzana jest za 
# pomoc PRIQ
altq on $ext_if priq bandwidth 45Mb queue {ssh, www, other, ctrl}

# definiuje kolejk nadrzdn z pasmem 45 Mb i szecioma
# kolejkami podrzdnymi: accounting, developers, managers, 
# users, other (domylna), ctrl (sterujca); zarzdzana jest za 
# pomoc CBQ
altq on $ext_if cbq bandwidth 45Mb \
    queue {accounting, developers, managers, users, other, ctrl}

# definiuje kolejk nadrzdn  z pasmem 45 Mb i szecioma
# kolejkami podrzdnymi: accounting, developers, managers, 
# users, other (domylna), ctrl (sterujca); zarzdzana jest za 
# pomoc HFSC
altq on $ext_if hfsc bandwidth 45Mb \
    queue {accounting, developers, managers, users, other, ctrl}

# --- page [172] ---

pass out quick on $ext_if from any to any queue users

p# --- page [172] ---

ass out quick on $ext_if from any to any queue {users, admins}

# --- page [172 - 173] ---

# MAKRODEFINICJE
# zewntrzne interfejsy
ext_if = "ne1"

# DEFINICJA KOLEJKI NADRZDNEJ
# definiuje kolejk nadrzdn PRIQ: pasmo 45 Mb i pi kolejek
# podrzdnych: dns, ssh, www, mail, other (domylna).
# Kolejno kolejek podrzdnych jest nieistotna
altq on $ext_if priq bandwidth 45Mb \
    queue {dns, ssh, www, mail, other}

# DEFINICJE KOLEJEK PODRZDNYCH
# Zapytania DNS posiadaj wysoki priorytet, poniewa musz
# by wykonane tak szybko, jak to moliwe
queue dns priority 14 priq(red)
# Poczenia SSH maj jeden z wysokich priorytetw, poniewa
# czsto uywane s w celach administracyjnych
queue ssh priority 13 priq(red)
# Poczeniom pocztowym nadaje si niszy priorytet ni SSH,
# lecz wyszy ni HTTP/HTTPS, poniewa chcemy wysya/odbiera
# nasze listy tak szybko, jak to moliwe
queue mail priority 12 priq(red)
# Poczenia HTTP/HTTPS maj niszy priorytet, poniewa nie s
# tak bardzo czue na opnienia jak inne
queue www priority 11 priq(red)
# Inne poczenia przypisane s domylnej kolejce
queue other priority 10 priq(default)

# REGUY FILTROWANIA PRZYPISANE KOLEJKOM
# Pakiety wysyane na port 53 (DNS) zostan przypisane kolejce 
# dns (naley zauway uycie keep state zamiast synproxy state 
# lub modulate state, poniewa pakiety UDP mog by poddane
# filtrowania tylko z uyciem keep state).
pass out quick on $ext_if inet proto udp \
    from any to any port 53 keep state queue dns
pass out quick on $ext_if inet proto tcp \
    from any to any port 53 synproxy state queue dns
# pakiety wysane na port 22 (SSH), 23 (TELNET) zostan przypisane
# do kolejki ssh
pass out quick on $ext_if inet proto tcp \
    from any to any port (22, 23) synproxy state queue ssh
# pakiety wysane na port 25 (SMTP), 109 (POP2), 110 (POP3), 
# 143 (IMAP), 220 (IMAP3), 995 (POP3S) zostan przypisane do
# kolejki mail
pass out quick on $ext_if inet proto tcp \
    from any to any port {25, 109, 110, 143, 220, 995} \
    synproxy state queue mail
# pakiety wysane na port 80 (HTTP), 443 (HTTPS) zostan 
# przypisane kolejce www
pass out quick on $ext_if inet proto tcp \
    from any to any port {80, 443) synproxy state queue www

# --- page [174 - 175] ---

# MAKRODEFINICJE
# zewntrzny interfejs
ext_if = "ne1"
# maszyny administratorw
admins_ad = "{a.a.a.a, a.a.a.b}"
# maszyny ksigowych
accounts_ad = "{a.a.a.c, a.a.a.d, a.a.a.e}"
# maszyny programistw
coders_ad = "{a.a.a.f, a.a.a.g, a.a.a.h}"
# maszyny uytkownikw
users_ad = "{a.a.a.i, a.a.a.j, a.a.a.k}"

# DEFINICJA KOLEJKI NADRZDNEJ
# definiuje kolejk nadrzdn PRIQ: pasmo 45 Mb i pi kolejek
# podrzdnych: admins, accounts, coders, users, other (domylna)
altq on $ext_if priq bandwidth 45Mb \
    queue {admins, accounts, coders, users, other}

# DEFINICJE KOLEJEK PODRZDNYCH
# administratorzy otrzymuj najwyszy priorytet
queue admins priority 14 priq(red)
# dzia finansowy
queue accounts priority 13 priq(red)
# programici
queue coders priority 12 priq(red)
# zwykli uytkownicy
queue users priority 11 priq(red)
# inne
queue other priority 10 priq(default)

# REGUY FILTROWANIA PRZYPISANE KOLEJKOM
# administratorzy
pass out quick on $ext_if inet proto tcp \
    from $admins_ad to any synproxy state queue admins
pass out quick on $ext_if inet proto udp \
    from $admins_ad to any keep state queue admins
# ksigowi
pass out quick on $ext_if inet proto tcp \
    from $accounts_ad to any synproxy state queue accounts
pass out quick on $ext_if inet proto udp \
    from $accounts_ad to any keep state queue accounts
# programici
pass out quick on $ext_if inet proto tcp \
    from $coders_ad to any synproxy state queue coders
pass out quick on $ext_if inet proto udp \
    from $coders_ad to any keep state queue coders
# uytkownicy
pass out quick on $ext_if inet proto tcp \
    from $users_ad to any synproxy state queue users
pass out quick on $ext_if inet proto udp \
    from $users_ad to any keep state queue users

# --- page [175 - 176] ---

# MAKRODEFINICJE
# zewntrzny interfejs
ext_if = "ne1"
# maszyny administratorw
admins_ad = "{a.a.a.a, a.a.a.b}"
# maszyny ksigowych
accounts_ad = "{a.a.a.c, a.a.a.d, a.a.a.e}"
# maszyny programistw
coders_ad = "{a.a.a.f, a.a.a.g, a.a.a.h}"
# maszyny uytkownikw
users_ad = "{a.a.a.i, a.a.a.j, a.a.a.k}"

# DEFINICJA KOLEJKI NADRZDNEJ
# definiuje kolejk nadrzdn PRIQ: pasmo 45 Mb i pi kolejek
# podrzdnych: admins, accounts, coders, users, other (domylna)
altq on $ext_if priq bandwidth 45Mb \
    queue {admins, accounts, coders, users, other}

# DEFINICJE KOLEJEK PODRZDNYCH
# administratorzy otrzymuj najwyszy priorytet
queue admins priority 14 priq(red)
# dzia finansw
queue accounts priority 13 priq(red)
# programici
queue coders priority 12 priq(red)
# zwykli uytkownicy
queue users priority 11 priq(red)
# inne
queue other priority 10 priq(default)

# REGUY NAT
# administratorzy
nat on $ext_if inet proto {tcp, udp} \
    from a.a.a.a to any -> ($ext_if) port 1024:6888
nat on $ext_if inet proto {tcp, udp} \
    from a.a.a.b to any -> ($ext_if) port 6889:12753
# ksigowi
nat on $ext_if inet proto {tcp, udp} \
    from a.a.a.c to any -> ($ext_if) port 12754:18618
nat on $ext_if inet proto {tcp, udp} \
    from a.a.a.d to any -> ($ext_if) port 18619:24483
nat on $ext_if inet proto {tcp, udp} \
    from a.a.a.e to any -> ($ext_if) port 24484:30348
# programici
nat on $ext_if inet proto {tcp, udp} \
    from a.a.a.f to any -> ($ext_if) port 30349:36213
nat on $ext_if inet proto {tcp, udp} \
    from a.a.a.g to any -> ($ext_if) port 36214:42078
nat on $ext_if inet proto {tcp, udp} \
    from a.a.a.h to any -> ($ext_if) port 42079:47943 
# uytkownicy
nat on $ext_if inet proto {tcp, udp} \
    from a.a.a.i to any -> ($ext_if) port 47944:53808
nat on $ext_if inet proto {tcp, udp} \
    from a.a.a.j to any -> ($ext_if) port 53809:59673
nat on $ext_if inet proto {tcp, udp} \
    from a.a.a.k to any -> ($ext_if) port 59674:65535

# REGUY FILTROWANIA PRZYPISANE KOLEJKOM
# administratorzy
pass out quick on $ext_if inet proto {tcp, udp} \
    from ($ext_if) port 1023><6889 to any queue admins
pass out quick on $ext_if inet proto {tcp, udp} \
    from ($ext_if) port 6888><12754 to any queue admins
# ksigowi
pass out quick on $ext_if inet proto {tcp, udp} \
    from ($ext_if) port 12753><18619 to any queue accounts
pass out quick on $ext_if inet proto {tcp, udp} \
    from ($ext_if) port 18618><24484 to any queue accounts
pass out quick on $ext_if inet proto {tcp, udp} \
    from ($ext_if) port 24483><30349 to any queue accounts
# programici
pass out quick on $ext_if inet proto {tcp, udp} \
    from ($ext_if) port 30348><36214 to any queue coders
pass out quick on $ext_if inet proto {tcp, udp} \
    from ($ext_if) port 36213><42079 to any queue coders
pass out quick on $ext_if inet proto {tcp, udp} \
    from ($ext_if) port 42078><47944 to any queue coders
# uytkownicy
pass out quick on $ext_if inet proto {tcp, udp} \
    from ($ext_if) port 47943><53809 to any queue users
pass out quick on $ext_if inet proto {tcp, udp} \
    from ($ext_if) port 53808><59674 to any queue users
pass out quick on $ext_if inet proto {tcp, udp} \
    from ($ext_if) port 59673><65536 to any queue users

# --- page [177] ---

# MAKRODEFINICJE
# zewntrzny interfejs
ext_if = "ne1"
# interfejs DMZ
dmz_if = "ne2"
# interfejs prywatny
prv_if = "ne3"

# DEFINICJA KOLEJKI NADRZDNEJ
# definiuje kolejk nadrzdn CBQ: pasmo 45 Mb z trzema kolejkami
# podrzdnymi: dmznet (komputery w DMZ), 
# prvnet (komputery w prywatnym segmencie), 
# other (domylna, poczenia z samej zapory)
altq on $ext_if cbq bandwidth 45Mb \
    queue {dmznet, prvnet, other}

# DEFINICJE KOLEJEK PODRZDNYCH
# nadaje wyjciu z DMZ 50% szerokoci pasma kolejki
# nadrzdnej
queue dmznet bandwidth 50% priority 6 cbq(red)
# nadaje wyjciu z prywatnej sieci pasmo 45% szerokoci pasma kolejki
# nadrzdnej
queue prvnet bandwidth 45% priority 6 cbq(red)
# przypisuje pasmo wyjciu z zapory
queue others bandwidth 5% priority 5 cbq(default)

# TRANSLACJA PAKIETW
# dodaje reguy NAT ze zdefiniowanymi zakresami portw, tak abymy
# wiedzieli, skd przychodz wejciowe pakiety (NAT zmieni ich adresy
# rdowe i numerami portw trzeba posuy si do rozpoznania, kto jest kim).
# Wycz NAT dla pocze pomidzy prywatn sieci a segmentem DMZ
no nat on $ext_if inet proto {tcp, udp} \
    from $dmz_if:network to $prv_if:network
no nat on $ext_if inet proto {tcp, udp} \
    from $prv_if:network to $dmz_if:network
# dokonuj translacji NAT pomidzy segmentem DMZ a wiatem zewntrznym
nat on $ext_if inet proto {tcp, udp} \
    from $dmz_if:network to any -> $ext_if port 1024:32255
# dokonaj translacji NAT pomidzy segmentem prywatnym a wiatem 
# zewntrznym
nat on $ext_if inet proto {tcp, udp} \
    from $prv_if:network to any -> $ext_if port 32256:65535

# REGUY FILTROWANIA PAKIETW PRZYPISANE KOLEJKOM
pass out quick on $ext_if inet proto {tcp, udp} \
    from ($ext_if) port 1023><32256 to any queue dmznet
pass out quick on $ext_if inet proto {tcp, udp} \
    from ($ext_if) port 32255><65536 to any queue prvnet

# --- page [178 - 181] ---

# MAKRODEFINICJE
# zewntrzny interfejs
ext_if = "ne1"
# interfejs DMZ
dmz_if = "ne2"
# interfejs prywatny
prv_if = "ne3"
host1_ad = "192.168.5.10/32"
host2_ad = "192.168.5.11/32"
host3_ad = "192.168.5.12/32"
host4_ad = "192.168.5.13/32"
# DEFINICJA KOLEJKI NADRZDNEJ
# definiuje kolejk nadrzdn CBQ: pasmo 45 Mb z trzema kolejkami
# podrzdnymi: dmznet (komputery w DMZ), 
# prvnet (komputery w prywatnym segmencie), 
# other (domylna)
altq on $ext_if cbq bandwidth 45Mb \
    queue {dmznet, prvnet, others}

# DEFINICJE KOLEJEK PODRZDNYCH
# nadaje wyjciu z DMZ 50% szerokoci pasma kolejki
# nadrzdnej
queue dmznet bandwidth 50% priority 6 cbq(red) \
    queue{dns, ssh, www, mail}
# nadaje wyjciu z prywatnej sieci pasmo 49% szerokoci pasma kolejki
# nadrzdnej
queue prvnet bandwidth 49% priority 5 cbq(red) \
    queue{host1, host2, host3, host4}
# przypisuje pasmo do wyjcia z zapory
queue others bandwidth 1% priority 4 cbq(default)

# DEFINICJE KOLEJEK PODRZDNYCH: (dla dmznet)
queue dns priority 6 cbq(red, borrow)
queue ssh priority 5 cbq(red, borrow)
queue mail priority 4 cbq(red, borrow)
queue www priority 3 cbq(red, borrow)

# DEFINICJE KOLEJEK PODRZDNYCH: (dla prvnet)
queue host1 bandwidth 25% cbq(red) {dns1, ssh1, mail1, www1}
queue host2 bandwidth 25% cbq(red) {dns2, ssh2, mail2, www2}
queue host3 bandwidth 25% cbq(red) {dns3, ssh3, mail3, www3}
queue host4 bandwidth 25% cbq(red) {dns4, ssh4, mail4, www4}

# DEFINICJE KOLEJEK PODRZDNYCH: (dla host1)
queue dns1 priority 6 cbq(red, borrow)
queue ssh1 priority 5 cbq(red, borrow)
queue mail1 priority 4 cbq(red, borrow)
queue www1 priority 3 cbq(red, borrow)

# DEFINICJE KOLEJEK PODRZDNYCH: (dla host2)
queue dns2 priority 6 cbq(red, borrow)
queue ssh2 priority 5 cbq(red, borrow)
queue mail2 priority 4 cbq(red, borrow)
queue www2 priority 3 cbq(red, borrow)

# DEFINICJE KOLEJEK PODRZDNYCH: (dla host3)
queue dns3 priority 6 cbq(red, borrow)
queue ssh3 priority 5 cbq(red, borrow)
queue mail3 priority 4 cbq(red, borrow)
queue www3 priority 3 cbq(red, borrow)

# DEFINICJE KOLEJEK PODRZDNYCH: (dla host4)
queue dns4 priority 6 cbq(red, borrow)
queue ssh4 priority 5 cbq(red, borrow)
queue mail4 priority 4 cbq(red, borrow)
queue www4 priority 3 cbq(red, borrow)

# REGUY NAT
no nat on $ext_if from $dmz_if:network to $prv_if:network
no nat on $ext_if from $prv_if:network to $dmz_if:network
nat on $ext_if from $dmz_if:network to any \
    -> ($ext_if) port 1024:32255
nat on $ext_if from $host1_ad to any \
    -> ($ext_if) port 32256:40574
nat on $ext_if from $host2_ad to any \
    -> ($ext_if) port 40575:48893
nat on $ext_if from $host3_ad to any \
    -> ($ext_if) port 48894:57212
nat on $ext_if from $host4_ad to any \
    -> ($ext_if) port 57213:65535

# REGUY FILTROWANIA PRZYPISANE KOLEJKOM: (dla dmznet)
pass out quick on $ext_if inet proto {tcp, udp} \
    from ($ext_if) port 1023 >< 32256 to any port 53 queue dns
pass out quick on $ext_if inet proto tcp \
    from ($ext_if) port 1023 >< 32256 to any port {22, 23} \
    queue ssh
pass out quick on $ext_if inet proto tcp \
    from ($ext_if) port 1023 >< 32256 to any \
    port {25, 109, 110, 143, 220, 995} queue mail
pass out quick on $ext_if inet proto tcp \
    from ($ext_if) port 1023 >< 32256 to any port {80, 443} \
    queue www

# REGUY FILTROWANIA PRZYPISANE KOLEJKOM: (dla host1)
pass out quick on $ext_if inet proto {tcp, udp} \
    from ($ext_if) port 32255 >< 40575 to any port 53 queue dns1
pass out quick on $ext_if inet proto tcp \
    from ($ext_if) port 32255 >< 40575 to any port {22, 23} \
    queue ssh1
pass out quick on $ext_if inet proto tcp \
    from ($ext_if) port 32255 >< 40575 to any \
    port {25, 109, 110, 143, 220, 995} queue mail1
pass out quick on $ext_if inet proto tcp \
    from ($ext_if) port 32255 >< 40575 to any port {80, 443} \
    queue www1

# REGUY FILTROWANIA PRZYPISANE KOLEJKOM: (dla host2)
pass out quick on $ext_if inet proto {tcp, udp} \
    from ($ext_if) port 40574 >< 48894 to any port 53 queue dns2
pass out quick on $ext_if inet proto tcp \
    from ($ext_if) port 40574 >< 48894 to any port {22, 23} \
    queue ssh2
pass out quick on $ext_if inet proto tcp \
    from ($ext_if) port 40574 >< 48894 to any \
    port {25, 109, 110, 143, 220, 995} queue mail2
pass out quick on $ext_if inet proto tcp \
    from ($ext_if) port 40574 >< 48894 to any port {80, 443} \
    queue www2

# REGUY FILTROWANIA PRZYPISANE KOLEJKOM: (dla host3)
pass out quick on $ext_if inet proto {tcp, udp} \
    from ($ext_if) port 48893 >< 57213 to any port 53 queue dns3
pass out quick on $ext_if inet proto tcp \
    from ($ext_if) port 48893 >< 57213 to any port {22, 23} \
    queue ssh3
pass out quick on $ext_if inet proto tcp \
    from ($ext_if) port 48893 >< 57213 to any \
    port {25, 109, 110, 143, 220, 995} queue mail3
pass out quick on $ext_if inet proto tcp \
    from ($ext_if) port 48893 >< 57213 to any port {80, 443} \
    queue www3

# REGUY FILTROWANIA PRZYPISANE KOLEJKOM: (dla host4)
pass out quick on $ext_if inet proto {tcp, udp} \
    from ($ext_if) port 57212 >< 65536 to any port 53 queue dns4
pass out quick on $ext_if inet proto tcp \
    from ($ext_if) port 57212 >< 65536 to any port {22, 23} \
    queue ssh4
pass out quick on $ext_if inet proto tcp \
    from ($ext_if) port 57212 >< 65536 to any \
    port {25, 109, 110, 143, 220, 995} queue mail4
pass out quick on $ext_if inet proto tcp \
    from ($ext_if) port 57212 >< 65536 to any port {80, 443} \
    queue www4

# --- page [182] ---

altq on $ext_if hfsc bandwidth 45Mb \
    queue {dns, ssh, www, mail, other}

queue dns bandwidth 20%
queue ssh bandwidth 20%
queue mail bandwidth 20%
queue www bandwidth 20%
queue other hfsc(default)

# --- page [183] ---

altq on $ext_if hfsc bandwidth 45Mb \
    queue {dns, ssh, www, mail, other}
queue dns hfsc(linkshare 20%)
queue ssh hfsc(linkshare 20%)
queue mail hfsc(linkshare 20%)
queue www hfsc(linkshare 20%)
queue other hfsc(default)

# --- page [183] ---

# DEFINICJA KOLEJKI NADRZDNEJ
altq on $ext_if hfsc bandwidth 45Mb \
    queue {dmznet, prvnet, others}

# DEFINICJE KOLEJEK PODRZDNYCH
# jeeli zalegoci trwaj krcej ni 10 sekund, kolejka dostaje 50% lub wicej 
# caego dostpnego pasma; dla duszych okresw ograniczenie zmniejsza si
# do 65% caego dostpnego pasma
queue dmznet hfsc(linkshare (50% 10000 65%))
# jeeli zalegoci trwaj krcej ni 5 sekund, kolejka dostaje 40% lub wicej 
# caego dostpnego pasma, po ich upywie ograniczenie wzrasta
# do 25% caego dostpnego pasma
queue prvnet hfsc(linkshare (40% 5000 25%))
queue others hfsc(default)

# --- page [184] ---

# DEFINICJA KOLEJKI NADRZDNEJ
altq on $ext_if hfsc bandwidth 45Mb \
     queue {dmznet, prvnet, others}
# DEFINICJE KOLEJEK PODRZDNYCH
# jeeli zalegoci trwaj krcej ni 10 sekund, kolejka dostaje 50% lub wicej 
# caego dostpnego pasma, po ich upywie ograniczenie zmniejsza si
# do 65% caego dostpnego pasma
queue dmznet hfsc(linkshare (50% 10000 65%))
# jeeli zalegoci trwaj krcej ni 5 sekund, kolejka dostaje 40% lub wicej 
# caego dostpnego pasma, po ich upywie ograniczenie wzrasta
# do 25% caego dostpnego pasma
queue prvnet \
    hfsc(realtime (40% 5000 25%) linkshare (40% 5000 25%))
queue others hfsc(default)

# --- page [184] ---

# DEFINICJA KOLEJKI NADRZDNEJ
altq on $ext_if hfsc bandwidth 45Mb \
     queue {dmznet, prvnet, others}
# DEFINICJE KOLEJEK PODRZDNYCH
# jeeli zalegoci trwaj krcej ni 10 sekund, kolejka dostaje przynajmniej 50% (maksymalnie 60%)
# caego dostpnego pasma, po ich upywie ograniczenie zmniejsza si
# do 65% (maksymalnie 75%) caego dostpnego pasma
queue dmznet hfsc(linkshare (50% 10000 65%)) \
    upperlimit (60% 10000 75%))
# jeeli zalegoci trwaj krcej ni 5 sekund, kolejka dostaje przynajmniej 35% (maksymalnie 40%)
# caego dostpnego pasma, po ich upywie ograniczenie wzrasta
# do 20% (maksymalnie 25%) caego dostpnego pasma
queue prvnet hfsc(realtime (35% 5000 25%) \
    linkshare (35% 5000 20%)) upperlimit (40% 5000 25%))
queue others hfsc(default)

# --- page [184 - 185] ---

# CBQ
altq on $ext_if cbq bandwith 20Mb \
    queue {dmznet, prvnet, others}

# prvnet otrzymuje 8 Mb
queue prvnet bandwidth 40% queue {host1, host2}
# host1 otrzymuje 4 Mb
queue host1 bandwidth 50%
# host2 otrzymuje 4 Mb
queue host2 bandwidht 50%

# HFSC
altq on $ext_if hfsc bandwidth 20Mb \
    queue {dmznet, prvnet, others}

# prvnet otrzymuje 8 Mb
queue prvnet hfsc(linkshare 40%) queue {host1, host2}
# host1 otrzymuje 4 Mb
queue host1 hfsc(linkshare 20%)
# host2 otrzymuje 4 Mb
queue host2 hfsc(linkshare 20%)

# --- page [188] ---

# zablokuj wszystkie przychodzce pakiety
block in on $ext_if all

# --- page [188] ---

# zablokuj i zarejestruj wszystkie przychodzce pakiety
block in log on $ext_if all

# --- page [189] ---

# zezwl na poczenia TCP IPv4 ze wiatem zewntrznym,
# utrzymuj informacje o stanie
pass out on $ext_if inet proto tcp all flags S/SA synproxy state
pass out on $ext_if inet proto {udp, icmp} all keep state

# --- page [189] ---

# zezwl na poczenia TCP IPv4 ze wiatem zewntrznym
# i zapisz je do dziennika, utrzymuj informacje o stanie
pass out log on $ext_if inet proto tcp all flags S/SA synproxy state
pass out log on $ext_if inet proto {udp, icmp} all keep state

# --- page [200] ---

ext_if = "ne1"
int_if = "ne2"

nat-anchor authpf
rdr-anchor authpf
binat-anchor authpf
block in on $ext_if all
block out on $ext_if all

# zezwl na poczenia SSH na wewntrznym interfejsie (w przeciwnym wypadku
#  joe, znajdujcy si w segmencie sieci prywatnej, nie bdzie mg dokona
# poczenia w celu uwierzytelnienia).
pass in on $int_if inet proto tcp \
    from any to ($int_if) port 22 flags S/SA synproxy state
anchor authpf

# --- page [200] ---

# MAKRODEFINICJE
ext_if = "ne1"

# pozwl uytkownikowi joe na poczenia z serwerami HTTP
pass out on $ext_if inet proto tcp \
    from $user_ip to any port 80 flags S/SA synproxy state

# --- page [204] ---

# MAKRODEFINICJE
ext_if = "ne1"

# Tablice
table <spamd> persist

# Reguy NAT
# przekierowuj poczenia ze spamujcych maszyn do spamd, wszystkie
# inne poczenia nie zostan przekierowane
rdr on $ext_if inet proto tcp \
    from <spamd> to ($ext_if) port 25 -> 127.0.0.1 port 8025
# blokuje wszystkie poczenia wejciowe
block in on $ext_if all
# przepuszcza poczenia przekierowane do spamd, nasuchujcego na 
# wewntrznym interfejsie lokalnym (lo0)
pass in on lo0 inet proto tcp \
    from <spamd> to 127.0.0.1 port 8025
# przepuszcza wszystkie dozwolone poczenia na port 25 na
# interfejsie zewntrznym
pass in on $ext_if inet proto tcp \
    from any to ($ext_if) port 25 flags S/SA synproxy state

# --- page [205] ---

# MAKRODEFINICJE
ext_if = "ne1"
# zakadamy tutaj, e MTA dziaa na komputerze umiejscowionym
# w DMZ i podczonym do interfejsu DMZ
dmz_if = "ne2"
mta_ad = "192.168.24.63"
mta_pt = "1025"
# Tablice
table <spamd> persist

# Reguy NAT
# przekierowuj poczenia ze spamujcych maszyn do spamd, wszystkie
# inne poczenia nie zostan przekierowane
rdr on $ext_if inet proto tcp \
    from <spamd> to ($ext_if) port 25 -> 127.0.0.1 port 8025
# przekierowuje wszystkie prawidowe poczenia do rzeczywistego MTA
rdr on $ext_if inet proto tcp \
    from any to ($ext_if) port 25 -> $mta_ad port $mta_pt
# blokuje wszystkie poczenia wejciowe
block in on $ext_if all
# przepuszcza poczenia przekierowane do spamd, nasuchujcego na 
# wewntrznym interfejsie lokalnym (lo0)
pass in on lo0 inet proto tcp \
    from <spamd> to 127.0.0.1 port 8025
pass out on $dmz_if inet proto tcp \
    from any to $mta_ad port $mta_pt flags S/SA synproxy state

# --- page [231] ---

# if - interfejs, na ktry przychodz pakiety
# zablokuj zarwno TCP, jak i UDP (IPv4)
block in on $if inet proto {tcp, udp} \
    from any to ($if) port $blokowany_port
# zablokuj zarwno TCP, jak i UDP (IPv6)
block in on $if inet6 proto {tcp, udp} \
    from any to ($if) port $blokowany_port

# --- page [232] ---

# if - interfejs, na ktry przychodz pakiety
# zablokuj zarwno TCP, jak i UDP (IPv4)
block in on $if inet proto {tcp, udp} \
    from any to ($if) port $blokowany_port
pass in on $if inet proto {tcp, udp} from $adres_OK \
    to ($if) port $blokowany_port
# zablokuj zarwno TCP, jak i UDP (IPv6)
block in on $if inet6 proto {tcp, udp} \
    from any to ($if) port $blokowany_port
pass in on $if inet6 proto {tcp, udp} from $adres_OK \
    to ($if) port $blokowany_port

# --- page [232] ---

# ext_if - zewntrzny interfejs
rdr in on $ext_if inet \
    from any to ($ext_if) port $porty_docelowe \
    -> $host_docelowy $port_przekierowany
rdr in on $ext_if inet6 \
    from any to ($ext_if) port $porty_docelowe \
    -> $host_docelowy $port_przekierowany

# --- page [232] ---

# int_if - interfejs wewntrzny
rdr in on $int_if inet \
    from any to any port $port_docelowy \
      -> $proxy $port_przekierowany

# --- page [233] ---

# prv_if - interfejs czcy prywatne komputery
# z zapor
pass in on $prv_if inet proto icmp \
    from $admin_host \
    to any icmp-type 8 code 0 keep state

# --- page [233] ---

# prv_if - interfejs czcy prywatne komputery
# z zapor
pass in on $prv_if inet proto icmp \
    from $prv_if:network \
    to ($prv_if) icmp-type 8 code 0 keep state

# --- page [233] ---

# ext_if - interfejs czcy wiat zewntrzny z zapor
pass in on $ext_if inet proto icmp \
    from $ISP_net_address \
    to ($ext_if) icmp-type 8 code 0 keep state

# --- page [233] ---

# ext_if - interfejs czcy wiat zewntrzny z zapor
# prv_if - interfejs czcy prywatne komputery z zapor
pass in on $ext_if inet proto icmp \
    from any \
    to any icmp-type 3
pass out on $ext_if inet proto icmp \
    from any \
    to any icmp-type 3 code 4 keep state
pass in on $prv_if inet proto icmp \
    from $prv_if:network \
    to any icmp-type 3
pass out on $prv_if inet proto icmp \
    from any \
    to $prv_if:network icmp-type 3 code 4 keep state

# --- page [234] ---

# ext_if - interfejs czcy wiat zewntrzny z zapor
# prv_if - interfejs czcy prywatne komputery z zapor
pass in on $ext_if inet proto icmp \
    all \
    icmp-type 4 keep state
pass in on $prv_if inet proto icmp \
    all \
    icmp-type 4 keep state

# --- page [234] ---

# ext_if - interfejs czcy wiat zewntrzny z zapor
# prv_if - interfejs czcy prywatne komputery z zapor
pass in on $ext_if inet proto icmp \
    all \
    icmp-type 11 keep state
pass in on $prv_if inet proto icmp \
    all \
    icmp-type 11 keep state

# --- page [234] ---

# ext_if - interfejs czcy wiat zewntrzny z zapor
# prv_if - interfejs czcy prywatne komputery z zapor
pass in on $ext_if inet proto icmp \
    all \
    icmp-type 12 keep state
pass in on $prv_if inet proto icmp \
    all \
    icmp-type 12 keep state

# --- page [234] ---

pass in on $ext_if proto tcp from any \
    to any port 21 keep data
pass in on $ext_if proto tcp from any \
    to any port > 49151 keep state

# --- page [235 - 239] ---

#### Host bastionowy ####
# pojedynczy komputer poczony bezporednio z internetem lub LAN
# makrodefinicje dla hosta bastionowego:
# ext_if - nazwa interfejsu czcego bastion z innymi (zewntrznymi) komputerami
ext_if = "ne1"
# reguy filtrowania dla hosta bastionowego:
# -- zezwolenie na poczenia (wychodzce z bastionu) z zewntrznymi komputerami na porcie 22 (SSH)
# uwaga: aby przepuszcza pakiety IPv6, naley skopiowa regu i zamieni
#             inet na inet6
pass out on $ext_if inet proto tcp \
    from ($ext_if) port > 1023 \
    to any port 22 \
    flags S/SA modulate state
# -- zezwolenie na poczenia (przychodzce z zewntrznych komputerw) z bastionem na porcie 22 (SSH)
# uwaga: aby przepuszcza pakiety IPv6, naley skopiowa regu i zamieni
#             inet na inet6
pass in on $ext_if inet proto tcp \
    from any port > 1023 \
    to ($ext_if) port 22 \
    flags S/SA modulate state
# -- blokowanie pocze z bastionu do zewntrznych komputerw na porcie 22 (SSH)
# uwaga: do blokowania pakietw IPv4 i IPv6 potrzeba dwch regu
#             jeli uywamy zapisu ($ext_if) zamiast adresu liczbowego, a interfejs 
#            $ext_if posiada zarwno adres IPv4, jak i IPv6.
block out on $ext_if inet proto {tcp, udp} \
    from ($ext_if) \
    to any port 22
block out on $ext_if inet6 proto {tcp, udp} \
    from ($ext_if) \
    to any port 22
# -- blokowanie pocze z zewntrznych komputerw do bastionu na porcie 22 (SSH)
# uwaga: do blokowania pakietw IPv4 i IPv6 potrzeba dwch regu 
#             jeli uywamy zapisu ($ext_if) zamiast adresu liczbowego, a interfejs 
#            $ext_if posiada zarwno adres IPv4, jak i IPv6.
block in on $ext_if inet proto {tcp, udp} \
    from any \
    to ($ext_if) port 22
block in on $ext_if inet6 proto {tcp, udp} \
    from any \
    to ($ext_if) port 22


#### Chroniony komputer/sie LAN ####
# do interfejsw zapory przypisano publiczne adresy IP,
# komputery prywatne (umieszczone w LAN) rwnie posiadaj adresy publiczne;
#
# makrodefinicje dla chronionego komputera/ sieci LAN:
# ext_if - nazwa interfejsu czcego zapor
#             z zewntrznymi maszynami, internetem, wiatem zewntrznym
ext_if = "ne1"
# prv_if - nazwa interfejsu czcego zapor z 
#              prywatnymi (wewntrznymi) hostami
prv_if = "ne2"
# reguy filtrowania dla komputerw chronionych:
# -- zezwolenie na poczenia z komputerw prywatnych do
#    komputerw zewntrznych na porcie 22 (SSH)
# uwaga: prywatne maszyny mog si rwnie czy
#             z portem 22 zapory
pass in on $prv_if inet proto tcp \
    from $prv_if:network port > 1023 \
    to any port 22
pass out on $ext_if inet proto tcp \
    from $prv_if:network port > 1023 \
    to any port 22 \
    flags S/SA modulate state
# -- zezwolenie na poczenia z komputerw zewntrznych 
#    do komputerw prywatnych na porcie 22 (SSH)
pass in on $ext_if inet proto tcp \
    from any port > 1023 \
    to $prv_if:network port 22 \
    flags S/SA modulate state
pass out on $prv_if inet proto tcp \
    from any port > 1023 \
    to $prv_if:network port 22
# -- blokowanie pocze z komputerw prywatnych do
#     komputerw zewntrznych na porcie 22 (SSH) oraz pocze z portem 22
#    komputera zapory
# uwaga: do blokowania pakietw IPv4 i IPv6 potrzeba dwch regu
#             jeli uywamy zapisu ($ext_if) zamiast adresu liczbowego, a interfejs 
#            $ext_if posiada zarwno adres IPv4, jak i IPv6.
block in on $prv_if inet proto {tcp, udp} \
    from $prv_if:network \
    to any port 22
block in on $prv_if inet6 proto {tcp, udp} \
    from $prv_if:network \
    to any port 22
# -- blokowanie pocze z komputerw zewntrznych do
#    komputerw prywatnych na porcie 22 (SSH)
# uwaga: do blokowania pakietw IPv4 i IPv6 potrzeba dwch regu
#             jeli uywamy zapisu ($ext_if) zamiast adresu liczbowego, a interfejs 
#            $ext_if posiada zarwno adres IPv4, jak i IPv6.
block in on $ext_if inet proto {tcp, udp} \
    from any \
    to $prv_if:network port 22
block in on $ext_if inet6 proto {tcp, udp} \
    from any \
    to $prv_if:network port 22
# -- zezwolenie na poczenia z maszyn zewntrznych do zapory
#    na porcie 22 (SSH)
pass in on $ext_if inet proto tcp \
    from any port > 1023 \
    to ($ext_if) port 22 \
    flags S/SA modulate state
pass out on $prv_if inet proto tcp \
    from any port > 1023 \
    to ($ext_if) port 22 
# -- blokowanie pocze z komputerw zewntrznych do zapory
#     na porcie 22 (SSH)
# uwaga: do blokowania pakietw IPv4 i IPv6 potrzeba dwch regu 
#             jeli uywamy zapisu ($ext_if) zamiast adresu liczbowego, a interfejs 
#            $ext_if posiada zarwno adres IPv4, jak i IPv6.
block in on $ext_if inet proto {tcp, udp} \
    from any \
    to ($ext_if) port 22
block in on $ext_if inet6 proto {tcp, udp} \
    from any \
    to ($ext_if) port 22
# -- zezwolenie na poczenia z maszyn prywatnych do zapory
#    na porcie 22 (SSH)
pass in on $prv_if inet proto tcp \
    from $prv_if:network port > 1023 \
    to ($prv_if) port 22 \
    flags S/SA modulate state
# -- blokowanie pocze z komputerw prywatnych do zapory
#     na porcie 22 (SSH)
# uwaga: do blokowania pakietw IPv4 i IPv6 potrzeba dwch regu
#             jeli uywamy zapisu ($ext_if) zamiast adresu liczbowego, a interfejs 
#            $ext_if posiada zarwno adres IPv4, jak i IPv6.
block in on $prv_if inet proto {tcp, udp} \
    from $prv_if:network \
    to ($prv_if) port 22
block in on $prv_if inet6 proto {tcp, udp} \
    from $prv_if:network \
    to ($prv_if) port 22

#### Niewidzialny most ####
# interfejsom zapory nie przypisano adresw IP,
# maszyny prywatne (umieszczone w LAN) maj publiczne adresy IP;
# makrodefinicje dla chronionego komputera/sieci LAN:
# ext_if - nazwa interfejsu czcego zapor
#             z zewntrznymi maszynami, internetem, wiatem zewntrznym
ext_if = "ne1"
# prv_if - nazwa interfejsu czcego zapor z 
#              prywatnymi (wewntrznymi) komputerami
prv_if = "ne2"
# prv_ad - adresy maszyn prywatnych
prv_ad = "{x.x.x.a, x.x.x.b, ...}"
# reguy filtrowania dla chronionego komputera(komputerw):
# -- zezwolenie na poczenia z maszyn wewntrznych do
#    zewntrznych na porcie 22 (SSH)
pass out on $ext_if inet proto tcp \
    from $prv_ad port > 1023 \
    to any port 22 \
    flags S/SA modulate state
# -- zezwolenie na poczenia z maszyn zewntrznych do
#    wewntrznych na porcie 22 (SSH)
pass in on $ext_if inet proto tcp \
    from any port > 1023 \
    to $prv_ad port 22 \
    flags S/SA modulate state
# -- blokowanie pocze z maszyn prywatnych do zewntrznych
#     na porcie 22 (SSH)
block out on $ext_if inet proto {tcp, udp} \
    from $prv_ad \
    to any port 22
# -- blokowanie pocze z komputerw zewntrznych do prywatnych
#     na porcie 22 (SSH)
block in on $ext_if inet proto {tcp, udp} \
    from any \
    to $prv_ad port 22

#### NAT + chroniony komputer/ sie LAN ####
# interfejsom zapory przypisano publiczne adresy IP,
# maszyny prywatne (umieszczone w LAN) nie maj adresw publicznych;
# makrodefinicje dla chronionej maszyny/sieci LAN:
# ext_if - nazwa interfejsu czcego zapor
#             z zewntrznymi maszynami, internetem, wiatem zewntrznym
ext_if = "ne1"
# prv_if - nazwa interfejsu czcego zapor z 
#              prywatnymi (wewntrznymi) komputerami
prv_if = "ne2"
# reguy NAT dla NAT + chronionego komputera:
# -- poczenia NAT z maszyn wewntrznych do
#    zewntrznych na porcie 22 (SSH)
nat on $ext_if inet proto tcp \
    from $prv_if:network port > 1023 \
    to any port 22 \
    -> ($ext_if)
# reguy filtrowania dla konfiguracji "NAT + chroniony host":
# -- zezwolenie na poczenia z maszyn prywatnych do
#    zewntrznych na porcie 22 (SSH)
pass out on $ext_if inet proto tcp \
    from $prv_if:network port > 1023 \
    to any port 22 \
    flags S/SA modulate state
# -- zezwolenie na poczenia z maszyn zewntrznych do
#    zapory na porcie 22 (SSH)
pass in on $ext_if inet proto tcp \
    from any port > 1023 \
    to ($ext_if) port 22 \
    flags S/SA modulate state
# -- blokowanie pocze z komputerw zewntrznych do zapory
#    na porcie 22 (SSH)
# uwaga: do blokowania pakietw IPv4 i IPv6 potrzeba dwch regu
#             jeli uywamy zapisu ($ext_if) zamiast adresu liczbowego, a interfejs 
#            $ext_if posiada zarwno adres IPv4, jak i IPv6.
block in on $ext_if inet proto {tcp, udp} \
    from any \
    to ($ext_if) port 22
block in on $ext_if inet6 proto {tcp, udp} \
    from any \
    to ($ext_if) port 22
# -- zezwolenie na poczenia z maszyn prywatnych do
#    zapory na porcie 22 (SSH)
pass in on $prv_if inet proto tcp \
    from $prv_if:network port > 1023 \
    to ($prv_if) port 22 \
    flags S/SA modulate state
# -- blokowanie pocze z maszyn prywatnych do zapory
#     na porcie 22 (SSH)
# uwaga: do blokowania pakietw IPv4 i IPv6 potrzeba dwch regu
#             jeli uywamy zapisu ($ext_if) zamiast adresu liczbowego, a interfejs 
#            $ext_if posiada zarwno adres IPv4, jak i IPv6.
block in on $prv_if inet proto {tcp, udp} \
    from $prv_if:network \
    to ($prv_if) port 22
block in on $prv_if inet6 proto {tcp, udp} \
    from $prv_if:network \
    to ($prv_if) port 22

# --- page [241 - 242] ---

# Makrodefinicje
# ext_if - interfejs do wiata zewntrznego 
ext_if = "ne0"

# Opcje
set require-order yes
set block-policy drop
set optimization normal
set loginterface none

# Normalizacja pakietw
scrub in all
scrub out all

# Filtrowanie pakietw
# blokowanie wszystkich pocze przychodzcych z zewntrz
# zapisywanie do dziennika wszystkich zablokowanych pakietw
block in log all
# przepuszczanie wszystkich pocze z chronionej maszyny
pass out quick on $ext_if inet \
    from ($ext_if) to any flags S/SA keep state
# regua chronica przed faszowaniem na zewntrznym interfejsie
antispoof for $ext_if

# --- page [242 - 243] ---

# Makrodefinicje
# ext_if - interfejs do wiata zewntrznego 
ext_if = "ne0"

# Opcje
set require-order yes
set block-policy drop
set optimization normal
set loginterface none

# Normalizacja pakietw
scrub in all
scrub out all

# Filtrowanie pakietw
# blokowanie wszystkich pocze przychodzcych z zewntrz
# zapisywanie do dziennika wszystkich zablokowanych pakietw
block in log all
# przepuszczanie wszystkich pocze z samego bastionu
pass out quick on $ext_if inet \
    from ($ext_if) to any flags S/SA keep state
# przepuszczanie wszystkich pocze z zewntrznych maszyn
# z portem 80 (WWW) hosta bastionowego
pass in quick on $ext_if inet proto tcp \
    from any \
    to ($ext_if) port 80 \
    flags S/SA synproxy state
# przepuszczanie wszystkich pocze z zewntrznych maszyn
# z portem 22 (SSH) hosta bastionowego
pass in quick on $ext_if inet proto tcp \
    from any \
    to ($ext_if) port 22 \
    flags S/SA synproxy state
# przepuszczanie wszystkich pocze z zewntrznych maszyn
# z portem 25 (SMTP) hosta bastionowego
pass in quick on $ext_if inet proto tcp \
    from any \
    to ($ext_if) port 25 \
    flags S/SA synproxy state
# regua chronica przed faszowaniem na zewntrznym interfejsie
antispoof for $ext_if

# --- page [243] ---

# Makrodefinicje
# ext_if - interfejs do wiata zewntrznego 
ext_if = "ne0"
# prv_if - interfejs do komputerw prywatnych
prv_if = "ne1"
# prv_hosts - lista adresw komputerw w chronionej sieci LAN
prv_hosts = "{x.x.x.1, x.x.x.10, x.x.x.5}"

# Opcje
set require-order yes
set block-policy drop
set optimization normal
set loginterface none

# Normalizacja pakietw
scrub in all
scrub out all

# Filtrowanie pakietw
# blokowanie wszystkich pocze przychodzcych z zewntrz
# zapisywanie do dziennika wszystkich zablokowanych pakietw
block in log all
# przepuszczanie wszystkich pocze z maszyn chronionych i zapory
pass out quick on $ext_if inet \
    from ($ext_if) to any flags S/SA modulate state
# przepuszczanie wszystkich pocze z maszyn chronionych
pass in quick on $prv_if inet \
    from $prv_hosts to any flags S/SA

# regua chronica przed faszowaniem na zewntrznym interfejsie
antispoof for $ext_if
# regua chronica przed faszowaniem na wewntrznym interfejsie
antispoof for $prv_if

# --- page [244 - 245] ---

# Makrodefinicje
# ext_if - interfejs do wiata zewntrznego 
ext_if = "ne0"
# prv_if - interfejs do komputerw prywatnych
prv_if = "ne1"
# prv_hosts - lista adresw komputerw w chronionej sieci LAN
prv_hosts = "{x.x.x.1, x.x.x.10, x.x.x.5}"
# prv_www - adres maszyny penicej rol serwera HTTP
prv_www = "x.x.x.1"
# prv_smtp - adres maszyny penicej rol serwera SMTP
prv_smtp = "x.x.x.10"

# Opcje
set require-order yes
set block-policy drop
set optimization normal
set loginterface none

# Normalizacja pakietw
scrub in all
scrub out all

# Filtrowanie pakietw
# blokowanie wszystkich pocze przychodzcych z zewntrz
# zapisywanie do dziennika wszystkich zablokowanych pakietw
block in log all
# przepuszczanie wszystkich pocze z samego bastionu i chronionej sieci LAN
pass out quick on $ext_if inet \
    from ($ext_if) to any flags S/SA modulate state
# przepuszczanie wszystkich pocze z maszyn chronionych
pass in quick on $prv_if inet \
    from $prv_hosts to any flags S/SA

# przepuszczanie wszystkich pocze z maszyn zewntrznych
# do portu 80 (WWW) wewntrznego komputera
pass in quick on $ext_if inet proto tcp \
    from any \
    to $prv_www port 80 \
    flags S/SA synproxy state
# przepuszczanie wszystkich pocze z maszyn zewntrznych
# do portu 22 (SSH) wszystkich komputerw wewntrznych
pass in quick on $ext_if inet proto tcp \
    from any \
    to $prv_hosts port 22 \
    flags S/SA synproxy state
# przepuszczanie wszystkich pocze z maszyn zewntrznych
# do portu 25 (SMTP) jednego z wewntrznych komputerw
pass in quick on $ext_if inet proto tcp \
    from any \
    to $prv_smtp port 25 \
    flags S/SA synproxy state

# regua chronica przed faszowaniem na zewntrznym interfejsie
antispoof for $ext_if
# regua chronica przed faszowaniem na wewntrznym interfejsie
antispoof for $prv_if

# --- page [245 - 246] ---

# Makrodefinicje
# ext_if - interfejs do wiata zewntrznego 
ext_if = "ne0"
# prv_if - interfejs do komputerw prywatnych
prv_if = "ne1"
# prv_hosts - lista adresw komputerw w chronionej sieci LAN
prv_hosts = "{192.168.1.1, 192.168.1.10, 10.3.1.5}"

# Opcje
set require-order yes
set block-policy drop
set optimization normal
set loginterface none

# Normalizacja pakietw
scrub in all
scrub out all

# Translacja pakietw
nat on $ext_if inet proto {tcp, udp} \
    from $prv_hosts to any -> ($ext_if)

# Filtrowanie pakietw
# blokowanie wszystkich pocze przychodzcych z zewntrz
# zapisywanie do dziennika wszystkich zablokowanych pakietw
block in log all
# przepuszczanie wszystkich pocze z zapory
pass out quick on $ext_if \
    from ($ext_if) to any flags S/SA modulate state
# przepuszczanie wszystkich pocze z maszyn chronionych
pass in quick on $prv_if \
    from $prv_hosts to any flags S/SA

# regua chronica przed faszowaniem na zewntrznym interfejsie
antispoof for $ext_if
# regua chronica przed faszowaniem na wewntrznym interfejsie
antispoof for $prv_if

# --- page [246 - 247] ---

# Makrodefinicje
# ext_if - interfejs do wiata zewntrznego 
ext_if = "ne0"
# prv_if - interfejs do komputerw prywatnych
prv_if = "ne1"
# dmz_if - interfejs do DMZ
dmz_if = "ne2"
# prv_hosts - lista adresw komputerw w chronionej sieci LAN
prv_hosts = "{192.168.1.1, 192.168.1.10, 10.3.1.5}"
# dmz_hosts - lista adresw komputerw w DMZ
dmz_hosts = "{192.168.2.1, 192.168.2.2, 192.168.2.3}"
# dmz_www - adres serwera WWW w DMZ
dmz_www = "192.168.2.1"
# dmz_smpt - adres serwera SMTP w DMZ
dmz_smtp = "192.168.2.2"
# dmz_dns - adres serwera DNS w DMZ
dmz_dns = "192.168.2.3"

# Opcje
set require-order yes
set block-policy drop
set optimization normal
set loginterface none

# Normalizacja pakietw
scrub in all
scrub out all

# Translacja pakietw
# NAT dla prywatnych maszyn
nat on $ext_if inet from $prv_hosts to any -> ($ext_if)
# NAT dla maszyn w DMZ
nat on $ext_if inet from $dmz_hosts to any -> ($ext_if)
# przekierowanie pocze z portem 80 (HTTP) do DMZ
rdr on $ext_if inet proto tcp \
    from any to ($ext_if) port 80 -> $dmz_www
# przekierowanie pocze z portem 25 (SMTP) do DMZ
rdr on $ext_if inet proto tcp \
    from any to ($ext_if) port 25 -> $dmz_smtp
# przekierowanie pocze z portem 53 (DNS) do DMZ
rdr on $ext_if inet proto {tcp, udp} \
    from any to ($ext_if) port 53 -> $dmz_dns

# Filtrowanie pakietw
# blokowanie wszystkich pocze przychodzcych z zewntrz
# zapisywanie do dziennika wszystkich zablokowanych pakietw
block in log all
# przepuszczanie wszystkich pocze z zapory
pass out quick on $ext_if inet \
    from ($ext_if) to any flags S/SA modulate state
# przepuszczanie wszystkich pocze z maszyn chronionych
pass in quick on $prv_if \
    from $prv_hosts to any flags S/SA
# przepuszczanie wszystkich pocze z DMZ
pass in quick on $dmz_if \
    from $dmz_hosts to any flags S/SA
# przepuszczanie wszystkich pocze do serwera WWW w DMZ
pass in on $ext_if \
    from any to $dmz_www \
    port 80 flags S/SA synproxy state
# przepuszczanie wszystkich pocze do serwera SMTP w DMZ
pass in on $ext_if \
    from any to $dmz_smtp \
    port 25 flags S/SA synproxy state
# przepuszczanie wszystkich pocze do serwera DNS w DMZ
pass in on $ext_if \
    from any to $dmz_dns \
    port 53 flags S/SA keep state

# regua chronica przed faszowaniem na zewntrznym interfejsie
antispoof for $ext_if
# regua chronica przed faszowaniem na wewntrznym interfejsie
antispoof for $prv_if

# --- page [247 - 248] ---

# Makrodefinicje
# ext_if - interfejs do wiata zewntrznego 
ext_if = "ne0"
# prv_if - interfejs do komputerw prywatnych
prv_if = "ne1"
# prv_hosts - lista adresw komputerw w chronionej sieci LAN
prv_hosts = "{x.x.x.1, x.x.x.10, x.x.x.5}"

# Opcje
set require-order yes
set block-policy drop
set optimization normal
set loginterface none

# Normalizacja pakietw
scrub in all
scrub out all

# Filtrowanie pakietw
# blokowanie wszystkich pocze przychodzcych z zewntrz
# zapisywanie do dziennika wszystkich zablokowanych pakietw
block in log on $ext_if all
# przepuszczanie wszystkich pocze z maszyn chronionych
pass out quick on $ext_if inet \
    from $prv_hosts to any flags S/SA modulate state

# regua chronica przed faszowaniem na zewntrznym interfejsie
antispoof for $ext_if
# regua chronica przed faszowaniem na wewntrznym interfejsie
antispoof for $prv_if

