Netfilter elméleti alapok tűzfalépítéshez 01.

| Német Krisztián | 2011. június 6. hétfő

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.

A NAT tábla láncai

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.

A filter tábla láncai

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.

A mangle tábla láncai

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.

 

Várjuk a hozzászólásokat!

Előző bejegyzés

Következő bejegyzés