IP pakettide filtreerimine

Allikas: Kuutõrvaja
Redaktsioon seisuga 9. mai 2010, kell 20:08 kasutajalt Imre (arutelu | kaastöö) (Dünaamiline filtreerimine)

Sissejuhatus

TCP/IP-põhisel andmevahetusel liiguvad andmed üle võrgu IP-pakettidena. Tavaliselt juhitakse marsruutinguga IP-pakett tema päises sisalduva informatsiooni põhjal sinna, kuhu ta algselt saadeti. Marsruutereid, mis on konfigureeritud IP-pakette analüüsima ning mis võivad näiteks teatud tingimustele vastavaid IP- pakette pillata, nimetatakse IP-filtriteks.

Tüüpiliselt toimub IP-pakettide filtreerimine kohtvõrgu ja Interneti piiril olevas marsruuteris või tulemüüris.

IP-pakett

Kirjeldame IP-paketti vastavalt neljakihilisele TCP/IP protokolli pinu mudelile

   * rakenduskiht (ingl. k. application layer)
   * transpordikiht (ingl. k. transport layer)
   * internetikiht (ingl. k. internet layer)
   * võrgukiht (ingl. k. network access layer) 

Kui näiteks Telneti klient ja server omavahel suhtlevad, siis andmete saatja liigutab andmed mööda pinu alla ja vastuvõtja vastupidi, alt ülesse.

   * Rakenduskihis töötav programm (Telneti klient) annab andmed edasi transpordikihile.
   * Transpordikihis on andmete ette lisatud transpordikihi päis: Telneti puhul TCP-päis, milles on kirjas
     lähte ja sihtpordi number. Transpordikihist antakse andmed edasi internetikihile.
   * Internetikihis on andmete ette lisatud internetikihi päis: lähte- ja sihtpunkti IP-aadress.
     Internetikihist antakse andmed edasi võrgukihile.
   * Võrgukihis on andmete ette lisatud võrgukihi päis: järgmise marsruuteri MAC aadress. 

Iga järgneva päise lisamisel käsitletakse eelmises kihis moodustatud paketti andmetena. Nii on võrgukihi paketti kapseldatud lisaks andmetele ka kahe keskmise kihi päised.

Rakenduskiht                              |  andmed         |
 
Transpordikiht                     | päis |  andmed         | 

Internetikiht               | päis | päis |  andmed         |

Võrgukiht            | päis | päis | päis |  andmed         |

Kihilisus väljendab tööjaotust - iga kiht teeb andmetega ära just niipalju kui ette nähtud:

   * Võrgukiht tagab, et pakett jõuab alamvõrgus marsruuterini.
   * IP-kiht tagab, et pakett saab sihtpunkti marsruuditud.
   * Transpordikiht tagab, et pakett antakse sihtpunkti masina vastava pordi kaudu rakendusele üle. 

IP-pakettide filtreerimine toimub tegelikult analüüsides interneti- ja transpordikihi päiseid. Asja teeb keerulisemaks see, et transpordikihis kasutatakse levinult kolme erinevat protokolli: TCP, UDP ja ICMP. Iga rakenduskihi protokoll on sobiv teatud rakenduste jaoks.

IP-paketi päises on filtreerimise jaoks oluliseks informatsiooniks:

   * IP-paketi lähtepunkti IP-aadress
   * IP-paketi sihtpunkti IP-aadress
   * transpordikihi protokoll 

Järgnevas kolmes punktis käsitletakse, millist IP-pakettide filtreerimise seisukohalt olulist informatsiooni sisaldavad erinevate transpordikihi protokollide päised.

UDP protokoll

UDP (User Datagram Protocol) on ühenduseta edastusega transpordikihi protokoll, mida kasutavad näiteks DNS, NFS v2 ja Talk.

Ühenduseta edastus tähendab seda, et kliendi masinast saadetakse UDP datagrammi sisaldav IP-pakett serverisse ning server saab sellele paketile vastuse saata. Filtreerimise seisukohalt on oluline UDP datagrammi päises olev lähte-ja sihtport. Ühenduseta andmevahetus toimub üksikuid pakette vahetades. Kui klient otsustab saata järgmise UDP datagrammi, siis selle lähteport ei pruugi olla sama, mis eelmisel samasse sihtkohta saadetud datagrammil.

UDP protokollile on iseloomulik, et protokollikihis ei toimu andmevahetuse õnnestumise kontrolli. Selle eest peab hoolitsema rakenduskiht.

UDP datagrammi sisaldavate IP-pakettide filtreerimise muudab keeruliseks see, et UDP protokoll ei võimalda eristada kliendi poolt saadetud paketile vastuseks tulevat paketti sellisest paketist, mis on saadetud sisse nö omaalgatuslikult.

Näiteks kui resolver esitab nimeserverile pärigu ja UDP lähteport on 2555 ning sihtport 53, siis vastuseks tulev pakett saabub tagasi porti 2555.

Kuna kliendid võivad põhimõtteliselt kasutada suvalisi üle 1023 porte, siis ei saa neid porte UPD protokolli puhul blokeerida. Samas ei või kindel olla, et kõik sisse tulevad ja üle 1023 porti suunduvad UDP paketid on vastused äsja lahkunud UDP pakettidele.

Viimane asjaolu annab võimaluse UDP porte skaneerida.

TCP protokoll

