30.4. Az OpenBSD csomagszűrője (PF) és az ALTQ

Átnézte és aktualizálta:John Ferrell.

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.

30.4.1. A PF rendszermagmodulok használata

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"

Megjegyzés: 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.

30.4.2. A PF rendszermagbeli beállításai

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 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.

30.4.3. Az rc.conf állományban elérhető beállítások

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

30.4.4. A szűrési szabályok megfogalmazása

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.

Figyelem: 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!

30.4.5. A PF használata

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):

ParancsLeírás
pfctl -eA PF engedélyezése
pfctl -dA PF tiltása
pfctl -F all -f /etc/pf.confAz ö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.confAz /etc/pf.conf állomány ellenőrzése a benne levő szabályok betöltése nélkül

30.4.6. Az ALTQ engedélyezése

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): <freebsd-questions@FreeBSD.org>.
Ha ezzel a dokumentummal kapcsolatban van kérdése, kérjük erre a címre írjon: <gabor@FreeBSD.org>.