i
i “rendszergazda-II” — 2005/9/7 — 14:09 — page 195 — #195
i
i
7. fejezet
Hálózatok összekapcsolása Láttuk, hogy a számítógépek a saját IP címük és az alhálózati maszk segítségével képesek megállapítani, hogy a számítógép, amellyel fel kívánják venni a kapcso˝k maguk. Azt is láttuk, latot, ugyanabban a címtartományban van-e, amelyikben o hogy az alhálózaton belüli számítógépek felkeresésében az ARP szabvány hogyan segíti a számítógépet, hogy miképpen lehet az ARP szabvány segítségével kideríteni egy adott IP cím˝ u számítógép Ethernet címét. A könyv el˝ oz˝ o fejezeteiben azt is láttuk, hogy az útválasztó táblázat alapján hogyan lehet eldönteni, mi a teend˝ o, ha a csomagokat nem lehet közvetlenül továbbítani a címzettnek, mert az nem a csomagot küld˝ o számítógéppel azonos fizikai hálózaton található. Ilyen esetben a számítógép – az útválasztó táblázat alapján – a csomagot egy harmadik számítógépnek, az útválasztónak (router) küldi el. A csomag továbbítását az útválasztó magára vállalja.
El˝ ofordulhat, hogy egy adott fizikai hálózaton több IP címtartomány is jelen van egy id˝ oben. Ilyen esetben nem csak a számítógéppel azonos címtartományban található számítógépeknek lehet közvetlenül, az ARP szabvány segítségével elküldeni a csomagot, hanem az összes számítógépnek, amely az adott fizikai hálózaton található. Az ilyen felépítés azonban nem okozhat problémát, hiszen ilyen esetben az útválasztó táblázatból kiderül, hogy melyek azok a címtartományok, amelyeknek közvetlenül küldhet˝ o el a csomag. Nagyon egyszer˝ u a csomagok útválasztó felé való küldésének módja is. A csomagot küld˝ o számítógép egyszer˝ uen kideríti az ARP szabvány szerint, hogy mi az útválasztó Ethernet címe, elhelyezi a csomagban az igazi címzett IP címét, és az Ethernet cím felhasználásával elküldi az útválasztónak. Az útválasztó megkapja a csomagot az Ethernet cím alapján, és a címzett IP címéb˝ ol kideríti, hogy az nem neki szól. Ha a csomaggal egyébként minden rendben van, az útválasztó egyszer˝ uen továbbítja azt a saját útválasztó táblázata alapján. Az útválasztó számítógép tehát egyszer˝ uen a saját útválasztó táblázata alapján továbbküldi a csomagot,
i
i i
i
i
i “rendszergazda-II” — 2005/9/7 — 14:09 — page 196 — #196
i
196
i
Hálózatok összekapcsolása
gyakorlatilag ugyanúgy, mintha az a saját adatcsomagja lenne. Ha egy számítógép képes csomagokat küldeni, útválasztóként is használható, feltéve persze, hogy a megfelel˝ o beállításokat elvégeztük. Néhány apróságot azért érdemes megemlítenünk az útválasztó számítógépekkel kapcsolatban: • Az útválasztónak általában nem szabad továbbküldenie a körüzeneteket, hogy az adott fizikai hálózat bels˝ o forgalma ne terhelje a vele kapcsolatban álló többi hálózatot. Ha tehát a körüzeneteket is továbbítani kívánjuk, valószín˝ uleg nem útválasztó számítógépre van szükségünk. • Az útválasztó számítógép általában csak bizonyos IP címtartományból érkez˝ o csomagokat fogad el továbbításra. A legtöbb esetben például nem továbbítja a magáncélra használható IP címtartományokból érkez˝ o csomagokat. Ha az ilyen csomagokat is továbbítani kívánjuk – mert például több alhálózatból álló magánhálózatot üzemeltetünk –, az útválasztó számítógép megfelel˝ o beállításáról esetleg gondoskodnunk kell. • Ha elegend˝ oen sok hálózati csatolót helyezünk el egy számítógépben, és elegend˝ oen nagy hálózatok forgalmát próbáljuk meg áter˝ oszakolni az adott számítógépen, akkor fennakadások lehetnek a forgalomban. A GNU/Linux egy régebbi számítógépen is képes néhány tucat számítógép forgalmát továbbítani, de ha nagysebesség˝ u (és nagyméret˝ u) hálózatokat próbálunk meg összekapcsolni, érdemes egy kis fejszámolást végezni, miel˝ ott a boltba mennénk. A következ˝ o oldalakon arról olvashatunk, hogyan tudunk hálózatokat összekapcsolni a GNU/Linux segítségével, hogyan gondoskodhatunk a hálózatok védelmér˝ ol, és milyen módon bizonyosodhatunk meg arról, hogy a hálózatra kapcsolt számítógépeink (nagyjából) biztonságban vannak.
7.1.
Az útválasztó bállítása
A Linux rendszermag alapértelmezés szerint nem vállal útválasztó szolgáltatásokat, azaz mások számára nem továbbítja a hálózaton érkezett csomagokat. Hiába tud tehát csomagokat küldeni a számítógépünk két hálózat felé is, a csomagokat mások számára nem továbbítja. Ha be akarjuk kapcsolni a csomagtovábbítást, egyszer˝ uen egy -es karaktert kell küldenünk a F látszólagos állományba. Ezt mutatja be a következ˝ o példa. 64. példa. Készítsünk héjprogramot, amely bekapcsolja a számítógépünkön a csomagtovábbítást IPv4 csomagok számára! A program igen egyszer˝ u: * * $ $ Z 0 2) -(
i
i i
i
i
i “rendszergazda-II” — 2005/9/7 — 14:09 — page 197 — #197
i
A t˝ uzfalak
7.2.
i
197
A t˝ uzfalak
Napjainkban a hálózati biztonság kiemelt fontosságú, egyetlen rendszergazda sem hagyhatja figyelmen kívül az általa üzemeltetett számítógép-hálózat biztonsági kérdéseit. A Linux rendszermag igen hatékony és rugalmas biztonsági rendszerrel van felszerelve, amely képes megvédeni a munkaállomásként üzemeltetett számítógépet, vagy akár a GNU/Linux által kiszolgált teljes hálózatot. Az újabb (2.4 és a feletti változatú) Linux rendszermagok részét képezi ur˝ o), amely hálózati csomagok sz˝ urésére a (network filter, hálózatsz˝ és átalakítására teszi képessé az operációs rendszert. A a Linux rendszermag hálózati alrendszereibe épített programrészek gy˝ ujteménye, amelynek használatával a különböz˝ o magmodulok képesek alapjaiban megváltoztatni a rendszermag ezen részének viselkedését. A rendszermaghoz készített (IP tables, IP táblázatok) programcsomag magmodulokból és felhasználói programokból áll, amelyek segítségével könnyedén megvalósíthatjuk a csomagsz˝ urésen alapuló védelmet. Az ilyen – csomagsz˝ urésen alapuló – védelmet a szakirodalom általában t˝ uzfalnak (firewall) nevezi.
Az angol szakirodalomban sokszor emlegetik a gépkocsi motorháza és az utastér közt található vaslemezt, amely megakadályozza, hogy a motort˝ uz átterjedjen az utastérre. Magyar nyelven talán ismer˝ osebben hangzik a háztömbök padlásait egymástól elválasztó fal, amelynek hasonló a szerepe. A számítógépes t˝ uzfal rendszerek esetében egyszer˝ uen arról van szó, hogy a rendszermagba épített védelem elválasztja a hálózatot az alkalmazástól vagy a bels˝ o hálózaton üzemeltetett számítógépekt˝ ol. A régebbi Linux rendszermagokban más programrészek gondoskodtak a védelemr˝ ol. A legrégebbi rendszermagok esetében az alkalmazást, az újabbakban a alkalmazást használtuk a t˝ uzfal beállítására, ezért ezekre a régebbi rendszerekre általában és rendszerként hivatkozunk, míg az új, modern t˝ uzfalakot sokszor néven szokás emlegetni. Mivel a régebbi rendszerek megismerésébe már nem igazán érdemes energiát fektetni uködését mutatjuk be. mi csak az rendszerek használatát és m˝
7.2.1. Egyszer˝ u csomagsz˝ urés A hálózati csomagok egyszer˝ u sz˝ urésére két okból is szükségünk lehet. Ha a számítógép munkaállomásként az Internetre kapcsolódik mindenképpen szükséges, hogy a számítógépet megvédjük az Internet fel˝ ol érkez˝ o támadásoktól – ezért ma már gyakorlatilag minden GNU/Linux terjesztés támogatja a t˝ uzfal használatát –, ha pedig a számítógépünk valamilyen általunk üzemeltetett hálózatot kapcsol az Internetre, a t˝ uzfal használata gyakorlatilag elengedhetetlen.
i
i i
i
i
i “rendszergazda-II” — 2005/9/7 — 14:09 — page 198 — #198
i
198
i
Hálózatok összekapcsolása
A számítógépeket üzemeltet˝ o szakemberek sok mindent kitalálnak annak érdekében, hogy kevesebbet kelljen dolgozniuk, hiszen a lustaság a számítástechnika egyik legfontosabb eleme. Nem szabad azonban félvállról vennünk a biztonság kérdését! Gondolhatjuk, hogy a mi számítógépünk biztonságos1 , gondolhatjuk, hogy a mi számítógépünket nem támadja senki2 , bízhatunk a szerencsénkben3 , bízhatunk abban, hogy a számítógépünk m˝ uködése nem is oen beállított t˝ uzfalra mindenképpen fontos4 , ez mit sem számít. Egy megfelel˝ szükségünk van, ha a számítógépet az Internetre kötjük! Az egyszer˝ u csomagsz˝ urés m˝ uködése a következ˝ o lépésekben foglalható össze: 1. A számítógép indításának valamely pontján lefut az a héjprogram, amely a csomagsz˝ ur˝ o t˝ uzfalat helyezi üzembe. Ez a héjprogram az programot hívja, hogy a csomagsz˝ ur˝ o szabályokat beállítsa. 2. Az a Linux rendszermaggal felveszi a kapcsolatot, hogy a csomagok sz˝ urésére vonatkozó szabályokat elhelyezze a rendszermagban. 3. A rendszermag az automatikus magmodul-betöltés rendszerének segítségével betölti a szükséges magmodulokat. Els˝ osorban az F modulra urés alapmolesz szükség, amely az rendszeren alapuló csomagsz˝ dulja, de további modulok betöltésére is sor kerülhet. 4. Amint a héjprogram betöltötte a csomagsz˝ ur˝ o szabályokat, megtörténhet a hálózati csomagok fogadásának – és az esetleges továbbításának – engedélyezése. 5. Az üzemel˝ o rendszermag a fogadott és küldött hálózati csomagok kezelése során figyelembe veszi a szabályokat, így a szabályok segítségével a hálózati alrendszer biztonságát finomhangolhatjuk. 6. Amikor a hálózati alrendszert leállítjuk (például azért, mert a számítógépet kikapcsoljuk), a csomagsz˝ ur˝ o szabályokat a rendszermag eldobja. A hálózat indításakor a szabályokat újra be kell töltenünk a rendszemagba. Err˝ ol általában az els˝ o pontban említett héjprogram gondoskodik. A rendszergazda szerepe a bemutatott folyamatban általában az, hogy elkészítse a csomagsz˝ ur˝ o szabályokat betölt˝ o héjprogramot, vagy egy már meglév˝ o héjprogram beállítóállományát az igényeinek megfelel˝ oen módosítsa. A következ˝ o oldalakon arról olvashatunk hogyan tudunk olyan héjprogramot írni, amely a t˝ uzfal csomagsz˝ ur˝ o szabályait a rendszermagba tölti az program segítségével. 1 Biztonságos
számítógép nem létezik. legkevésbé fontos számítógépet is támadják. 3 A támadások száma exponenciálisan n˝ o, ezért minden nap nagyobb és nagyobb szerencsére lesz szükségünk. Csalóka tehát az „eddig még jó. . . ” hozzállás. 4 Viszont a mi feltört számítógépünkr˝ ol támadott számítógép fontos lehet és igen kínos magyarázkodásnak nézhetünk elébe, ha a támadást a mi számítógépünkig nyomozza vissza valaki. 2A
i
i i
i
i
i “rendszergazda-II” — 2005/9/7 — 14:09 — page 199 — #199
i
i
199
A t˝ uzfalak bemenet
útválasztás
R(E`MEC
*+<;D
kimenet
(;D<;D
helyi folyamat 7.1. ábra. Az egyszer˝ u csomagsz˝ urés szabálylistái
A csomagsz˝ ur˝ o szabályok adatforgalmát a 7.1. ábrán követhetjük nyomon. A számítógépre érkez˝ o adatcsomagok az ábra bemenet nev˝ u pontján jelennek meg, ahonnan az útválasztás névvel jelzett programrészhez érkeznek. A rendszermagnak ez a része minden csomag esetében megvizsgálja, azt más számítógép felé továbbítani kell-e. A más számítógép felé továbbítandó csomagok a R(E`MEC szabályrendszerhez érkeznek, míg a helyi számítógéphez – helyi folyamathoz – érkez˝ o csomagok az *+<;D szabályrendszerre kerülnek. A továbbítandó adatcsomagok, amelyek „túlélik” a R(E`MEC szabályrendszer megpróbáltatásait, eljutnak a kimenetre. A R(E`MEC szabályrendszer alapján megfelel˝ onek ítélt csomagokat a számítógép továbbítja a címzett irányába. A helyi számítógépre érkez˝ o csomagok, amelyeket a rendszermag a *+<;D szabályrendszer alapján elfogadhatónak ítélt meg, eljutnak a helyi folyamathoz. A rendszermag ezeket a csomagokat valamelyik felhasználói folyamat felé továbbítja. Ha valamelyik helyi folyamat adatcsomagot próbál küldeni a hálózatra, az el˝ obb a (;D<;D szabályrendszerre érkezik. Az adatcsomag továbbítása csak akkor történhet meg, ha a csomag megfelel az (;D<;D szabályrendszernek. Fontos, hogy megértsük, az ábrán látható bemenet/kimenet pontok nem a számítógépünk bemeneti és kimeneti hálózati csatolóját jelentik! A bemenet azt a pontot jelzi, ahol a rendszermag megkapja a hálózati csomagot, a kimenet pedig azt a pontot, ahol a csomag elhagyja a rendszermagot, függetlenül attól, hogy ez melyik hálózati csatolón keresztül történik. Vizsgájuk most meg a *+<;D, (;D<;D és R(E`MEC szabályrendszereket! A szabályrendszerek minden szabálya egy csomagformátumot és egy sorsot (target, cél) tartalmaz. A rendszermag sorra megvizsgálja, hogy az adott adatcsomag tulajdonságai megfeleltethet˝ ok-e az egyes szabályok által leírt formátumnak, és ha igen, az adott szabály határozza meg az adatcsomag sorsát. A rendszermag a szabályok vizsgálatát az els˝ o illeszked˝ o szabálynál befejezi, hiszen az els˝ o illeszked˝ o
i
i i
i
i
i “rendszergazda-II” — 2005/9/7 — 14:09 — page 200 — #200
i
200
i
Hálózatok összekapcsolása
szabály meghatározza a csomag sorsát5 . Ha a rendszermag a szabályrendszer utolsó szabályát is megvizsgálta, és az sem volt illeszthet˝ o az adatcsomag tulajdonságaira, a szabályrendszer alapszabályát (policy, házirend) használja, az dönti el az adatcsomag sorsát. E bevezet˝ o után megvizsgáljuk, hogy miképpen használható az program az *+<;D, (;D<;D és R(E`MEC szabályrendszer kezelésére. A szabályrendszerek lekérdezése A szabályrendszerekben található szabályok kiíratása igen egyszer˝ u m˝ uvelet, a kiírt adatok értelmezése azonban annál bonyolultab. A következ˝ o sorokban bemutatjuk, hogyan írathatjuk ki a szabályokat, de a kiírt adatok pontos jelentése csak a következ˝ o oldalak gondos áttanulmányozása után érthet˝ o meg igazán. o formában kérhetjük az érvényben Az programot használva a következ˝ lév˝ o szabályok lekérdezését:
"név# " # " # A kifejezésben szerepl˝o vagy ' kapcsolóval a rendszermagban érvényben lév˝ o szabályok kiíratását kérhetjük. A kifejezésben olvasható név a szabályrendszer nevét határozza meg; ha elhagyjuk, a program minden szabályrendszer tartalmát kiíratja. A kapcsolóval megadhatjuk, hogy a számítógépek nevei helyett azok IP címei jelenjenek meg. Ezt a kapcsolót általában használjuk, mert ha probléma van a hálózattal, a DNS kiszolgáló nem érhet˝ o el és a program iszonyatosan lelassul. A kapcsolóval a szabályok részletes kiírását kérhetjük. Akkor használjuk ezt a kapcsolót, amikor a szabályokat tüzetesen meg akarjuk vizsgálni. 65. példa. A következ˝ o példa egy üres szabályrendszert, védtelen számítógépet mutat be: iptables --list @. >=GV9 2-! @@5G93
" 1-
@. +)[)< 2-! @@5G93
" 1-
@. V9GV9 2-! @@5G93
" 1-
Figyeljük meg, hogy minden szabályrendszer üres, a szabályrendszerek neve alatt csak egy fejlécet látunk, egyetlen szabály sem jelenik meg. 5 Néha
azonban ez nem így van, de az egyszer˝ uség érdekében ett˝ ol most tekintsünk el.
i
i i
i
i
i “rendszergazda-II” — 2005/9/7 — 14:09 — page 201 — #201
i
i
201
A t˝ uzfalak
Az avatott szem azt is észreveszi, hogy a szabályrendszerekhez kapcsolódó alapszabály az MPPB
=GV9 2-! @@5G93
" 1- <)G
- ## ( iptables -L INPUT @. >=GV9 2-! @@5G93
" 1- <)G
- ## !/.
(
- F
!/.
- F.
A szabályt IP címekkel és tartománynevekkel is lekérdeztük, hogy láthassuk a különbséget. A példában bemutatott listák egyes oszlopaiban a következ˝ o információkat találjuk:
Az oszlop a szabályra illeszthet˝o csomagok sorsát tartalmazza. Az oszlop a szabályhoz tartozó szabványt adja meg. A szabályra csak azok a csomagok illeszthet˝ ok, amelyek e szabvány alapján épülnek fel.
Az oszlop a csomagban található néhány jelz˝obit el˝oírt állapotát adja meg. A példában a bitek helyén a karakter áll, ami azt jelzi, hogy a szabály nem tartalmaz ilyen jelleg˝ u megkötést.
A szabály által el˝oírt forrás IP címet (esetleg tartománynevet) tartalmazza. A példában a és az (bárhova) kifejezések állnak ebben az oszlopban, ami azt jelenti, hogy a szabály nem tartalmaz megkötést a küld˝ o IP címére vonatkozólag.
Az oszlop a szabályban el˝oírt címzett IP címet tartalmazza. 3 Az utolsó oszlopban további adatokat olvashatunk. A példában szerepl˝ o a destination port (cél logikai kapu) rövidítése. Az által kiírt táblázatban a 3 a tagadás jelzésére szolgál, az adott mez˝ o értékét ellentétére változtatja6 .
o példa egy összetettebb szabályrendszer részletes listáját 67. példa. A következ˝ mutatja be. A táblázatot kissé módosítottuk helytakarékosság céljából, a túlságosan hosszú sorokat a \ jellel jelöltük. 6 Figyeljünk rá, hogy a BASH sajátosan értelmezi a jelet, ha elfelejtünk mögé szóközt helyezni, és ez látszólag érthetetlen problémákat okozhat (a lektor).
i
i i
i
i
i “rendszergazda-II” — 2005/9/7 — 14:09 — page 202 — #202
i
202
i
Hálózatok összekapcsolása
iptables -L -v @. >=GV9 2-! <)G & - B & ,! 3 ,! " 1 1- @@5G9 ## ! !/. !/. @@5G9 -$ ## ! ! !/. !/. % %' @@5G9 1 ## ! ! !/. !/. '% '' ''' @@5G9 - ## ! ! !/. !/. '% R"FQ=B)9B@(Q= && &% @@5G9 - ## ! ! & & ( !/. . ' %% @@5G9 - ## ! ! !/. !/.
@. +)[)< 2-! <)G - B ,! 3 ,! " 1 1- @. V9GV9 2-! @@5G9 ,! " @@5G9 -$ ## #! <)G -$ ## #! % <)G -$ ## $#!
1 \
- \
- \
- .\
& - B % ,! 3 1 1- ! !/. !/.
-$ -.\
! ! !/.
F & & ( -$ -.\
! F !/.
!/.
-$ $\
Amint látjuk, a program által készített listában szerepelnek olyan információk is, amelyek az egyszer˝ usített listában nem jelentek meg. A szabályokat sokszor kizárólag a részletes lista alapján lehet megérteni! A példában szerepl˝ o új oszlopok jelentése a következ˝ o:
A csomagok száma, amelyek esetében az adott szabályt kellett alkalmazni. Amint látjuk, az alapszabályoknál is megjelenik ez az érték.
Az adatmennyiség, amelyet az adott szabály alkalmazása érintett. Amint látható, az alapszabály esetében is megjelenik ez az érték.
A szabályban el˝oírt bemen˝o hálózati csatoló neve. A szabályban el˝oírt kimen˝o hálózati csatoló neve. Az alapszabály megváltoztatása Láttuk, hogy a szabályrendszerekhez tartozik egy alapszabály, ami meghatározza, hogy mi a sorsa azoknak a csomagoknak, amelyekre egyetlen szabály sem volt illeszthet˝ o. A szabályrendszerhez tartozó alapszabály megváltoztatására az a következ˝ o formában használható:
i
i i
i
i
i “rendszergazda-II” — 2005/9/7 — 14:09 — page 203 — #203
i
i
203
A t˝ uzfalak
név sors A vagy < kapcsolóval adhatjuk meg, hogy mi legyen a sorsa azoknak a csomagoknak, amelyekre egyetlen szabály sem volt illeszthet˝ o. A kapcsoló után megadott név a szabályrendszer neve, a sors pedig az alapszabály által el˝ oírt sors. A csomagok sorsára a következ˝ okben többször is visszatérünk, fokozatosan mutatjuk be a használható kulcsszavakat. Az alapszabályként használható legfontosabb sorsok a következ˝ ok:
MPPB
CE(< Az illeszked˝o csomagot a szabály alapján a rendszermag eldobja. Az ilyen csomagról a csomagot küld˝ o folyamat vagy számítógép nem kap értesítést.
o példa bemutatja, hogyan tilthatunk ki minden átmen˝ o 68. példa. A következ˝ forgalmat a számítógépünkr˝ ol az alapszabály megváltoztatásával:
* ;; 0 \I=?=R R=I% Nem szabad szem el˝ ol téveszteni, hogy a parancs végrehajtása után az alapszabály ugyan az lesz, hogy az átmen˝ o csomagokat figyelmen kívül kell hagyni, de ha léteznek olyan szabályok a R(E`MEC szabályrendszerben, amelyek elfogadják az adott csomagot, a csomagra nem az alapszabály lesz az érvényes. A szabályrendszerek kiürítése A szabályrendszerekben található szabályokat egyetlen parancs kiadásával törölhetjük. Ezt mutatjuk be a következ˝ o néhány sorban. A szabályrendszerek törlése kapcsán meg kell jegyeznünk, hogy sokak szerint egyetlen pillanatra sem engedhetjük meg magunknak, hogy a számítógépünk védtelen legyen, mert el˝ ofordulhat, hogy éppen abban a pillanatban ér minket támadás (helyesebben mondva abban a pillanatban is támadás éri a számítógépünket). Ha tehát törölni akarjuk a szabályokat, és új szabályrendszert akarunk felépíteni, akkor el˝ obb az alapszabály segítségével meg kell tiltanunk minden csomag fogadását, és csak utána szabad a szabályrendszer szabályait törölnünk. Ez a probléma egy mélyebb jelent˝ oség˝ u kérdést is felvet. Állítsuk az alapszabályt tiltó jelleg˝ ure, és soroljuk fel a kivételeket, amelyeket megengedünk, vagy állítsuk az alapszabályt megenged˝ o jelleg˝ ure, és soroljuk fel a kivételeket, amelyeket tiltunk. Az el˝ obbi módszernek (mindent tiltunk, amit nem soroltunk fel) sokkal több követ˝ oje van, mivel biztonságosabb, el˝ ofordulhat azonban olyan eset, amikor a második (mindent megengedünk, amit nem soroltunk fel) módszer célravezet˝ obb. Ha különlegesen megenged˝ o t˝ uzfalat telepítünk, ami csak a legnyilvánvalóbb támadásokat sz˝ uri ki, akkor a megenged˝ o elrendezést érdemes használni. Ekkor viszont a hálózatunkat egy bels˝ o, szigorú t˝ uzfallal kell védenünk! Ez azt jelenti,
i
i i
i
i
i “rendszergazda-II” — 2005/9/7 — 14:09 — page 204 — #204
i
204
i
Hálózatok összekapcsolása
hogy a megenged˝ o elrendezést csak többszint˝ u t˝ uzfalrendszer esetén használjuk, ami a kimondottan nagy számítógép-hálózatokra jellemz˝ o, ahol a több száz vagy több ezer munkaállomás védelmét hierarchikus csomagsz˝ ur˝ o rendszerrel látjuk el. A rövid bevezet˝ o után következzék a szabályrendszer összes szabályának törlésére használható parancs:
"név# A kifejezésben szerepl˝o vagy R kapcsolóval a szabályrendszer minden szabálya törölhet˝ o. A parancsban szerepl˝ o név a szabályrendszer neve, amelyb˝ ol a szabályokat törölni szeretnénk. Ha nem adunk meg nevet, a program az *+<;D, a R(E`MEC és az (;D<;D szabályrendszer szabályait is törli. A szabályrendszerek törlése kapcsán meg kell jegyeznünk, hogy az
programmal új szabályrendszereket is létrehozhatunk (erre a kés˝ obbiekben még visszatérünk). Ha a kapcsoló után nem adunk meg nevet, a program ezeket az általunk létrehozott szabályrendszereket is törli, ezért a három beépített szabályrendszer egyenkénti törlése nem teljesen egyenérték˝ u a név nélkül kiadott parancs hatásával.
o példa tiltásra állítja a három szabályrendszer alapszabá69. példa. A következ˝ lyát, majd törli az összes szabályt:
D ($& *&0 ( *&0 / * ;; 0 \I=?=R =@@
Új szabály elhelyezése A szabályrendszerekbe a következ˝ o kapcsolók segítségével helyezhetünk el új szabályokat:
név szabály A szabályrendszerekhez a vagy M kapcsoló segítségével f˝ uzhetünk új szabályt. A kapcsolót használva a szabályt a szabályrendszer végén, az utolsó szabály után hozzuk létre. A parancsban található név a szabályrendszer neve (*+<;D, (;D<;D vagy R(E`MEC), a szabály pedig a szabály pontos leírása, amelyre a kés˝obbiekben még visszatérünk.
i
i i
i
i
i “rendszergazda-II” — 2005/9/7 — 14:09 — page 205 — #205
i
i
205
A t˝ uzfalak Név
Jelentés a hálózat nem elérhet˝ o a számítógép nem elérhet˝ o a kapu nem elérhet˝ o a szabvány nem elérhet˝ o a hálózat tiltott a számítógép tiltott
7.1. táblázat. A küldhet˝ o ICMP csomagtípusok
név "szám#szabály A vagy * kapcsolóval tetsz˝oleges helyre szúrhatunk be szabályt a szabályrendszerbe. A kapcsoló után megadott szám az elhelyezett új szabály sorszáma, ahol a szabályok számozása 1-t˝ ol indul. Ha nem adunk meg sorszámot, a szabály a szabályrendszer elejére kerül.
név "szám#szabály A vagy E kapcsolóval szintén tetsz˝ oleges helyen helyezhetünk el szabályt, de az ott található szabályt felülírva. Amikor új szabályt helyezünk el valamelyik szabályrendszerben, le kell írnunk magát a szabályt, amely megadja, hogy az milyen csomag esetében használható, és milyen sorsot ír el˝ o az adatcsomag számára. A szabály megadására a következ˝ o kapcsolókat használhatjuk:
"3# protokoll A vagy kapcsolóval a szabályban szerepl˝ o protokollt. A protokoll helyén a , , és az (minden) kulcsszó, valamint a állományban található összes többi protokollnév állhat. A protokoll el˝ ott elhelyezhetjük a 3 jelet a tagadás jelzésére. Ekkor a szabály azokra a csomagokra lesz érvényes, amelyek nem az adott protokoll szerint épülnek fel.
"3# cím" maszk# A vagy kapcsolóval megadhatjuk a szabályban szerepl˝ o forrás IP címet. Ha a cím után megadjuk az alhálózati maszkot tízes számrendszerben vagy a hálózati címben található bitek számával, a szabály több címre is illeszkedhet. Ha a cím el˝ ott elhelyezzük a 3 jelet a tagadás jelzéseként, a cím illesztését az ellentettjére változtathatjuk.
"3# cím" maszk# A vagy kapcsolóval megadhatjuk a szabályban található cél IP címet a már bemutatott forrás IP címhez hasonló szabályok alapján.
i
i i
i
i
i “rendszergazda-II” — 2005/9/7 — 14:09 — page 206 — #206
i
206
i
Hálózatok összekapcsolása
G sors A G vagy G kapcsolóval megadhatjuk a szabályra illeszked˝o adatcsomagok sorsát. A kapcsoló után megadható kulcsszavak közül a legfontosabbak a következ˝ ok:
MPPB
EBBPD Az illeszked˝o csomagot a rendszermag eldobja, és err˝ol – egy ICMP csomagban – értesíti az ellenállomást. Azt, hogy a Linux rendszermag milyen típusú ICMP csomaggal jelezze az adatcsomag elutasítását, a G kapcsolóval adhatjuk meg, amelyet az 7.1. táblázat valamelyik kulcsszava követ. Amint látjuk, a szabályokban körülbelül ugyanolyan sorsot jelölhetünk ki a csomag számára, mint a szabályrendszer alapszabályában. Az b˝ ovítéseként még néhány más sors is a rendelkezésünkre áll, amelyekre a kés˝ obbiekben visszatérünk7 .
"3# név A vagy kapcsolóval olyan szabályokat készíthetünk, amelyek csak azokra a csomagokra illeszthet˝ ok, amelyek az adott nev˝ u hálózati csatolón érkeztek a számítógépre. Ezt a kapcsolót csak az *+<;D és a R(E`MEC szabályrendszeren belül elhelyezett szabályok esetében használhatjuk. A 3 karakter a tagadás jelzésére használható.
"3# név A vagy kapcsolóval megadhatjuk a kimen˝ o hálózati csatoló nevét (például ). A szabály csak azokra a csomagokra illeszkedik, amelyek ezen a hálózati csatolón keresztül kísérlik meg elhagyni a számítógépet. Ezt a kapcsolót csak a R(E`MEC és az (;D<;D szabályrendszerekben használhatjuk. A 3 karakterrel a tagadást jelezhetjük, a segítségével olyan szabályt készíthetünk, amely nem illeszthet˝ o a csomagokra, amelyek az adott hálózati csatolón keresztül hagyják el a számítógépet. 7 Valójában
már a sors is b˝ ovítés, ráadásul magyar szakember, K ADLECSIK J ÓZSEF alkotása.
i
i i
i
i
i “rendszergazda-II” — 2005/9/7 — 14:09 — page 207 — #207
i
i
207
A t˝ uzfalak Név
? $ ?
Jelentés a cél nem elérhet˝ o kapcsolatellen˝ orz˝ o válasz kérése kapcsolatellen˝ orz˝ o válaszcsomag csomagdarabolás szükséges a számítógép nem elérhet˝ o a hálózat nem elérhet˝ o a logikai kapu nem elérhet˝ o a csomag végelgyengülésben meghalt óra értékének lekérdezése óra értékének küldése
7.2. táblázat. A legfontosabb ICMP csomagtípusok
"3# A vagy kapcsolóval megadhatjuk, mi történjék a csomagtöredékekkel. A 3 itt is a tagadás jele, a segítségével megadhatjuk, mi történjék azokkal a csomagokkal, amelyek nem csomagtöredékek. A csomagtöredékekben nem található meg a csomag legfontosabb tulajdonságait leíró fejléc, ezért azok tulajdonságai nem kideríthet˝ ok. Mivel a csomagtöredékek igen kifinomult támadások eszközei lehetnek – és kifinomult támadóprogramokat bárki képes futtatni –, a csomagtöredékeket általában kisz˝ urjük.
ol, 70. példa. Egy drasztikus lépéssel tiltsuk ki az összes számítógépet a gépünkr˝ amely nem egy adott hálózatba tartozik!
* ;;
F%7B ;; 3 3 ;;M R=I% Az elhelyezett szabály a *+<;D szabályrendszer elejére kerül, aminek két fontos következménye is van. Egyrészr˝ ol nyilvánvaló, hogy a számítógépünk esetleg hajlandó csomagokat továbbítani más számítógépek számára is, hiszen a R(E`MEC szabályrendszert nem módosítottuk, másrészr˝ ol viszont mindegy, hogy milyen szabályok voltak az *+<;D szabályrendszerben, hiszen ez a szabály kerül els˝ o helyre, és ez minden csomagot eldob. Ha a szabály elhelyezésekor megadjuk, hogy a szabály az ICMP alapprotokollú ové csomagokra vonatkozik, az betölti a modult, amely elérhet˝ teszi a következ˝ o kapcsolót:
"3# név A kapcsolóval megadhatjuk a szabályban szerepl˝o ICMP csomagtípust. A 3 a tagadás jelzésére szolgál, a segítségével a szabályban nem jelzett összes ICMP csomagtípusra hivatkozhatunk. Az ICMP csomagtípusok neveit a kapcsolójával írathatjuk ki. A legfontosabb csomagtípusokat a 7.2. táblázat tartalmazza.
i
i i
i
i
i “rendszergazda-II” — 2005/9/7 — 14:09 — page 208 — #208
i
208
i
Hálózatok összekapcsolása
71. példa. Tiltsuk le a számítógépünkön az óra lekérdezésére használt ICMP csomagok fogadását! Ez a lépés különösen hasznos lehet akkor, ha nem akarjuk, hogy bárki megtudhassa, mi a számítógép beépített órájának aktuális állása, mert az id˝ ot˝ ol is függ˝ o titkosítórendszert használunk.
* ;; ( F%7B ;; X ;;;0 ;6 X ;;M R=I%
A példát kissé átalakítva készíthetünk olyan szabályt, amely a hálózatellen˝ orzésre használt kérést közvetít˝ o csomagokat tiltja. Így viszonylag jól „elrejt˝ ozhetünk” a hálózaton, hiszen a számítógépünk nem válaszol a programmal küldött kérésekre. ˝ket egy bizonyos címtarTiltsuk le az kéréseket, de hagyjuk érintetlenül o tomány számítógépe számára!
* ;; ( F%7B ;; X ;;;0 $ ;6 X ;; 3 3 1111++ X ;;M R=I%
Mivel a számítógépünk a ! címen éri el saját magát, most szerencsétlen módon számára is sikerült le tiltanunk ezeket a csomagokat. Egy újabb szabály elhelyezésével engedélyezhetjük az összes ICMP csomag fogadását:
* ;;
F%7B ;; X ;; 3+++11+++ ;;M <<@%B
Most a szabályrendszerünk a következ˝ o: iptables -L INPUT @. >=GV9 2-! @@5G93
" 1- @@5G9 -$ ## &( <)G -$ ## !/. <)G -$ ## F & &( '
!/. !/. !/.
-$ $ $#]1 -$ -.#]1
A szabályrendszer viszonylag egyszer˝ u, de a céljainknak esetleg megfelelhet. Ha a szabály elhelyezésekor megadjuk, hogy a szabály az UDP alapprotokollú csomagokra vonatkozik, az betölti az modult, amely elérhet˝ ové teszi a következ˝ o kapcsolókat:
"3# kapu"kapu# A kifejezés segítségével megadhatjuk a forrásként szerepl˝ o logikai kapu számát. A kapu száma helyett használhatjuk o neveket is. a állományban szerepl˝
i
i i
i
i
i “rendszergazda-II” — 2005/9/7 — 14:09 — page 209 — #209
i
i
209
A t˝ uzfalak Név
9-+ MPN R*+ E9D ;E) <9: M'' +(+B
Jelentés kapcsolatkérés, sorszámok egyeztetése visszaigazolás, nyugtázás kapcsolat zárása, befejezés FIXME sürg˝ os FIXME minden kapcsoló egyetlen kapcsoló sem
7.3. táblázat. A TCP kapcsolók elnevezése
Ha a kapu száma után jellel elválasztva egy újabb számot – esetleg nevet – is megadunk, a logikai kapu egész tartományát elhelyezhetjük egy szabályban. Az els˝ o számot elhagyhatjuk (például ), annak alapértelmezett értéke 0. A második számot szintén elhagyhatjuk (például ), ennek alapértelmezett értéke 65535.
"3# kapu"kapu# Ezzel a kifejezéssel a forrás logikai kapu értékének mintájára megadhatjuk a cél logikai kaput is. Ha a szabály elhelyezésekor megadjuk, hogy a szabály a TCP alapprotokollú ové csomagokra vonatkozik a szabály, az betölti a modult és elérhet˝ teszi a következ˝ o kapcsolókat:
"3# kapu"kapu# A kifejezés segítségével az UDP protokollú csomagokhoz hasonló módon megadhatjuk a TCP csomagokban forrásként megadott logikai kapu értékét.
"3# kapu"kapu# A címzett logikai kapu megadása a már ismert módon történik.
"3# maszk be A csomagban található TCP kapcsolók vizsgálatát állíthatjuk be ezzel a kifejezéssel. A kifejezésben található maszk lista megadja, hogy mely biteket vizsgáljuk, míg a be lista felsorolja, hogy mely biteknek kell bekapcsoltnak lenniük. Azoknak a biteknek, amelyeket a maszk listában felsoroltunk, de a be listában nem, kikapcsolt állapotban kell lenniük ahhoz, hogy a csomag illeszkedjen a szabályra. Mind a maszk, mind pedig a be listában kulcsszavakat adhatunk meg vessz˝ ovel elválasztott listában. A bitek jelzésére használható kulcszavakat a 7.3. táblázatban láthatjuk.
"3# A kapcsoló segítségével megadhatjuk, hogy mi történjék azokkal a TCP csomagokkal, amelyekben a SYN bit be van kapcsolva, de az ACK
i
i i
i
i
i “rendszergazda-II” — 2005/9/7 — 14:09 — page 210 — #210
i
210
i
Hálózatok összekapcsolása bit nincs. Ezzel a kapcsolóval a TCP kapcsolatot „egyirányúsíthatjuk”, ami roppant hasznos – bár kissé önz˝ o – módja a védekezésnek. Amint láttuk, azok a TCP csomagok, amelyekben a SYN bit be van kapcsolva, de az ACK bit nincs, kapcsolatkiépítést kérnek. Ha ezeket a csomagokat eldobjuk, küls˝ o számítógép nem tudja felvenni a számítógépünkkel – vagy az általa védett hálózattal – a kapcsolatot TCP protokollt használva. Ha viszont eldobnánk azokat a csomagokat is, amelyekben mind a SYN, mind pedig az ACK bit be van kapcsolva, akkor a saját számítógépünk sem lenne képes kapcsolatot kezdeményezni, hiszen láttuk, hogy a kapcsolatkér˝ o csomagokra adott els˝ o válaszcsomagban e két bit be van kapcsolva. Ha tehát csak használni akarjuk az Internetet, de nem akarjuk, hogy az Internet is használja a számítógépünket, mindenképpen javasolható a g kapcsolóval készített szabályok használata.
72. példa. Tiltsuk, az összes TCP csomag fogadását, kizárólag az kapura érkez˝ o csomagokat engedélyezzük!
* ;; ( F%7B ;; X ;;( ;
$ ;;M =@@
A példában szerepl˝ o szabály hatása az *+<;D szabályrendszerben már megtalálható egyéb szabályoktól függ, de ha más szabály nincs a szabályrenszerben, akkor minden csomagot visszautasít, amely nem az logikai kapura érkezik. Szabály törlése A következ˝ o kifejezések segítségével egy-egy szabályt törölhetünk a szabályrendszerekb˝ ol:
név szám A szabályrendszer adott számú szabályának törlését a vagy C kapcsolóval végezhetjük el. A kapcsoló után megadott név a szabályrendszer neve, a szám pedig a szabály sorszáma. A szabályok számozása a 1-t˝ ol kezd˝ odik.
név szabály A szabályok törlését a szabály leírásával is kérhetjük. Ilyen esetben a programot az új szabály létrehozásánál már látott kapcsolókkal használhatjuk. Összefoglalás A következ˝ o példa segítségével összefoglaljuk az eddig bemutatott képességeit. A példa egy t˝ uzfalszabályokat létrehozó egyszer˝ u héjprogramot mutat be, amely egy munkaállomás védelmét látja el. Érdemes azonban felhívni a figyelmet arra, hogy ez a példa inkább csak az ismeretek összefoglalására alkalmas, oly egyszer˝ u és oly kevés elemet tartalmaz, hogy komoly munkára nem használható.
i
i i
i
i
i “rendszergazda-II” — 2005/9/7 — 14:09 — page 211 — #211
i
A t˝ uzfalak
i
211
73. példa. A következ˝ o példa egy igen egyszer˝ u – monhatnánk primitív – t˝ uzfalat valósít meg munkaállomások számára.
1 # 3 , " + 1 # 3 , " + 1 # 3 , " + 1 # 3 , " +
* * $ 55 ** WW ]) *&0 )E &**E &&5 \I=?=R *&0 ( ( ( * * ;; 0 \I=?=R R=I% * ;;) $ \I=?=R F%7B *&0 ( )E @U** ( ) ; (& & M 5 M( $& 0 ) (& & (0 * ;; 0 F%7B R=I% * ;;) $ F%7B D ( ) ( / $0 &E/U * ;; ( F%7B ;; ; ) ;;M <<@%B D ( F
* ;; ( F%7B ;; ;;M <<@%B ) U 7R% B<% ( ) ( @ $U
(: 5 ( (( &0 :: $ &$M 5 0 ] : * ;; ( F%7B ;; ( X ;;( ; +! X ;;M <<@%B * ;; ( F%7B ;; X ;; 0 X ;;( ; +! X ;;M <<@%B X M& $&/ ) (M 88. * ;; ( F%7B ;; X ;;( ;
$ X ;; 3 3 + X
i
i i
i
i
i “rendszergazda-II” — 2005/9/7 — 14:09 — page 212 — #212
i
212
1 # 3 , " 1+ 1 1 1 1 11 1# 13 1, 1" #+ # # # # #1 ## #3 #, #" 3+ 3 3 3 3 31
i
Hálózatok összekapcsolása
;;M <<@%B D ( $
) (M .BB% @ 0 & & * 5 ( ( &/ *: $ M/ M: * ;; ( F%7B ;; X ;;( ; $ X ;;M <<@%B I7B%7B *&0 ( DM( ( ( 5 $& 0 / & * ;; 0 I7B%7B <<@%B * ;;) $ I7B%7B @ (0 $ ( & $0 &E/ )5 M(
M ( 5 $&/; E &E/ && * ;; ( I7B%7B ;; X ;;;0 $ ;0 X ;; ; ) X ;;M <<@%B * ;; ( I7B%7B ;; X ;;;0 $ ;0 X ;;( 3 3 + X ;;M R=I% M& E ( M (U & & & * ;; ( I7B%7B ;; X ;;;0 ;0 X ;; ; ) X ;;M R=I%
A program áttanulmányozása során láthatjuk, hogy igen egyszer˝ u szabályrendszerr˝ ol van szó, ami nem elég kifinomult ugyan a munkaállomás védelmére, de mindenképpen hozzájárul a biztonság növeléséhez. A program által létrehozott szabályrendszer részletes listája a 201. oldalon a 67. példában található.
i
i i
i
i
i “rendszergazda-II” — 2005/9/7 — 14:09 — page 213 — #213
i
A t˝ uzfalak
i
213
7.2.2. A csomag el˝ otörténete Amint láttuk, a SYN bit vizsgálatával megtudhattuk, hogy az adott TCP csomag új kapcsolat részeként, vagy egy már felépített kapcsolat részeként jutott a számítógépünkre. Ez roppant hasznos lehet˝ oség, hiszen általában azt szeretnénk elérni, hogy a számítógépünk által már kiépített kapcsolatok csomagjait a csomagsz˝ ur˝ o átengedje, viszont ne tegye lehet˝ ové a küls˝ o számítógépek kapcsolatfelépít˝ o csomagjainak fogadását. A SYN bit vizsgálatán alapuló módszernek azonban két komoly hiányossága is van: • Kizárólag a TCP adatcsomagokban található SYN bit, ezért ezzel a módszerrel nem kezelhet˝ ok például az UDP csomagok. • Léteznek olyan hálózati protokollok, amelyek lehet˝ ové teszik, hogy a kiszolgáló új kapcsolatot építve teljesítse az ügyfél kéréseit. Ilyen protokoll például az FTP (aktív FTP), ahol a kiszolgáló az ügyfél által kért adatokat egy általa nyitott új TCP kapcsolat segítségével küldi el. Nyilvánvaló, hogy az ilyen kapcsolatok felépítését a csomagsz˝ ur˝ o t˝ uzfalnak engedélyeznie kell, nem tilthatja tehát az összes kapcsolatkezdeményezést tartalmazó csomag fogadását. Mindkét problémánkat megoldhatjuk, ha a csomagsz˝ ur˝ o t˝ uzfalat képessé tesszük arra, hogy emlékezzen a rajta áthaladt csomagokra, és számítson a válaszcsomagokra, amelyeket át kell engednie. Az ilyen t˝ uzfal képes arra, hogy megjegyezze, mit kértünk a külvilágtól, és a beérkezett csomagokról ez alapján el tudja dönteni, hogy azok a mi kérésünkre érkezett válaszcsomagok-e. A következ˝ okben el˝ oször bemutatjuk, hogyan lehet programmodulokat betölteni az programrendszerbe, majd megvizsgáljuk, hogyan lehet a csomagok el˝ otörténetét is figyelembe vev˝ o szabályokat készíteni. A modulok betöltése Az – és maga a – igen átgondolt tervezéssel készült (ami nem is meglep˝ o, hiszen ez a Linux rendszermag csomagsz˝ ur˝ o rendszerének harmadik generációja), nagyon rugalmas beállítási lehet˝ oségekkel. oségeket anAz / programrendszer a rugalmas beállítási lehet˝ nak köszönheti, hogy képes küls˝ o modulokat betölteni és a Linux rendszermag hálózatkezelését a modulok segítségével módosítani. o kapcsolójával kérhetjük: Modulok betöltését az következ˝
név A kapcsoló segítségével az szolgáltatásait b˝ovít˝o modult tölthetünk be. A kapcsoló hatására a rendszermag a megfelel˝ o magmodult ové teszi a modul beállítására használható betölti, az pedig elérhet˝ kapcsolókat. A kifejezésben található név a betöltend˝ o modul neve. A parancs segítségével sok hasznos modulról kaphatunk információt.
i
i i
i