FreeBSD kézikönyv
Előző | Fejezet 30. Tűzfalak | Következő

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

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

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

Előző | Tartalom | Következő
Tűzfalak | Fel | Az IPFILTER (IPF) tűzfal

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