TCP (Transmission Control Protocol) on ühendusega edastusega transpordikihi protokoll, mida kasutavad näiteks Telnet, SSH, FTP, HTTP ja SMTP.

Ühendusega edastuse puhul moodustavad klient ja server andmekanali, mis tähendab, et mõlemad pooled fikseerivad pordi, mida edasisel andmevahetusel kasutatakse. Nende portide vahel toimuv andmevahetus on kahesuunaline.

Ühendust alustatakse "kolmekordse käepigistusega" (ingl. k. three-way handshake), mille käigus annavad mõlemad osapooled nõusoleku andmevahetuse pidamiseks ning ühendus ka lõpetatakse kooskõlaliselt.

Filtreerimise seisukohalt on oluline, et ühendust algatava poole saadetud esimese IP-paketi TCP segmendi päises pole seatud ACK lipp. Kõikides järgnevates pakettides on see seatud. Seda asjaolu saab kasutada väljast sisse tulevate ja seest välja minevate ühenduste eristamiseks. Samuti on igas TCP segmendis kirjas lähte-ja sihtpordi number.

TCP protokollile on iseloomulik, et protokollikihis toimub andmevahetuse õnnestumise kontroll.

TCP segmente sisaldavate IP-pakettide filtreerimine on praktiliselt kõige efektiivsem, kuna lihtsalt saab teha kindlaks, millised ühendused on algatatud seest ja millised väljast. Tihti soovitakse lubada TCP protokolli abil tekitada ühendusi sissepoole ainult teatud portidele, millele vastavad serverid.

Näiteks kui Telneti klient alustab suhtlemist Telneti serveriga ja saadetakse TCP segment lähtepordist 3555 sihtporti 23, siis kogu järgnevaks andmevahetuseks kasutatakse vaid neid porte.

Kuigi kliendid võivad põhimõtteliselt kasutada suvalisi üle 1023 porte, saab neid TCP protokolli puhul väljast algatatud ühenduste jaoks blokeerida.

Viimane asjaolu võimaldab keelata TCP portide skaneerimist.

ICMP protokoll

ICMP (Internet Control Message Protocol) on mõeldud kontrollsõnumite edastamiseks. ICMP paketid sisalduvad IP-paketis sarnaselt TCP segmendile või UDP datagrammile ning ICMP paketi päises on kirjas sõnumi tüüp.

ICMP sõnumeid kasutatakse näiteks marsruutingul veateadete edastamiseks. Näiteks kui klient püüab luua ühendust serveriga, kuid vastav teenus on blokeeritud, siis server võib

   * pillata IP-paketi (ingl. k. drop), so saata mitte midagi kliendile tagasi; klient loobub timeoutiga määratud aja pärast
   * keelduda IP-paketti vastu võtmast (ingl. k. reject), so kliendile saadetakse tagasi ICMP-ga veateade 

Filtreerimise seisukohast on oluline otsustada, kas ja milliseid veateateid vastu saata. Pealtnäha viisakas veateate vastusaatmine võimaldab pahalasel teha teie süsteemi kohta rohkem järeldusi.

Üldiselt soovitatakse lubada ICMP pakettide liiklust, kuna seda saavad ära kasutada vaid suhteliselt primitiivsed ründevahendid.

IP-pakettide fragmenteerumine

Meediumid, mida mööda IP-paketid liiguvad seavad piiri maksimaalsele paketi suurusele. IP-protokoll näeb ette võimaluse vajadusel liiga suure paketi tükeldada mitmeks väiksemaks IP-paketiks ehk fragmendiks. Edasise tee kuni sihtpunktini liiguvad need fragmendid iseseisvalt, kuni sihtpunktis moodustatakse nendest taas algne IP-pakett.

Filtreerimise seisukohalt on oluline arvestada, et vaid esimesese fragmendi päises on lisaks IP-päisele transpordikihi päis, näiteks TCP päis. Ülejäänud pakettides sisaldub vaid IP-paketi päis, milles on ka täiendav info sellest, millises järjekorras sihtpunktis saabunud fragmendid kokku liita.

Tavaliselt lastakse kõik peale esimese fragmendi pikemata IP-filtrist läbi ja analüüsitakse vaid esimest fragmenti. Kui esimene fragment ei saa filtrist mööda, vaatamata sellele, et kõik teised said, siis ei saa algset IP-paketti moodustada ning kokkuvõttes filtreerimine toimib.

Dünaamiline filtreerimine

Et saada kontrollida, millises suunas lubatakse algatada ühenduseta edastusi, nagu näiteks UDP protokolli puhul, kasutatakse dünaamilist filtreerimist. Tehnika seisneb selles, et IP-filter tekitab ise vajalikud reeglid ja need kehtivad teatud aja.

Näiteks on võimalik luua olukord, et välja saab saata UDP pakette, kuid väljast sisse ei saa, va neid, mis on vastuseks seest väljasaadetutele.

Selleks seatakse vaikimisi UDP jaoks pordid sissetulevatele datagrammidele suletuks ning väljuvatele avatuks. Kui UDP datagrammi sisaldav IP-pakett lahkub masinast, siis jätab IP-filter meelde vastava lähtepordi ning eeldades, et vastus saabub näiteks ühe minuti jooksul, lubatakse väljast sisse sellele lähtpordile üks UDP datagramme ühe minuti jooksul.

Kasulikud lisamaterjalid