2003 júliusában az OpenBSD PF néven ismert csomagszűrőjét átírták FreeBSD-re és elérhetővé tették a FreeBSD Portgyűjteményének részeként. A PF programot beépítetten tartalmazó első kiadás pedig 2004 novemberében a FreeBSD 5.3 volt. A PF egy teljes, mindentudó tűzfal, amely támogatja az ún. ALTQ (Alternate Queuing, vagyis a "váltóbesorolás") megoldást. Az ALTQ lehetővé teszi a sávszélesség korlátozását a szolgáltatás minősége (Quality of Service, QoS) alapján.
Az OpenBSD Projekt kiváló munkát végez a PF felhasználói útmutatójának karbantartásával. A kézikönyv ezen szakasza ezért elsősorban azzal foglalkozik, hogyan kell a PF-et FreeBSD alatt használni, miközben igyekszik egy általános összefoglalást adni a témáról. A részletesebb információkkal kapcsolatban azonban feltétlenül nézzük meg a felhasználói útmutatót.
A http://pf4freebsd.love2party.net/
címen olvashatunk többet arról (angolul), hogy
a PF-et hogyan használjunk
FreeBSD-n.
A PF modul
betöltéséhez a következő sort kell
felvennünk az /etc/rc.conf
állományba:
pf_enable="YES"
Ezt követően futtassuk le a hozzá tartozó rendszerindító szkriptet:
#
/etc/rc.d/pf start
A PF modul abban az esetben nem fog
betöltődni, ha nem találja a szabályokat
tartalmazó konfigurációs
állományt. Ez alapértelmezés
szerint az /etc/pf.conf
állomány. Ha a szabályok
leírása rendszerünkön máshol
található, akkor az
/etc/rc.conf
állományban a
következő módon adhatjuk meg annak pontos
helyét:
pf_rules="/elérési/út/pf.conf
"
A FreeBSD 7.0 kiadással a minta
pf.conf
állomány az
/etc
könyvtárból átkerült a
/usr/share/examples/pf
könyvtárba. A FreeBSD 7.0 előtti
kiadásokban alapértelmezés szerint
található egy pf.conf
állomány az /etc
könyvtárban.
A PF modul parancssorból akár kézzel is betölthető:
#
kldload pf.ko
A PF működésének
naplózását a pflog.ko
teszi lehetővé, amelyet az alábbi sor
hozzáadásával engedélyezhetünk
az /etc/rc.conf
állományban:
pflog_enable="YES"
A modul betöltését a hozzá tartozó rendszerindító szkript segítségével kérhetjük:
#
/etc/rc.d/pflog start
Ha a PF többi funkcióját is használni szeretnénk, akkor ehhez egy új rendszermagot kell fordítanunk PF támogatással.
Noha egyáltalán nem szükséges beépítenünk a PF támogatását a rendszermagba, abban az esetben mégis szükségünk lehet rá, amikor a PF olyan komolyabb lehetőségeit szeretnénk kiaknázni, amelyek már nem részei a modulnak. Ilyen például a pfsync(4), amely a PF által használt állapottáblázatok bizonyos változásainak megjelenítésére alkalmas pszeudoeszköz. A carp(4) megoldásával párosítva így akár hibatűrő tűzfalak is kialakíthatóak a PF-fel. A CARP megoldásáról a kézikönyvben bővebb ismertetést a 31.13. szakasz - A Közös cím redundancia protokoll (CARP) ad.
A PF rendszermag
konfigurációs beállításai a
/usr/src/sys/conf/NOTES
állományban találhatóak:
device pf device pflog device pfsync
A device pf
beállítás engedélyezi a
csomagszűrő tűzfalat (pf(4)).
A device pflog
megadásával
keletkezik egy pflog(4) pszeudo hálózati
eszköz, amellyel egy bpf(4) eszközre
érkező forgalmat tudunk naplózni.
Ezután a pflogd(8) démon
használható tőle származó
naplózott adatok
rögzítésére.
A device pfsync
engedélyezi a
pfsync(4) pszeudo hálózati eszköz
létrejöttét, amely az ún.
"állapotváltások"
megfigyelésére alkalmas.
A következő rc.conf(5) beállítások aktiválják a rendszerindítás során a PF és a pflog(4) használatát:
pf_enable="YES" # a PF engedélyezése (a modul betöltése, ha kell) pf_rules="/etc/pf.conf" # a pf szabályait tartalmazó állomány pf_flags="" # a pfctl indításához szükséges további paraméterek pflog_enable="YES" # a pflogd(8) elindítása pflog_logfile="/var/log/pflog" # hol tartsa a pflogd az naplóit pflog_flags="" # a pflogd indításához szükséges paraméterek
Ha a tűzfalunk mögött egy helyi hálózat is meghúzódik, akkor az ott levő gépek számára valamilyen módon tudnunk kell továbbítani a csomagokat vagy címfordítást kell végezni, így ez is mindenképpen kelleni fog:
gateway_enable="YES" # az átjáró funkciók engedélyezése
A PF a beállításait
a pf.conf(5) állomány tárolja (amely
alapértelmezés szerint az
/etc/pf.conf
helyen
található), és az ebben
található szabályok alapján
módosítja, dobja el vagy éppen engedi
át a csomagokat. A FreeBSD rendszerünkben ehhez
találhatunk néhány példát a
/usr/share/examples/pf/
könyvtárban. A PF által
használt szabályokról minden
részletre kiterjedően a PF felhasználói
útmutatójában olvashatunk.
A PF felhasználói
útmutatójának
olvasásakor ne feledkezzünk meg róla, hogy
a különböző FreeBSD verziók
különböző PF
verziókat tartalmaznak. A
FreeBSD 7.X
és
későbbi változatok az OpenBSD 4.1
kiadásában szereplő PF
változatot tartalmazzák.
A FreeBSD packet filter levelezési lista remek hely a PF tűzfal beállításával és futtatásával kapcsolatos kérdésekre. A kérdezés előtt azonban ne felejtsük el alaposan átnézni az archívumot!
A PF a pfctl(8) segítségével vezérelhető. Az alábbiakban ezzel kapcsolatban most összefoglalunk néhány hasznos parancsot (de ne felejtsük el megnézni a pfctl(8) man oldalon található többi lehetőséget sem):
Parancs | Leírás |
---|---|
pfctl -e | A PF engedélyezése |
pfctl -d | A PF tiltása |
pfctl -F all -f /etc/pf.conf | Az összes (címfordítási,
szűrési, állapottartási stb.)
szabály törlése, és az
/etc/pf.conf állomány
újratöltése |
pfctl -s [ rules | nat | state ] | A szűrési (rules ),
címfordítási
(nat ) és
állapottartási (state )
információk
lekérdezése |
pfctl -vnf /etc/pf.conf | Az /etc/pf.conf
állomány ellenőrzése a benne
levő szabályok betöltése
nélkül |
Az ALTQ kizárólag csak úgy használható, ha a konfigurációs beállításokon keresztül beépítjük a FreeBSD rendszermagjába. Az ALTQ alkalmazását nem minden hálózati kártya meghajtója támogatja, ezért ezt a altq(4) man oldalon ellenőrizzük.
A következő rendszermag konfigurációs beállításokkal engedélyezhetjük az ALTQ használatát és bővíthetjük azt további lehetőségekkel:
options ALTQ options ALTQ_CBQ # osztályozás alapú besorolás (Class Bases Queuing, CBQ) options ALTQ_RED # véletlen korai észlelés (Random Early Detection, RED) options ALTQ_RIO # RED befele/kifele options ALTQ_HFSC # hiearchikus csomagütemező (Hierarchical Packet Scheduler, HFSC) options ALTQ_PRIQ # prioritásos besorolás (Priority Queuing, PRIQ) options ALTQ_NOPCC # az SMP esetén kell
Az options ALTQ
az
ALTQ rendszert engedélyezi.
Az options ALTQ_CBQ
engedélyezi a
osztályozás alapú besorolást
(Class Based Queuing,
CBQ). A CBQ
használatával a kapcsolatunkhoz tartozó
sávszélességet
különböző osztályokra vagy sorokra
tudjuk bontani és a szűrési
szabályoknak megfelelően osztályozni
segítségükkel a forgalmat.
Az options ALTQ_RED
a véletlen
korai észlelés (Random Early
Detection, RED)
használatát engedélyezi. A
RED a hálózati forgalomban
keletkező torlódások
elkerülésére alkalmas. A
RED ezt a problémát úgy
oldja meg, hogy méri a sorok hosszát és
összeveti a hozzá tartozó minimális
és maximális
küszöbértékekkel. Ha a sor hossza
meghaladja a számára előírt
maximális értéket, akkor az új
csomagokat eldobja. Nevéhez hűen a
RED az eldobásra ítélt
csomagokat véletlenszerűen választja
ki.
Az options ALTQ_RIO
engedélyezi a
RED használatát mind a
két irányba, tehát be- és
kifelé.
Az options ALTQ_HFSC
a pártatlan
hierachikus szolgáltatási görbe alapú
csomagütemezőt (Hierarchical Fair Service
Curve Packet Scheduler, HFSC)
engedélyezi. Vele kapcsolatban a http://www-2.cs.cmu.edu/~hzhang/HFSC/main.html
címen találhatunk bővebben
olvasnivalót (angolul).
Az options ALTQ_PRIQ
a prioritásos
besorolást (Priority Queuing,
PRIQ) teszi elérhetővé. A
PRIQ mindig elsőként a nagyobb
értékű sorban levő forgalmat
továbbítja.
Az options ALTQ_NOPCC
az
ALTQ SMP, vagyis
többprocesszoros támogatását adja meg.
Ilyen típusú rendszerekben ez
kötelező.
Ha kérdése van a FreeBSD-vel kapcsolatban, a
következő címre írhat (angolul):
<questions@FreeBSD.org>.
Ha ezzel a dokumentummal kapcsolatban van kérdése, kérjük erre a címre írjon:
<gabor@FreeBSD.org>.