A Netfilter a linux rendszermagjának hálózati csomagok feldolgozására szolgáló alrendszere. Beállítását az iptables paranccsal végezhetjük.
Az iptables a hálózati csomagok feldolgozási szabályait szerepük alapján szervezett táblák formájában kezeli. A szerepük a csomagszűrés, hálózati címfordítás, vagy más csomagmódosítás lehet, amelyek mindegyikére feldolgozási szabályok lánca (sorozata) vonatkozik. A szabályok illesztésekből és célokból állnak: az illesztés (mach) határozza meg, hogy a szabály mely csomagokra vonatkozik, a cél (target) pedig azt, hogy mit kell csinálni az illeszkedő csomagokkal.
Az iptables az OSI Layer 3. szintjén azaz a hálózati rétegben működik.
Nézzünk egy egyszerű iptables parancsot:
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j DNAT --to-destination 192.168.100.10:8080
A parancs egyes elemeit az alábbi táblázat oldja fel.
| Összetevők | Értelmezése |
|---|---|
| -t nat | Működjön a nat táblán |
| -A PREROUTING | hozzáadva a következő szabályt annak PREROUTING láncához |
| -i eth1 | illeszkedjen az eth1 hálózati eszközön át bejövő csomagokra |
| -p tcp | amelyek a tcp (TCP/IP) protokollt használnak |
| –dport 80 | és céljuk a 80-as port |
| -j DNAT | ugorjon a DNAT célterületre |
| –to-destination 192.168.100.10:8080 | és módosítsa a célcímet 192.168.100.10-ra, a célportot pedig 8080 |
Kapcsolódási pontok
Az iptables öt kapcsolódási pontot határoz meg a rendszermag csomagfeldolgozásának folyamatában. Ezek a PREROUTING, INPUT, FORWARD, POSTROUTING és OUTPUT. Hozzájuk beépített láncok kapcsolódnak, így a kapcsolódási pontok mindegyikéhez szabályok sorozata adható. A szabályok lehetővé teszik, hogy befolyásoljuk vagy megfigyeljük a csomagok áramlását.
Gyakran hivatkozunk táblákra és láncokra, ami azt a képzetet keltheti, hogy a láncok a táblákhoz tartoznak, pedig csak részlegesen függnek össze egymással, és egyikük sem “tartozik” igazán a másikhoz. A láncok a csomagok áramlásában a kapcsolódási pontokat jelölik, a táblák pedig a feldolgozási folyamat típusát jelzik. Az alábbi ábrákon megvizsgáljuk ezek megengedett kombinációit, abban a sorrendben, ahogyan megjelennek a rendszerben a csomagok áramlásakor.
NAT tábla láncai
Ezen az ábrán látható, hogyan haladnak át a csomagok a rendszeren a hálózati címfordításkor (NAT). Ezek a nat tábla láncai.
FILTER tábla láncai
Ezen az ábrán látható, hogyan haladnak át a csomagok a rendszeren csomagszűréskor. Ezek a filter tábla láncai.
MANGLE tábla láncai
Ezen az ábrán látható, hogyan haladnak át a csomagok a rendszeren csomagmódosításkor. Ezek a mangle tábla láncai.
Az ábrákon jól kivehető, hogy 5 kapcsolódási pont van a csomagok áramlásában:
FORWARD: amelyek az átjáró gépen áramlanak keresztül, egy csatolón bejönnek és egy másikon rögtön kimennek.
INPUT: éppen mielőtt megérkeznének egy helyi folyamathoz.
OUTPUT: rögtön azután, hogy egy helyi folyamat létrehozta őket.
POSTROUTING: éppen mielőtt elhagynának egy hálózati csatolót
PREROUTING: amint megérkeznek egy hálózati csatolótól
A láncot az alapján választjuk ki, hogy a csomag életciklusának melyik részén kívánjuk szabályainkat alkalmazni. Például ha a kimenő csomagokat szeretnénk szűrni, legjobb, ha ezt az OUTPUT láncban tesszük, mert a POSTROUTING nem kapcsolódik a filter táblához.
Táblák
Az ábrákon megfigyelhető, hogy az iptables három beépített táblával rendelkezik. Ezek a filter, a mangle és a nat.
nat tábla: Kapcsolatkövetésnél használjuk, hogy átirányítsunk kapcsolatokat hálózati címfordításra. Többnyire a forrás- és célcímen alapul. Beépített láncai az OUTPUT, a POSTROUTING, és a PREROUTING.
filter tábla: A számítógépbe bemenő, azon áthaladó és abból kijövő engedélyezett forgalomtípus házirendjét állítja be. Hacsak nem hivatkozunk közvetlenül egy másik táblára, az iptables alapértelmezetten ennek a táblának a láncait használja. Beépített láncai a FORWARD, az INPUT, és az OUTPUT.
mangle tábla: Speciális csomagmódosításokhoz használjuk, például az IP-kapcsolók levágásához. Beépített láncai: FORWARD, INPUT, OUTPUT, POSTROUTING, PREROUTING.
Láncok
Az iptables szabályai különféle egységekbe, ún. láncokba (chain) szerveződnek. A kernel e szabályok alapján tudja, hogy milyen csomagkezelési műveletet kell a beérkező és a kimenő adatcsomagokon végrehajtania. A láncok egyszerűen a csomagkezelő szabályokból felépülő katalógusok, ellenőrzőlisták. Ezek a szabályok egész pontosan azt határozzák meg, hogy a bizonyos típusú fejléceket tartalmazó adatcsomagokon milyen műveleteket kell végrehajtani. A szabályok if-then-else rendszerű, feltételes vezérlő szerkezetek alapján működnek, ami azt jelenti, hogy ha egy adatcsomag nem felel meg az első szabálynak, akkor a rendszer a következő szabállyal folytatja az ellenőrzést, és így tovább. Amennyiben a csomag egyik szabály feltételének sem felel meg, a kernel lánckezelő irányelvhez (chain policy) fordul tanácsért. Ezen a ponton a csomag rendszerint visszautasításra fog kerülni. A szabályok valamelyikének feltételére illeszkedő adatcsomagokat a rendszer a nekik megfelelő célnak (target) adja át, amely végül is meghatározza mi legyen a kérdéses csomag sorsa.
Célok
Az iptables hagyomágyos céljai:
ACCEPT: Átengedi a csomagot a tűzfalon
DROP: Megtagadja a csomag áthaladását a tűzfalon
REJECT: Megtagadja az áthaladást és értesíti a csomag feladóját
QUEUE: A csomagokat elküldi a felhasználói felület számára
RETURN: A lánc végére ugrik és az alapértelmezett célnak adja át a vezérlést, amely elvégzi a feldolgozást.
A célok önmagukban szabályok újabb láncolatait alkothatják, amelyek akár a felhasználók által definiált szabályok is lehetnek. Az adatcsomagok útjuk során több láncon is áthaladhatnak, míg végül elérik céljukat. A felhasználók által definiált láncok esetében az alapértelmezett cél mindig a következő szabályt jelenti azokban a láncokban, amelyekből a felhasználói láncokat meghívták.


