30.4. Az OpenBSD csomagszűrője (PF) és az ALTQ
Vissza | 30. fejezet - Tűzfalak | Előre

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

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

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

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

Vissza | Fel | Előre
30.3. Tűzfalak | Főoldal | 30.5. Az IPFILTER (IPF) tűzfal

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