|
Negyedik generációs tűzfal
Linux-on
Kadlecsik József
kadlec@sunserv.kfki.hu
KFKI RMKI SZHK
Networkshop'2000 konferenciaelőadás, 2000. április 18-20., Gödöllő
A jelenleg fejlesztés alatt álló
(2.3) és a következő stabil Linux kernelben (2.4) a csomagszűrő modul a
negyedik generációt jelenti a Linux kernel tűzfal-támogatásában.
Megvizsgáljuk a netfilter csomag új tulajdonságait, képességeit,
összehasonlítva azt az előző ipchains változattal.
Bevezetés
A Linux kernelben már igen régóta
létezik csomagszűrési lehetőség. Jelenleg a negyedik generációs
változat (netfilter - iptables) áll fejlesztés alatt:
Vajon mi igényelte a kernel csomagszűrési
részének az újabb átdolgozását az ipchains után?
Négy különböző dolog - csomagszűrés,
masquerading (NAT), routing és TOS manipuláció - keveredett egyben és
az egész meglehetősen ad-hoc módon kapcsolódott össze. Lehetetlen volt
egyetlen funkcióval foglalkozni, ami mind a fejlesztést, mind a
rendszerkonfigurálást nehézkessé tette.
1. Netfilter
A netfilter egy keretrendszer
infrastruktúra a Linux kernelen belül, amely négy részbol áll
A keretrendszerre épülve különböző
modulok készültek el. Ezek közül a legjelentosebb a teljes NAT
rendszer, valamint a kiterjeszthető csomagszűrő modul.
2. A netfilter architektúrája
IPv4 esetén az (idealizált)
netfilter belépési pontokat a következő ábra mutatja:
Az ábra bal oldalán belépő csomagok (néhány minimális ellenorzés után, pl IP checksum) először a PREROUTING belépési ponton keresztül jutnak be a netfilter rendszerbe.
Ez után belépnek a routing kódba,
amely eldönti, hogy egy lokális programnak címzett csomagról van-e szó,
vagy sem.
Ha a csomag egy lokális programnak
szól, akkor a LOCAL IN (INPUT), ha egy másik interface-nek, akkor a
FORWARD belépési ponton keresztül újra a netfilteren a sor, hogy
megvizsgálja a csomagot.
A lokálisan generált csomagok rögtön
a LOCAL OUT (OUTPUT) belépési ponthoz kerülnek. Ez után a routing kód
eldönti, mely interface-nek szól a csomag és (a FORWARD belépési ponton
keresztül érkező csomagokkal együtt) a POSTROUTING pontban újra a
netfilter rendszerbe kerülnek.
A kernel modulok bármely belépési
pontnál (vagy pontoknál) regisztrálhatják magukat. Amikor egy-egy
csomag hozzájuk kerül, a következő "válaszokat" adhatják a
netfilter keretrendszernek:
Ezzel az infrastruktúrával egy
meglehetősen komplex és kiterjeszthető - csomag-manipulási rendszer
hozható létre. A csomagszűrés, NAT, csomag-módosítás önálló részekké
váltak, így a rendszer sokkal átláthatóbb és jobban kontrollálható.
2.1 Csomagszűrés
A csomagszűrés (iptables [-t
filter]) három belépési ponton regisztrálja magát: LOCAL IN,
FORWARD és LOCAL OUT:
Ez alapvetően különbözik attól, mint ami a 2.0 és 2.2 kernelek esetén volt:
Minden csomag számára egy és csak egy helyen lehet szűrési feltételeket beállítani. Ez sokkal egyszerubbé teszi a csomagszűrést az ipchains-hez képest miközben az iptables kicsi és gyors! Mivel a LOCAL IN ponton az input, a LOCAL OUT-nál az output, míg a FORWARD-nál az input/output interface-k vizsgálhatók, sokféle szűrés egyszerubbé vált.
Készültek modulok, amelyek
segítségével formálisan az ipfwadm, ipchains parancsok
változatlanul használhatók.
2.2 NAT
A netfilter insfrastruktúrája három
belépési pontot biztosít a NAT (iptables t nat) számára.
Nem-lokális csomagok esetén a PREROUTING és POSTROUTING, míg lokális
csomagok esetén a LOCAL OUT belépési pontok tökéletesen megfelelőek
forrás és címzett-cím manipuláláshoz.
A NAT a netfilternél két típusra
bontható: forráscím manipulálás (SNAT: source NAT) és célcím
manipulálás (DNAT: destination NAT).
SNAT esetében a forráscímet
változtatjuk meg. Ez mindig a routing után történik (POSTROUTING). A
masquerading az SNAT egy speciális esete.
DNAT-nál a csomagban szereplő
célcímet cseréljük le egy másikra. Ez nem-lokális csomagnál még routing
előtt (PREROUTING), lokálisan generált csomagnál pedig a LOCAL OUT
(OUTPUT) kapcsolódási pontoknál hajtható végre. A port átirányítás,
load sharing, transzparens proxy mind egy-egy példa a DNAT különböző
alkalmazási lehetőségeire.
2.3 Csomag-módosítás
Az IP csomag TOS mezejének
manipulálása és a "mark" önálló modul részei lettek (iptables
t mangle). A mangle modul a PREROUTING és LOCAL OUT belépési
pontokon regisztálja magát a netfilterben.
2.4 Kapcsolatok nyomonkövetés
A kapcsolatok nyomonkövetése alapvető
a NAT számára. Ezt egy a NAT-tól független modul végzi, így lehetové
vált a csomagszűrést egy a kapcsolat-állapotokat vizsgáló modullal
kiegészíteni (iptables m state). Ezzel gyakorlatilag az ún.
stateful packet filtering az iptables természetes része lett.
3. Hiányosságok
A netfilter keretrendszer nagyon
fiatal. Hiányzik belőle néhány modul és javításra szorul néhány már
létezo:
Összefoglalás
A netfilter keretrendszer egy igen
komoly előrelépés a Linux kernel csomag-manipulálásában.
Modularizáltsága miatt igen könnyen kiterjeszthető és már most léteznek
hozzá speciális modulok:
Az első átgondoltan a Linux kernelbe
ágyazott csomag-manipuláló keretrendszer révén lehetőséget biztosít az
IPv4-en kívül más protokollok (pl. IPv6) integrálására, amely a jövő
szempontjából nagyon fontos és előremutató.
URL
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||