Iptables: Difference between revisions
(23 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
Koostanud: '''Mikk Käosaar''' A41, ''Detsember 2011'' | Koostanud: '''Mikk Käosaar''' A41, ''Detsember 2011''<br> | ||
Viimati muudetud: ''20.12.2011'' | |||
== Sissejuhatus == | == Sissejuhatus == | ||
Line 17: | Line 18: | ||
== Mis on Iptables? == | == Mis on Iptables? == | ||
Iptables on linuxi tarkvararakendus, mis võimaldab kasutajatel ja süsteemiadministraatoritel seadistada ning hallata tulemüüri mingis konkreetses linuxi süsteemis. Iptables'i peamiseks eesmärgiks on tagada andmeside ning arvutisüsteemide turvalisus erinevatel linuxi kernelit kasutavatel seadmetel. Iptables'i peamised kasutusalad on võrguliikluse filtreerimine vastavalt kasutaja või süsteemiadministraatori poolt määratud reeglitele ning tihti Network Address Translation (NAT) teostamine. Iptables võimaldab kasutajatel luua tabeleid mis | Iptables on linuxi tarkvararakendus, mis võimaldab kasutajatel ja süsteemiadministraatoritel seadistada ning hallata tulemüüri mingis konkreetses linuxi süsteemis. Iptables'i peamiseks eesmärgiks on tagada andmeside ning arvutisüsteemide turvalisus erinevatel linuxi kernelit kasutavatel seadmetel. Iptables'i peamised kasutusalad on võrguliikluse filtreerimine vastavalt kasutaja või süsteemiadministraatori poolt määratud reeglitele ning tihti Network Address Translation (NAT) teostamine. Iptables võimaldab kasutajatel luua tabeleid mis sisaldavad n.ö kontrollahelaid ehk reeglite jadasid mille alusel reguleeritakse võrgupakettide liikumist võrguliidestel ja pakettide üldist ligipääsu süsteemile. Erinevate protokollide jaoks on kasutusel erinevad kerneli moodulid ning Iptables versioonid. Käesolev juhend keskendub programmile Iptables mis keskendub põhiliselt IPv4 protokollile. Iptables kasutab oma töös kerneli moodulit nimega ip_tables. Lisaks eelnimetatule olemas moodulid ka IPv6 ja ARP protkollidele ning ethernet raamidele. Üldjoontes on Iptables'i näol tegemist pigem konfiguratsiooni tööriistaga või kerneli tulemüürimooduli Netfilter'i kasutajaliidesega, kui eraldiseisva tulemüürirakendusega. | ||
Line 36: | Line 37: | ||
*NEW: tehakse algust uue ühenduse loomisega | *NEW: tehakse algust uue ühenduse loomisega | ||
*ESTABLISHED: analüüsitav pakett kuulub mõne juba eksisteeriva ühenduse juurde | *ESTABLISHED: analüüsitav pakett kuulub mõne juba eksisteeriva ühenduse juurde | ||
*RELATED: viitab oodatud, ennustatud käitumisele - näiteks analüüsitav pakett on osa uue ühenduse alustamisest ja seetõttu selle saabumine "ette aimatav". Teine võimalus on näiteks juba olemas oleva ühendusega seotud ühenduse loomine. | *RELATED: viitab oodatud, ennustatud käitumisele - näiteks analüüsitav pakett on osa uue ühenduse alustamisest ja seetõttu selle saabumine "ette aimatav". Teine võimalus on näiteks juba olemas oleva ühendusega seotud ühenduse loomine. Teisiti öeldes - mingi, juba ühendust omav programm algatab paralleelselt eksisteeriva ühendusega uue ühenduse, mis on seostatud vanaga. Näiteks FTP parooli sisestamisel algatatakse FTP kliendi poolt mitu erinevat ühendust, mis on omavahel seotud, kuna kuuluvad kõik samale FTP rakendusele. | ||
*INVALID: viitab paketile, mille päritolu ei suudeta tuvastada ehk mis ei kuulu ühegi olemasoleva ühendusse alla ega alusta uut ühendust. | *INVALID: viitab paketile, mille päritolu ei suudeta tuvastada ehk mis ei kuulu ühegi olemasoleva ühendusse alla ega alusta uut ühendust. | ||
*UNTRACKED: eriolek, administraatorile kes soovib mingi paketi ignoreermist ühenduse kontrollimisel</p> | *UNTRACKED: eriolek, administraatorile kes soovib mingi paketi ignoreermist ühenduse kontrollimisel</p> | ||
Line 49: | Line 50: | ||
<p>Lisaks harilikele otsustele on võimalik kasutada ka ahela suunamist ehk "goto" funktsiooni. Viimase abil on võimalik teatava üldisema mustri avastamisel suunata pakett ühest ahelast teise, et uues ahelas kontrolli jätkata. Sellist hierarhiat võib luua täpselt nii sügavaks kui peaks vajalikuks osutuma. Kui pakett jõuab suunatud ahela lõppu, kuid pole selles ühtegi vastet tuvastanud suunatakse see automaatselt tagasi n.ö "vanem-ahelasse" ehk sinna kust konkreetne ahel välja kutsuti. Vanemahelasse saab tagasi pöörduda ka kasutades käsku "RETURN" märkides selle mõne sobiva reegli otsuseks. Sarnane ülesehitus kehtib ka NATi kasutamise puhul. Üldjuhul koosneb Iptables vähemalt ühest tabelist nimega "Filter", mis sisaldab endas algseades kolme põhilist filtreerimise ahelat: INPUT, OUTPUT ja FORWARD. Igaühel neist ahelatest on eelnevalt määratud ka vaikimisi otsus juhuks kui antud ahelas peaksid kasutaja poolt defineeritud reeglid puuduma. Vaikimisi on Iptables'is defineeritud 5 alljärgnevat ahelatüüpi | <p>Lisaks harilikele otsustele on võimalik kasutada ka ahela suunamist ehk "goto" funktsiooni. Viimase abil on võimalik teatava üldisema mustri avastamisel suunata pakett ühest ahelast teise, et uues ahelas kontrolli jätkata. Sellist hierarhiat võib luua täpselt nii sügavaks kui peaks vajalikuks osutuma. Kui pakett jõuab suunatud ahela lõppu, kuid pole selles ühtegi vastet tuvastanud suunatakse see automaatselt tagasi n.ö "vanem-ahelasse" ehk sinna kust konkreetne ahel välja kutsuti. Vanemahelasse saab tagasi pöörduda ka kasutades käsku "RETURN" märkides selle mõne sobiva reegli otsuseks. Sarnane ülesehitus kehtib ka NATi kasutamise puhul. Üldjuhul koosneb Iptables vähemalt ühest tabelist nimega "Filter", mis sisaldab endas algseades kolme põhilist filtreerimise ahelat: INPUT, OUTPUT ja FORWARD. Igaühel neist ahelatest on eelnevalt määratud ka vaikimisi otsus juhuks kui antud ahelas peaksid kasutaja poolt defineeritud reeglid puuduma. Vaikimisi on Iptables'is defineeritud 5 alljärgnevat ahelatüüpi | ||
*PREROUTING: Paketid läbivad selle ahela enne filtreerimistabelite poole pöördumist. Antud ahelat on võimalik kasutatada näiteks NATi rakendamiseks enne filtreerimist või teiste oluliste muudatuse tegemiseks enne paketi suunamist | *PREROUTING: Paketid läbivad selle ahela enne filtreerimistabelite poole pöördumist. Antud ahelat on võimalik kasutatada näiteks NATi rakendamiseks enne filtreerimist või teiste oluliste muudatuse tegemiseks enne paketi suunamist filtreerimisahelasse. | ||
*INPUT: Paketid selles ahelas on saabunud välisvõrgust ning ahela läbimisel saavad kas ligipääsu kaitstavale (tulemüüritavale) süsteemile või visatakse minema. | *INPUT: Paketid selles ahelas on saabunud välisvõrgust ning ahela läbimisel saavad kas ligipääsu kaitstavale (tulemüüritavale) süsteemile või visatakse minema. | ||
*FORWARD: Ükski pakett selles ahelas pole mõeldud kaitstavasse süsteemi. Kõik paketid FORWARD ahelas kuuluvad edastamisele vastavalt ahelates defineeritud reeglitele. | *FORWARD: Ükski pakett selles ahelas pole mõeldud kaitstavasse süsteemi. Kõik paketid FORWARD ahelas kuuluvad edastamisele vastavalt ahelates defineeritud reeglitele. | ||
Line 70: | Line 71: | ||
-Kontrollimiseks | -Kontrollimiseks | ||
< | <pre>apt-cache policy iptables</pre> | ||
-Uuendamiseks | -Uuendamiseks | ||
< | <pre>apt-get update && apt-get upgrade</pre> | ||
-Paigaldamiseks | -Paigaldamiseks | ||
< | <pre>apt-get install iptables</pre> | ||
Viimane käsk paigaldab Iptablesi vaikimisi kataloogi, milleks on <code>/usr/sbin/iptables</code> või mõningates süsteemides ka <code>/sbin/iptables</code>. | Viimane käsk paigaldab Iptablesi vaikimisi kataloogi, milleks on <code>/usr/sbin/iptables</code> või mõningates süsteemides ka <code>/sbin/iptables</code>. | ||
Selleks, et näha esialgset vaikimisi konfiguratsiooni tuleb kasutada käsku | Selleks, et näha esialgset vaikimisi konfiguratsiooni tuleb kasutada käsku | ||
< | <pre>iptables -L</pre> | ||
Teine võimalus konfiguratsiooni nägemiseks on koheselt salvestada ka konfiguratsioonifail. Vaikimisi paigladamisel konfiguratsiooni faili ei tekitata, vaid kasutatakse Netfilter'i kerneli mooduli "filter" tabelit 3 tühja ahelaga. Konfiguratsiooni faili salvesatamiseks tuleb kasutada käsku <code>iptables-save</code> ning väljastada tulemus oma vabalt valitud faili. Üldise selguse mõttes on soovitatav kasutada /etc/ kataloogi. Näites on loodud ja kasutatud kataloogi <code>/etc/iptables</code> ning faili nimeks määratud <code>iptables.conf</code> | Teine võimalus konfiguratsiooni nägemiseks on koheselt salvestada ka konfiguratsioonifail. Vaikimisi paigladamisel konfiguratsiooni faili ei tekitata, vaid kasutatakse Netfilter'i kerneli mooduli "filter" tabelit 3 tühja ahelaga. Konfiguratsiooni faili salvesatamiseks tuleb kasutada käsku <code>iptables-save</code> ning väljastada tulemus oma vabalt valitud faili. Üldise selguse mõttes on soovitatav kasutada /etc/ kataloogi. Näites on loodud ja kasutatud kataloogi <code>/etc/iptables</code> ning faili nimeks määratud <code>iptables.conf</code> | ||
< | <pre>iptables-save > /etc/iptables/iptables.conf</pre> | ||
Loodud faili võib uurida ning muuta vabalt valitud tekstiredaktoriga. | Loodud faili võib uurida ning muuta vabalt valitud tekstiredaktoriga. | ||
== Iptables | == Iptables'i seadistamine == | ||
=== Parameetrid === | === Parameetrid === | ||
Line 96: | Line 97: | ||
Selleks, et luua tabelisse esimesed pakette filtreerivad reeglid tuleb eelnevalt tunda mõningaid olulisemaid iptables'i parameetreid ja konfigureerimise käsu ülesehitust. | Selleks, et luua tabelisse esimesed pakette filtreerivad reeglid tuleb eelnevalt tunda mõningaid olulisemaid iptables'i parameetreid ja konfigureerimise käsu ülesehitust. | ||
Iptables’i reeglite määramiseks kasutatakse käsku iptables. Järgnevalt on toodud näide esimese reegli lisamisest loodud konfiguratsioonifaili. | Iptables’i reeglite määramiseks kasutatakse käsku iptables. Järgnevalt on toodud näide esimese reegli lisamisest loodud konfiguratsioonifaili. | ||
iptables -I INPUT -i eth0 -j ACCEPT -v | <pre>iptables -I INPUT -i eth0 -j ACCEPT -v</pre> | ||
Antud käsk lisab | Antud käsk lisab INPUT ahelasse kirje mis lubab kõik ühendused liidesel eth0. Siit on näha aga peamised iptables konfiguratsioonilause elemendid: ''tegevus tabeliga'', ''ahela nimetus''(milles reegel asub), ''reegli elemendid'', ''otsus'' ning ''lisaparameetrid''. | ||
*Tabeliga tegevused – parameetrid, mis määravad millist tegevust tuleb minigi konkreetse käsu puhul sooritada. Järgnevalt on toodud välja põhilised tegevused. | *Tabeliga tegevused – parameetrid, mis määravad millist tegevust tuleb minigi konkreetse käsu puhul sooritada. Järgnevalt on toodud välja põhilised tegevused. | ||
'''-A''' (append) Lisa uus reegel määratud ahela lõppu. | '''-A''' (append) Lisa uus reegel määratud ahela lõppu. | ||
Line 104: | Line 105: | ||
'''-I''' (insert) Lisa uus reegel määratud ahela algusesse või konkreetsele reale, andes ette vastava rea numbri. | '''-I''' (insert) Lisa uus reegel määratud ahela algusesse või konkreetsele reale, andes ette vastava rea numbri. | ||
'''-R''' (replace) Muuda olemasolevat reeglit, määrates ära muudetava reegli reanumbri. | '''-R''' (replace) Muuda olemasolevat reeglit, määrates ära muudetava reegli reanumbri. | ||
'''-L''' (list) Näitab olemasolevate reeglite nimekirja | '''-L''' (list) Näitab olemasolevate reeglite nimekirja määratud tabelis või ahelas | ||
'''-S''' (list) Näitab olemasolevaid reegleid määratud tabelis, ahelas või kõigis tabeleis, ahelais. (Sarnane -L parameetrile, veidi lakoonilisem, näitab ainult reegleid) | '''-S''' (list) Näitab olemasolevaid reegleid määratud tabelis, ahelas või kõigis tabeleis, ahelais. (Sarnane -L parameetrile, veidi lakoonilisem, näitab ainult reegleid) | ||
'''-F''' (flush) | '''-F''' (flush) Kustutab reeglid määratud ahelas või kõigis ahelais | ||
'''-X''' (delete-chain) | '''-X''' (delete-chain) Kustutab loodud ahelaid | ||
'''-P''' (policy) Määrab ära kogu ahela üldise otsuse, mis täidetakse, kui ükski reegel ahelas ei ole paketile vastet toonud | '''-P''' (policy) Määrab ära kogu ahela üldise otsuse, mis täidetakse, kui ükski reegel ahelas ei ole paketile vastet toonud | ||
Line 122: | Line 123: | ||
'''-i''' (in-interface) Liides, mille kaudu pakett saabus | '''-i''' (in-interface) Liides, mille kaudu pakett saabus | ||
'''-o''' (out-interface) Liides, mille kaudu pakett on määratud välja minema | '''-o''' (out-interface) Liides, mille kaudu pakett on määratud välja minema | ||
'''-j''' (jump) Määrab ära ahela või reegli millele antud kohast edasi "hüpatakse". Samuti on võimalik määrata ühte fikseeritud väärtustest, mis otsustab paketi saatuse koheselt. | |||
Parameetriga -j on võimalik esile kutsuda ka filtreerimise lisamooduleid väga täpsete võrdlustasemete loomiseks. | |||
Kui reegel, millele hüpati ei sobi paketiga antakse kontroll tagasi sellesse ahelasse, kust reegel välja kutsuti. | |||
'''-g''' (goto) Erineb -j parameetrist selle poolest, et pärast kutsumist jätkab reeglite läbimist selles ahelas mis välja kutsuti. | |||
*Otsus - võib olla ükskõik milline etteantud väärtustest | |||
ACCEPT - Lubab paketi läbi | ACCEPT - Lubab paketi läbi | ||
DROP - Ei luba paketti, "viskab" selle minema | DROP - Ei luba paketti, "viskab" selle minema | ||
QUEUE - Suunab paketti "töötluse järjekorda" teistele rakendustele edastamiseks. | QUEUE - Suunab paketti "töötluse järjekorda" teistele rakendustele edastamiseks. | ||
Uus ahel - Reegli otsuseks võib olla uude ahelasse suunamine, mis muutab vastava ahela vanem-ahelaks suunatavale ahelale. | Uus ahel - Reegli otsuseks võib olla uude ahelasse suunamine, mis muutab vastava ahela vanem-ahelaks suunatavale ahelale. | ||
RETURN - Lõpetab ahela (milles vastav reegel asub) läbi vaatamise ning jätkab kontrolli vanem-ahelas (selles kust käesolev ahel välja kutsuti). Kui vanem-ahel puudub, siis otsustab paketi saatuse ahela "policy" | RETURN - Lõpetab ahela (milles vastav reegel asub) läbi vaatamise ning jätkab kontrolli vanem-ahelas (selles kust käesolev ahel välja kutsuti). Kui vanem-ahel puudub, siis otsustab paketi saatuse ahela "policy". | ||
*Lisaparameetrid | *Lisaparameetrid - Kasutatakse käsu iptables täiendava funktsionaalsuse esile kutsumiseks. | ||
-v (verbose) - väljastab detailset infot töödeldava reegli kohta. Kui -v parameeter on lisatud reegli loomise, muutmise, asendamise või kustutamise käsule, väljastatakse ekraanile kogu käsust tulenev info. | -v (verbose) - väljastab detailset infot töödeldava reegli kohta. Kui -v parameeter on lisatud reegli loomise, muutmise, asendamise või kustutamise käsule, väljastatakse ekraanile kogu käsust tulenev info. | ||
-numeric - Iptables proovib vaikimisi lahendada kõik aadressid nimedeks. -numeric näitab aadresse numbrilisel kujul, ega ürita neid siduda hostname'idega. | -numeric - Iptables proovib vaikimisi lahendada kõik aadressid nimedeks. -numeric näitab aadresse numbrilisel kujul, ega ürita neid siduda hostname'idega. | ||
--line-numbers - näitab reeglite reanumbreid, näiteks kasutades käsku iptables -L --line-numbers | --line-numbers - näitab reeglite reanumbreid, näiteks kasutades käsku iptables -L --line-numbers | ||
=== Konfigureerimine === | === Konfigureerimine === | ||
Nüüd olles tutvunud käsu iptables ülesehituse ning olulisemate parameetritega, saame luua esimesed põhilisemad filtreerimise reeglid. Nagu eelnevalt märgitud, siis vaikimisi ei rakenda iptables pakettide liikumisele olulisi piiranguid. Ükski ahel ei sisalda reegleid ning kõigi ahelate policy on vaikimisi seatud läbi laskma kogu liiklust ehk otsusega ACCEPT. Järgnevalt viime ahelatesse sisse mõned muudatused mis muudavad tulemüüri käitumise rohkem kontrollitumaks. Allolevate näidete ulatuses muudame kõigi kolme olemasoleva ahela vaikimisi otuse (policy) | Nüüd, olles tutvunud käsu iptables ülesehituse ning olulisemate parameetritega, saame luua esimesed põhilisemad filtreerimise reeglid. Nagu eelnevalt märgitud, siis vaikimisi ei rakenda iptables pakettide liikumisele olulisi piiranguid. Ükski ahel ei sisalda reegleid ning kõigi ahelate policy on vaikimisi seatud läbi laskma kogu liiklust ehk määratud otsusega ACCEPT. Järgnevalt viime ahelatesse sisse mõned muudatused mis muudavad tulemüüri käitumise rohkem kontrollitumaks. Allolevate näidete ulatuses muudame kõigi kolme olemasoleva ahela vaikimisi otuse (policy) vastupidiseks ehk asendisse DROP ning lisame INPUT ja OUTPUT ahelatesse mõned reeglid veebiliikluse ning pingimise (ICMP protokolli) lubamiseks. Antud ahelatesse on hea praktika lisada reegleid paari kaupa - s.t reegeli peaks looma nii sisse tulevate kui väljaminevate pakettide jaoks. See ei ole kindlasti kohustuslik praktika ning sõltub täiesti soovitavast tulemusest, kuid aitab täpsemalt hallata või jälgida (näiteks logida) pakettide liikumist. Selleks, et muuta tulemüür effektiivseks ja turvaliseks tuleb see seadistada küllalt detailselt. Nii on iga reegli lisamisel oluline jägida, et pakettidele seatakse täpselt sellised piirangud mis tagavad süsteemi toimimise, kuid ei võimalda liigset ligipääsu. | ||
Enne kui hakata midagi aga muutma on hea mõte salvestada konfiguratsioonifail. See märkus ei kehti neile kes seda varasema sammu juures juba tegid. Kasulik on salvestada fail(i) iga kord kui on sisse viidud kontrollitud ning töötav muudatus. Nii saab hõlpsasti töötava oleku taastada, kui selleks peaks vajadus tekkima. Seega: | Enne kui hakata midagi aga muutma on hea mõte salvestada konfiguratsioonifail. See märkus ei kehti neile kes seda varasema sammu juures juba tegid. Kasulik on salvestada fail(i) iga kord kui on sisse viidud kontrollitud ning töötav muudatus. Nii saab hõlpsasti töötava oleku taastada, kui selleks peaks vajadus tekkima. Seega: | ||
<pre > iptables-save > /etc/iptables/iptables.conf </pre> | |||
Taastada | Taastada konfiguratsioonifailist saab käsuga | ||
<pre> iptables-restore < /etc/iptables/iptables.conf </pre> | |||
Esimese sammuna on küllalt mõistlik lubada liiklus loopback liidesel (üldjuhul lo), kuna see on vajalik mitmete rakenduste tööks. Moodustame vajaliku käsu ning lubame loopback'i liikluse: | Esimese sammuna on küllalt mõistlik lubada liiklus loopback liidesel (üldjuhul <code>lo</code>), kuna see on vajalik mitmete rakenduste tööks. Moodustame vajaliku käsu ning lubame loopback'i liikluse: | ||
<pre> iptables -A INPUT -i lo -j ACCEPT | |||
iptables -A OUTPUT -o lo -j ACCEPT </pre> | |||
Esimene käskudest lubab kõikide pakettide liikluse sissepoole liidsel lo. Teine lubab sama väljapoole. Tulenevalt lo iseärasustest, | Esimene käskudest lubab kõikide pakettide liikluse sissepoole liidsel <code>lo</code>. Teine lubab sama väljapoole. Tulenevalt <code>lo</code> iseärasustest, reaalselt ükski pakett veel süsteemist ei lahku. | ||
Pingimine võimaldab kontrollida seadme ühenduvust välisvõrguga. Selleks on vajalik ICMP protokolli liiklus, mille avame käskudega: | Pingimine võimaldab kontrollida seadme ühenduvust välisvõrguga. Selleks on vajalik ICMP protokolli liiklus, mille avame käskudega: | ||
< | <pre> iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT | ||
iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT </pre> | |||
Antud käsud annavad võimaluse välja saata ICMP protokolli OUTPUT ahelas ning saada vastuse INPUT ahelas. Seega võimaldavad need käsud nüüdsest pingida teisi võrgus asuvaid seadmeid. Oluline on siikohal märkida, et pingida saab hetkel ainult ip aadresside alusel, kuna hetkel pole lubatud veel nimelahenduse jaoks vajalik UDP protokoll. | Antud käsud annavad võimaluse välja saata ICMP protokolli OUTPUT ahelas ning saada vastuse INPUT ahelas. Seega võimaldavad need käsud nüüdsest pingida teisi võrgus asuvaid seadmeid. Oluline on siikohal märkida, et pingida saab hetkel ainult ip aadresside alusel, kuna hetkel pole lubatud veel nimelahenduse jaoks vajalik UDP protokoll. | ||
Line 169: | Line 169: | ||
Kuna ka välismaailm tahab seadme olemasolust tõenäoliselt aimu saada on tihti vajalik ka vastupidise pingimise lubamine, ehk väljastpoolt saabuvate päringute lubamine: | Kuna ka välismaailm tahab seadme olemasolust tõenäoliselt aimu saada on tihti vajalik ka vastupidise pingimise lubamine, ehk väljastpoolt saabuvate päringute lubamine: | ||
< | <pre> iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT | ||
iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT </pre> | |||
Nende käskude täitmisel on võimalik ka konfigureeritavat seadet väljaspoolt pingida. Sarnaselt eelpool mainitule, saab ka siin pingida vaid ip aadressi. | Nende käskude täitmisel on võimalik ka konfigureeritavat seadet väljaspoolt pingida. Sarnaselt eelpool mainitule, saab ka siin pingida vaid ip aadressi. | ||
Line 177: | Line 177: | ||
Olles esmaste muudatustega ühele poole saanud, tuleb iptables nüüd seadistada lubama http veebiliiklust. Selleks on vajalik lubada TCP protokolli liiklus pordil 80. | Olles esmaste muudatustega ühele poole saanud, tuleb iptables nüüd seadistada lubama http veebiliiklust. Selleks on vajalik lubada TCP protokolli liiklus pordil 80. | ||
< | <pre> iptables -A INPUT -p tcp --sport 80 -j ACCEPT | ||
iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT </pre> | |||
Muutes pordi numbrit on võimalik sama kiiresti lubada ka turvaline https ühendus | Muutes pordi numbrit on võimalik sama kiiresti lubada ka turvaline https ühendus | ||
< | <pre> iptables -A INPUT -p tcp --sport 443 -j ACCEPT | ||
iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT </pre> | |||
Siiski ei tööta turvaline ühendus enne, kui on lubatud DNS. Seega viimase sammuna oleks äärmiselt asjakohane lisada õigused ka UDP protokolli jaoks, mis võimaldab puuduoleva DNS nimelahenduse. | Siiski ei tööta turvaline ühendus enne, kui on lubatud DNS. Seega viimase sammuna oleks äärmiselt asjakohane lisada õigused ka UDP protokolli jaoks, mis võimaldab puuduoleva DNS nimelahenduse. | ||
< | <pre> iptables -A INPUT -p udp -j ACCEPT | ||
iptables -A OUTPUT -p udp -j ACCEPT </pre> | |||
Viimaste käskudega on iptablesis olemas esmased põhilised reeglid (filtrid), mis võimaldavad võrgupakettide liikluse olulist piiramist, kuid ka sobivate pakettide lubamist. | Viimaste käskudega on iptablesis olemas esmased põhilised reeglid (filtrid), mis võimaldavad võrgupakettide liikluse olulist piiramist, kuid ka sobivate pakettide lubamist. | ||
Juhul kui mingil hetkel peaks tekkima vajadus mõnda | Juhul kui mingil hetkel peaks tekkima vajadus mõnda olemasolevat reeglit muuta või täiendada saab seda teha kasutades iptables parameetrit -R | ||
< | <pre> iptables -R INPUT 4 -p tcp --sport 80 -m state --state NEW,ESTABLISHED -j ACCEPT </pre> | ||
Antud käsk muudab INPUT ahelas real 4 | Antud käsk muudab INPUT ahelas real 4 asuvat reeglit ning täiendab seda lisades paketi lubamise vajalikuks vasteks ühenduse oleku tunnused NEW ja ESTABLISHED. | ||
Sarnaselt reegli muutmisele võib vajalikuks osutuda ka reegli kustutamine. Lihtsaim viis selle saavutamiseks on kasutades rea numbrit. | Sarnaselt reegli muutmisele võib vajalikuks osutuda ka reegli kustutamine. Lihtsaim viis selle saavutamiseks on kasutades rea numbrit. | ||
< | <pre> iptables -D INPUT 5 </pre> | ||
Käsu täitmisel kustutatakse INPUT ahelast real 5 asetsev UDP protokolli lubav käsk. Selle käsu testimisel peab vatava reegli taastama iseseisvalt. | Käsu täitmisel kustutatakse INPUT ahelast real 5 asetsev UDP protokolli lubav käsk. Selle käsu testimisel peab vatava reegli taastama iseseisvalt. | ||
Line 205: | Line 205: | ||
Pikemate ahelate puhul saab rea numbri teada käsuga: | Pikemate ahelate puhul saab rea numbri teada käsuga: | ||
< | <pre> iptables -L --line-numbers </pre> | ||
---- | |||
Nüüd oleks paras hetk läbi viia ka uus iptables-save korraldus, salvestamaks tehtud muudatused | Nüüd oleks paras hetk läbi viia ka uus iptables-save korraldus, salvestamaks tehtud muudatused konfiguratsioonifaili. Tuleb mainida, et antud muudatused kehtivad kuni järgmise alglaadimiseni, mille korral tuleb need taastada iptables-restore käsuga eelnevalt loodud konfiguratsioonifailist. Selleks, et fail laetaks mällu iga kord automaatselt tuleb lisada kirje <code>/etc/network/interfaces</code> faili. Kasutades suvalist tekstiredaktorit, tuleb faili lõppu lisada rida: | ||
< | <pre> pre-up iptables-restore < /etc/iptables/iptables.conf </pre> | ||
Sisse kantud rida rakendatakse enne kui ükski liides aktiivseks tehakse, mistõttu hakkavad ka filtreerimise reeglid kehtima enne kui paketid liidestel liikumist alustavad. Nii on tagatud kaitse võimalike rünnakute eest, kus muul juhul võidaks filtrite puudumist ära kasutada. | Sisse kantud rida rakendatakse enne kui ükski liides aktiivseks tehakse, mistõttu hakkavad ka filtreerimise reeglid kehtima enne kui paketid liidestel liikumist alustavad. Nii on tagatud kaitse võimalike rünnakute eest, kus muul juhul võidaks filtrite puudumist ära kasutada. | ||
Line 215: | Line 218: | ||
Iptables'i konfiguratsiooni tühistamiseks tuleb kõigi ahelate policy'd seada ACCEPT olekusse ning kasutada kolme järgnevat, eelnevalt loetletud, parameetrit | Iptables'i konfiguratsiooni tühistamiseks tuleb kõigi ahelate policy'd seada ACCEPT olekusse ning kasutada kolme järgnevat, eelnevalt loetletud, parameetrit | ||
< | <pre> iptables -F </pre> | ||
Tühjendab kõik või määratud ahela(d) olemasolevatest reeglitest. | Tühjendab kõik või määratud ahela(d) olemasolevatest reeglitest. | ||
< | <pre> iptables -Z </pre> | ||
Nullib ära kõigi või määratud ahela(te) paketi loendurid. | Nullib ära kõigi või määratud ahela(te) paketi loendurid. | ||
< | <pre> iptables -X </pre> | ||
Võimaldab kustutada kasutaja loodud ahelaid, kuid ainult juhul kui need ei sisalda reegleid. Nime määramata jätmisel üritab kustutada kõiki kasutaja loodud ahelaid. | Võimaldab kustutada kasutaja loodud ahelaid, kuid ainult juhul kui need ei sisalda reegleid. Nime määramata jätmisel üritab kustutada kõiki kasutaja loodud ahelaid. | ||
Line 229: | Line 232: | ||
Siinkohal on esmane konfigureerimine lõppenud. Välja toodud käsud on kindlasti vaid sissejuhatus täpsemasse ning eesmärgipärasesse reeglite loomesse. Toodud käske saab kindlasti täiendada ning lisada erinevaid parameetreid pakettide täpsemaks analüüsiks, nagu näidatud ka reegli muutmise puhul. Konkreetsemaid näiteid ning parameetrite kirjeldused on jällegi leitavad kasutades alltoodud viiteid. | Siinkohal on esmane konfigureerimine lõppenud. Välja toodud käsud on kindlasti vaid sissejuhatus täpsemasse ning eesmärgipärasesse reeglite loomesse. Toodud käske saab kindlasti täiendada ning lisada erinevaid parameetreid pakettide täpsemaks analüüsiks, nagu näidatud ka reegli muutmise puhul. Konkreetsemaid näiteid ning parameetrite kirjeldused on jällegi leitavad kasutades alltoodud viiteid. | ||
Kokkuvõte | == Kokkuvõte == | ||
Iptables on linuxi tulemüürirakendus, mis võimaldab konfigreerida linuxi kerneli moodulit nimega Netfilter. Tulemüüri konfigureerimine käib tabelite abil, mis koondavad endasse pakettide filtreerimiseks ning suunamiseks vajalikud reeglid. Reeglid on jaotatud ahelatesse. Iga pakett läbib oma teekonnal süsteemi või sellest välja vähemalt ühe ahela. Iptablesi konfigureerimine toimub käsurea abil. | |||
Iptables on linuxi tulemüürirakendus, mis võimaldab konfigreerida linuxi kerneli moodulit nimega Netfilter. Tulemüüri konfigureerimine käib tabelite abil, mis koondavad endasse pakettide filtreerimiseks ning suunamiseks vajalikud reeglid. Reeglid on jaotatud ahelatesse. Iga pakett läbib oma teekonnal süsteemi või sellest välja vähemalt ühe ahela. Iptablesi konfigureerimine toimub käsurea abil. | |||
== Dokumentatsioon == | == Dokumentatsioon == | ||
Iptables on küllalt hästi dokumenteeritud oma manuaalis, mis on leitav nii käsurealt man iptables, kui ka mitmel pool internetis. Lisaks manuaalile tuleb installatsiooniga kaasa ka html kujul kasutusjuhis mis on leitav kataloogis /usr/share/doc/iptables/html ning veebis aadressil http://netfilter.org/documentation/HOWTO/packet-filtering-HOWTO.html#toc7 | Iptables on küllalt hästi dokumenteeritud oma manuaalis, mis on leitav nii käsurealt ''man iptables'', kui ka mitmel pool internetis. Lisaks manuaalile tuleb installatsiooniga kaasa ka html kujul kasutusjuhis mis on leitav kataloogis <code>/usr/share/doc/iptables/html</code> ning veebis aadressil http://netfilter.org/documentation/HOWTO/packet-filtering-HOWTO.html#toc7 | ||
== Kasutatud materjalid == | == Kasutatud materjalid == | ||
Line 241: | Line 245: | ||
http://en.wikipedia.org/wiki/Netfilter - Kaasosa Iptables wiki artiklile. Tutvustab lähemalt Netfilteri ajalugu ja tööpõhimõtteid.<br> | http://en.wikipedia.org/wiki/Netfilter - Kaasosa Iptables wiki artiklile. Tutvustab lähemalt Netfilteri ajalugu ja tööpõhimõtteid.<br> | ||
http://linux.die.net/man/8/iptables - Iptables'i manuaal veebis. Sama sisu mis man iptables.<br> | http://linux.die.net/man/8/iptables - Iptables'i manuaal veebis. Sama sisu mis man iptables.<br> | ||
http://www.thegeekstuff.com/2011/06/iptables-rules-examples/ - Olulisemad konfiguratsiooni näited ja parameetrid. Antud artikli näited põhinevad sellel allikal. | http://www.thegeekstuff.com/2011/06/iptables-rules-examples/ - Olulisemad konfiguratsiooni näited ja parameetrid. Antud artikli näited põhinevad sellel allikal.<br> | ||
http://ubuntuforums.org/showthread.php?t=159661 - Ubuntu foorumid. Ülevaade iptables parameetritest koos näidisreeglitega. Olemas juhised skriptide | http://ubuntuforums.org/showthread.php?t=159661 - Ubuntu foorumid. Ülevaade iptables parameetritest koos näidisreeglitega. Olemas juhised skriptide loomiseks.<br> | ||
http://wiki.itcollege.ee/index.php/Tulem%C3%BC%C3%BCri_labor - EIK IT Infrastruktuuri teenused aine raames vajaliku konfiguratsiooni teostamise juhend. | http://wiki.itcollege.ee/index.php/Tulem%C3%BC%C3%BCri_labor - EIK IT Infrastruktuuri teenused aine raames vajaliku konfiguratsiooni teostamise juhend.<br> | ||
http://www.thegeekstuff.com/2011/01/iptables-fundamentals/ - Lühitutvustus iptables'ist ja ülesehitusest | http://www.thegeekstuff.com/2011/01/iptables-fundamentals/ - Lühitutvustus iptables'ist ja ülesehitusest.<br> | ||
http://office_sep_344747_sep_themes.freecode.com/projects/iptables/releases?page=1 - Iptablesi versioonide ajalugu | http://office_sep_344747_sep_themes.freecode.com/projects/iptables/releases?page=1 - Iptablesi versioonide ajalugu.<br> | ||
[[Category:IT infrastruktuuri teenused]] |
Latest revision as of 14:56, 8 January 2014
Koostanud: Mikk Käosaar A41, Detsember 2011
Viimati muudetud: 20.12.2011
Sissejuhatus
Käesolev artikli eesmärgiks on tutvustada tulemüüri rakendust iptables, selle ülesehitust ning peamisi toimimise mehhanisme. Lisaks on välja toodud olulisemad aspektid rakenduse kasutamise eesmärkidest, paigaldamisest, konfigureerimisest ja haldamisest. Artikkel on mõeldud abimaterjalina ja tutvustusena linuxi alaste baasteadmistega kasutajatele.
Eeldused
Artikli koostamisel on näidete testimiseks kasutatud Ubuntu Serverit: Release 11.04, Kernel Linux 2.6.38-12-generic. Näited eeldavad standardset linuxi installatsiooni. Modifitseeritud süsteemidest ja teistest linuxi distributsioonidest tulenevad erisused tuleb lahendada juhendi kasutajal iseseisvalt. Näited võivad kuid ei pruugi toimida linuxi kernelitel alates versioonist 2.4, mis toetavad Netfilter'i mooduleid, ning distributsioonidega mis toetavad rakendust iptables. Käskude sisestamisel on vajalikud juurkasutaja (root) õigused. Juhendi kasutaja peab omama vajalike eelteadmisi ethernet võrkudest ning baasteadmisi linuxi käsurea kasutamisest.
Mis on Iptables?
Iptables on linuxi tarkvararakendus, mis võimaldab kasutajatel ja süsteemiadministraatoritel seadistada ning hallata tulemüüri mingis konkreetses linuxi süsteemis. Iptables'i peamiseks eesmärgiks on tagada andmeside ning arvutisüsteemide turvalisus erinevatel linuxi kernelit kasutavatel seadmetel. Iptables'i peamised kasutusalad on võrguliikluse filtreerimine vastavalt kasutaja või süsteemiadministraatori poolt määratud reeglitele ning tihti Network Address Translation (NAT) teostamine. Iptables võimaldab kasutajatel luua tabeleid mis sisaldavad n.ö kontrollahelaid ehk reeglite jadasid mille alusel reguleeritakse võrgupakettide liikumist võrguliidestel ja pakettide üldist ligipääsu süsteemile. Erinevate protokollide jaoks on kasutusel erinevad kerneli moodulid ning Iptables versioonid. Käesolev juhend keskendub programmile Iptables mis keskendub põhiliselt IPv4 protokollile. Iptables kasutab oma töös kerneli moodulit nimega ip_tables. Lisaks eelnimetatule olemas moodulid ka IPv6 ja ARP protkollidele ning ethernet raamidele. Üldjoontes on Iptables'i näol tegemist pigem konfiguratsiooni tööriistaga või kerneli tulemüürimooduli Netfilter'i kasutajaliidesega, kui eraldiseisva tulemüürirakendusega.
Iptables algus
Iptables'i arendus sai alguse paralleelselt Netfilter raamistikuga 1998 aastal. Kasutajateni jõudisis Iptables'i esimene versioon koos linuxi kerneli versiooniga 2.4 aastal 2001. Iptablesi eelkäijateks loetakse rakendusi ipchains ja ipfwadm, millest viimane põhineb omakorda BSD ipfw rakendusel. Vaatamata kestvale arendusprotsessile, pole aja jooksul toimunud suuremaid versiooni muudatusi ning artikli kirjutamise hetkeks on viimane ametlikult väljastatud versioon 1.4.12.1. Aastal 2009 alustati tööd ka Iptables'i järglaseks tituleeritud "nftables" projektiga. Sellest pidi kujunema asendustööriist Iptablesile ning oli mõeldud ühendama praegu eraldiseisvaid protokollide haldusvahendeid. Käesoleval hetkel on antud projektist väljastatud vaid alfaversioon ning aktiivne arendusprotsess on peatunud.
Ülesehitus ja tööpõhimõte
Märkus: Selguse huvides on järgnevat käsitletud ühe linux-süsteemi piires.
Netfilter
Nagu enamik võrguliikluse filtreerimisega seotud rakendusi, põhineb Iptablesi töö andmeside pakettide analüüsil. Iga süsteemi läbiv pakett viiakse läbi kontrollahela(te), mille alusel määratakse paketi edasine saatus vaadeldavas süsteemis. Iptables'i funktsionaalsus põhineb linuxi kernelis paikneval Netfilter'i raamistikul, mis võimaldab võrguliikluse jälgimist ja manipuleerimist. Seetõttu on oluline lisaks Iptablesile tutvustada pisut ka Netfilter'i tööpõhimõtteid.
Netfilter jaotab oma funktsionaalsuse mitmesse ossa. Kasutajataseme programmid, nagu Iptables, saavutavad oma vajaliku funktsionaalsuse pöördudes Netfilter'i erinevate moodulite (osade) poole. Iga moodul tagab erineva funktsionaalsuse ning on teiste moodulite suhtes kindlalt järjestatud, s.t iga mooduli poole pöördumine toimub kindlas järjekorras. Netfilteri mooduleid võib käsitleda ka kui tabeleid mis koosnevad reeglite jadadest. Nagu eelpool mainitud nimetatakse selliseid reeglite jadasid ka ahelateks. Seega iga tabel (moodul) võib koosneda paljudest käskudest mis moodustavad ahela. Selliste ahelate ülesanneteks ongi harilikult võrguliikluse filtreerimine ning pakettide haldamine, seal hulgas ka näiteks NAT'i võimaldamine.
Ahelaid liigitatakse ning nimetatakse üldjuhul filtreeritavate pakettide päritolu järgi. Näiteks välisvõrgust saabuv pakett satuks "INPUT" ahelasse ning välisvõrku suunatud pakett peab läbima "OUTPUT" ahela. Üheks olulisemaks uuenduseks võrreldes oma eelkäijatega ipcahins ja ipfwadm on Netfilter'il võimekus jälgida ja hallata ühenduste olekut (connection tracking). See võimaldab Netfilteril jaotada pakette erinevate, ühenduse, olekute alusel. Viimase abil omakorda on aga võimalik iga pakett suunata koheselt õigesse filtreerimis või NAT ahelasse. Erinevad olekud võivad olla järgnevad
- NEW: tehakse algust uue ühenduse loomisega
- ESTABLISHED: analüüsitav pakett kuulub mõne juba eksisteeriva ühenduse juurde
- RELATED: viitab oodatud, ennustatud käitumisele - näiteks analüüsitav pakett on osa uue ühenduse alustamisest ja seetõttu selle saabumine "ette aimatav". Teine võimalus on näiteks juba olemas oleva ühendusega seotud ühenduse loomine. Teisiti öeldes - mingi, juba ühendust omav programm algatab paralleelselt eksisteeriva ühendusega uue ühenduse, mis on seostatud vanaga. Näiteks FTP parooli sisestamisel algatatakse FTP kliendi poolt mitu erinevat ühendust, mis on omavahel seotud, kuna kuuluvad kõik samale FTP rakendusele.
- INVALID: viitab paketile, mille päritolu ei suudeta tuvastada ehk mis ei kuulu ühegi olemasoleva ühendusse alla ega alusta uut ühendust.
- UNTRACKED: eriolek, administraatorile kes soovib mingi paketi ignoreermist ühenduse kontrollimisel
Iptables
Tulenevalt Netfilteri ülesehitusest põhineb ka Iptablesi töö erinevate käsuahelate ja tabelite haldamisel. Iptablesi puhul koosnevad tabelid reeglitest ning otsustest. Iga tabel kirjeldab milliseid tunnuseid pakettides otsida ning kui võrre on tuvastatud, siis millist tegevust antud paketi puhul rakendada. Paketi võrdlemise käigus käiakse tabel ja selles sisalduv ahel läbi käskhaaval. Oluline on teada, et käske läbitakse järjekorras seni kuni leitakse esimene vaste. See tähendab, et pärast esmase vaste leidmist ahelat enam edasi ei uurita. Seega kui ahelas on mitu sarnase võrdlustunnusega kuid erineva otsusega reeglit, sooritatakse filtreerimine vastavalt selle reegli alusel, mis oli ahelas eespool. Näiteks kujutame ette olukorda kui süsteemiadministraator soovib lubada kõiki TCP pakette mis saabuvad INPUT ahelasse pordilt 80 ning samas ahelas keelata pordile 80 saabuvad TCP paketid, mis on suunatud porti 8000. Antud juhul lubatakse siiski kõigi TCP pakettide liiklus kuna üldisem reegel, mis kattus paketi andmetega, eelnes spetsiifilisemale reeglile. Sellisest käitumisest pääsemiseks peab asetama üldisemad reeglid ahela lõpu poole ning rohkem täpsemad reeglid asetama ahela algusesse. Sel viisil uuritakse täpsemalt kirjeldatud reegleid varem ning alles siis, kui ükski varasematest reeglitest pole vajaliku vastet paketile toonud, rakendatakse üldisemalt piiritletud reegleid. Alati on võimalik, et ükski ahela reeglitest ei taga täieliku või sobivat vastet paketile. Sel puhul on võimalik määrata ka ahela üldotsus, mida rakendatakse alles tingimusel kui ükski reegel terves ahelas pole võrreldava tunnusega vastet taganud.
Lisaks harilikele otsustele on võimalik kasutada ka ahela suunamist ehk "goto" funktsiooni. Viimase abil on võimalik teatava üldisema mustri avastamisel suunata pakett ühest ahelast teise, et uues ahelas kontrolli jätkata. Sellist hierarhiat võib luua täpselt nii sügavaks kui peaks vajalikuks osutuma. Kui pakett jõuab suunatud ahela lõppu, kuid pole selles ühtegi vastet tuvastanud suunatakse see automaatselt tagasi n.ö "vanem-ahelasse" ehk sinna kust konkreetne ahel välja kutsuti. Vanemahelasse saab tagasi pöörduda ka kasutades käsku "RETURN" märkides selle mõne sobiva reegli otsuseks. Sarnane ülesehitus kehtib ka NATi kasutamise puhul. Üldjuhul koosneb Iptables vähemalt ühest tabelist nimega "Filter", mis sisaldab endas algseades kolme põhilist filtreerimise ahelat: INPUT, OUTPUT ja FORWARD. Igaühel neist ahelatest on eelnevalt määratud ka vaikimisi otsus juhuks kui antud ahelas peaksid kasutaja poolt defineeritud reeglid puuduma. Vaikimisi on Iptables'is defineeritud 5 alljärgnevat ahelatüüpi
- PREROUTING: Paketid läbivad selle ahela enne filtreerimistabelite poole pöördumist. Antud ahelat on võimalik kasutatada näiteks NATi rakendamiseks enne filtreerimist või teiste oluliste muudatuse tegemiseks enne paketi suunamist filtreerimisahelasse.
- INPUT: Paketid selles ahelas on saabunud välisvõrgust ning ahela läbimisel saavad kas ligipääsu kaitstavale (tulemüüritavale) süsteemile või visatakse minema.
- FORWARD: Ükski pakett selles ahelas pole mõeldud kaitstavasse süsteemi. Kõik paketid FORWARD ahelas kuuluvad edastamisele vastavalt ahelates defineeritud reeglitele.
- OUTPUT: Ahelat läbivad paketid mis pärinevad kaitstavast süsteemist ja on suunatud välisvõrku.
- POSTROUTING: Sarnane PREROUTING ahelale. Kasutatakse erinevateks NAT toiminguteks ning pakettide töötlemiseks enne riistvarale üle andmist.
Lisaks neile kirjeldatud ahelatele võib süsteemi administraator luua just nii palju ahelaid kui parasjagu tarvis. Iga Iptablesi tabel võib koosneda ühest või mitmest ahelast ning iga ahel võib asuda omaette tabelis. Iptables võimaldab kasutada nelja Netfilter'i poolt eeldefineeritud tabelit
- FILTER: Sisaldab peamisi pakettide filtreerimise reegleid ning ahelaid. Võib olla rohkem kui üks.
- NAT: Sisaldab PRE- ja POSTROUTING ning OUTPUT ahelaid. Kasutatakse NATi realiseerimiseks.
- MANGLE: Kasutatakse spetsiifiliste (vahel ajutiste) reeglite kogumiseks. Kutsutakse välja enne või pärast filtreerimistoiminguid.
- RAW: Kui vastav moodul on Netfilter'is lubatud siis kutsutakse see välja enne kõiki teisi tabeleid. Sisaldab PREROUTING ja OUTPUT ahelaid. Võimaldab filtreerida pakette enne kui need edasi mälunõudlikemasse osadesse suunatakse. (Tõenäoline kasutusjuht võiks olla süsteemi välise ründe korral, kus esineb vajadus kiirelt suur hulk pakette kõrvale visata enne kui need pääsevad süsteemi mälu koormama)
Sarnaselt ahelatele võib administraator luua ka enda defineeritud tabeleid. Iptables filtreerimise mehhanism on üles ehitatud selliselt, et iga pakett peaks läbima ainult 1he talle kehtiva filtreerimisahela. Samas, iga pakett peab läbima vähemalt ühe ahela. Konkreetne ahel määratakse peamiselt eelpool mainitud paketi päritolu alusel. Samuti on tänu Netfilterile võimalik pakette filtreerida ka ühenduse olekute alusel ning töödelda neid enne konkreetsemasse ahelasse suunamist. Need omadused vähendavad märgatavalt reeglite läbitöötamiseks vajaliku aega ja protsessori töö mahtu.
Iptables paigaldamine
Iptables on leitav enamike levinud distributsioonide pakivaramutest ning Netfilter'i koduleheküljelt. Nagu alguses viidatud siis kõik käsud tuleb läbi viia root õigustes.
Enne kui installeerimise juurde asuda on soovituslik kontrollida, kas ja milline Iptables versioon on hetkel paigaldatud. Seejärel tuleb see vajadusel kas uuendada või installeerida. Antud tegevusi saab läbi viia käskudega:
-Kontrollimiseks
apt-cache policy iptables
-Uuendamiseks
apt-get update && apt-get upgrade
-Paigaldamiseks
apt-get install iptables
Viimane käsk paigaldab Iptablesi vaikimisi kataloogi, milleks on /usr/sbin/iptables
või mõningates süsteemides ka /sbin/iptables
.
Selleks, et näha esialgset vaikimisi konfiguratsiooni tuleb kasutada käsku
iptables -L
Teine võimalus konfiguratsiooni nägemiseks on koheselt salvestada ka konfiguratsioonifail. Vaikimisi paigladamisel konfiguratsiooni faili ei tekitata, vaid kasutatakse Netfilter'i kerneli mooduli "filter" tabelit 3 tühja ahelaga. Konfiguratsiooni faili salvesatamiseks tuleb kasutada käsku iptables-save
ning väljastada tulemus oma vabalt valitud faili. Üldise selguse mõttes on soovitatav kasutada /etc/ kataloogi. Näites on loodud ja kasutatud kataloogi /etc/iptables
ning faili nimeks määratud iptables.conf
iptables-save > /etc/iptables/iptables.conf
Loodud faili võib uurida ning muuta vabalt valitud tekstiredaktoriga.
Iptables'i seadistamine
Parameetrid
Uurides eelmises punktis loodud konfiguratsioonifaili on näha, et vaikimisi on kõik ühendused lubatud. Sellisel kujul pole Iptables'ist otsest kasu. Selleks, et luua tabelisse esimesed pakette filtreerivad reeglid tuleb eelnevalt tunda mõningaid olulisemaid iptables'i parameetreid ja konfigureerimise käsu ülesehitust. Iptables’i reeglite määramiseks kasutatakse käsku iptables. Järgnevalt on toodud näide esimese reegli lisamisest loodud konfiguratsioonifaili.
iptables -I INPUT -i eth0 -j ACCEPT -v
Antud käsk lisab INPUT ahelasse kirje mis lubab kõik ühendused liidesel eth0. Siit on näha aga peamised iptables konfiguratsioonilause elemendid: tegevus tabeliga, ahela nimetus(milles reegel asub), reegli elemendid, otsus ning lisaparameetrid.
- Tabeliga tegevused – parameetrid, mis määravad millist tegevust tuleb minigi konkreetse käsu puhul sooritada. Järgnevalt on toodud välja põhilised tegevused.
-A (append) Lisa uus reegel määratud ahela lõppu. -D (delete) Kustuta määratud reegel. Reegli saab määrata nii rea numbriga antud ahelas või reegli kuju (reeglis määratud parameetrite) järgi. Samuti on võimalik kasutada mõlemat määramisviisi korraga. -N (new) Loo uus ahel -I (insert) Lisa uus reegel määratud ahela algusesse või konkreetsele reale, andes ette vastava rea numbri. -R (replace) Muuda olemasolevat reeglit, määrates ära muudetava reegli reanumbri. -L (list) Näitab olemasolevate reeglite nimekirja määratud tabelis või ahelas -S (list) Näitab olemasolevaid reegleid määratud tabelis, ahelas või kõigis tabeleis, ahelais. (Sarnane -L parameetrile, veidi lakoonilisem, näitab ainult reegleid) -F (flush) Kustutab reeglid määratud ahelas või kõigis ahelais -X (delete-chain) Kustutab loodud ahelaid -P (policy) Määrab ära kogu ahela üldise otsuse, mis täidetakse, kui ükski reegel ahelas ei ole paketile vastet toonud
- Ahela nimetus
Võib olla milline tahes kasutaja enda loodud ahelatest, tabelitest või üks 4st süsteemsest tabelist (filter, nat, mangle, raw)
- Reegli elemendid ja otsus
Koosneb filtreerimise või suunamise otsusest ning erinevatest reegli parameetritest. Reegli põhilisemad parameetrid on: -p (protocol) Määrab, millise protokolli alusel pakette filtreeritakse -s (source) Määrab paketi päritolu aadressi -d (destination) Määrab paketi sihtpunkti aadressi. -i (in-interface) Liides, mille kaudu pakett saabus -o (out-interface) Liides, mille kaudu pakett on määratud välja minema -j (jump) Määrab ära ahela või reegli millele antud kohast edasi "hüpatakse". Samuti on võimalik määrata ühte fikseeritud väärtustest, mis otsustab paketi saatuse koheselt. Parameetriga -j on võimalik esile kutsuda ka filtreerimise lisamooduleid väga täpsete võrdlustasemete loomiseks. Kui reegel, millele hüpati ei sobi paketiga antakse kontroll tagasi sellesse ahelasse, kust reegel välja kutsuti. -g (goto) Erineb -j parameetrist selle poolest, et pärast kutsumist jätkab reeglite läbimist selles ahelas mis välja kutsuti.
- Otsus - võib olla ükskõik milline etteantud väärtustest
ACCEPT - Lubab paketi läbi DROP - Ei luba paketti, "viskab" selle minema QUEUE - Suunab paketti "töötluse järjekorda" teistele rakendustele edastamiseks. Uus ahel - Reegli otsuseks võib olla uude ahelasse suunamine, mis muutab vastava ahela vanem-ahelaks suunatavale ahelale. RETURN - Lõpetab ahela (milles vastav reegel asub) läbi vaatamise ning jätkab kontrolli vanem-ahelas (selles kust käesolev ahel välja kutsuti). Kui vanem-ahel puudub, siis otsustab paketi saatuse ahela "policy".
- Lisaparameetrid - Kasutatakse käsu iptables täiendava funktsionaalsuse esile kutsumiseks.
-v (verbose) - väljastab detailset infot töödeldava reegli kohta. Kui -v parameeter on lisatud reegli loomise, muutmise, asendamise või kustutamise käsule, väljastatakse ekraanile kogu käsust tulenev info. -numeric - Iptables proovib vaikimisi lahendada kõik aadressid nimedeks. -numeric näitab aadresse numbrilisel kujul, ega ürita neid siduda hostname'idega. --line-numbers - näitab reeglite reanumbreid, näiteks kasutades käsku iptables -L --line-numbers
Konfigureerimine
Nüüd, olles tutvunud käsu iptables ülesehituse ning olulisemate parameetritega, saame luua esimesed põhilisemad filtreerimise reeglid. Nagu eelnevalt märgitud, siis vaikimisi ei rakenda iptables pakettide liikumisele olulisi piiranguid. Ükski ahel ei sisalda reegleid ning kõigi ahelate policy on vaikimisi seatud läbi laskma kogu liiklust ehk määratud otsusega ACCEPT. Järgnevalt viime ahelatesse sisse mõned muudatused mis muudavad tulemüüri käitumise rohkem kontrollitumaks. Allolevate näidete ulatuses muudame kõigi kolme olemasoleva ahela vaikimisi otuse (policy) vastupidiseks ehk asendisse DROP ning lisame INPUT ja OUTPUT ahelatesse mõned reeglid veebiliikluse ning pingimise (ICMP protokolli) lubamiseks. Antud ahelatesse on hea praktika lisada reegleid paari kaupa - s.t reegeli peaks looma nii sisse tulevate kui väljaminevate pakettide jaoks. See ei ole kindlasti kohustuslik praktika ning sõltub täiesti soovitavast tulemusest, kuid aitab täpsemalt hallata või jälgida (näiteks logida) pakettide liikumist. Selleks, et muuta tulemüür effektiivseks ja turvaliseks tuleb see seadistada küllalt detailselt. Nii on iga reegli lisamisel oluline jägida, et pakettidele seatakse täpselt sellised piirangud mis tagavad süsteemi toimimise, kuid ei võimalda liigset ligipääsu. Enne kui hakata midagi aga muutma on hea mõte salvestada konfiguratsioonifail. See märkus ei kehti neile kes seda varasema sammu juures juba tegid. Kasulik on salvestada fail(i) iga kord kui on sisse viidud kontrollitud ning töötav muudatus. Nii saab hõlpsasti töötava oleku taastada, kui selleks peaks vajadus tekkima. Seega:
iptables-save > /etc/iptables/iptables.conf
Taastada konfiguratsioonifailist saab käsuga
iptables-restore < /etc/iptables/iptables.conf
Esimese sammuna on küllalt mõistlik lubada liiklus loopback liidesel (üldjuhul lo
), kuna see on vajalik mitmete rakenduste tööks. Moodustame vajaliku käsu ning lubame loopback'i liikluse:
iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT
Esimene käskudest lubab kõikide pakettide liikluse sissepoole liidsel lo
. Teine lubab sama väljapoole. Tulenevalt lo
iseärasustest, reaalselt ükski pakett veel süsteemist ei lahku.
Pingimine võimaldab kontrollida seadme ühenduvust välisvõrguga. Selleks on vajalik ICMP protokolli liiklus, mille avame käskudega:
iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
Antud käsud annavad võimaluse välja saata ICMP protokolli OUTPUT ahelas ning saada vastuse INPUT ahelas. Seega võimaldavad need käsud nüüdsest pingida teisi võrgus asuvaid seadmeid. Oluline on siikohal märkida, et pingida saab hetkel ainult ip aadresside alusel, kuna hetkel pole lubatud veel nimelahenduse jaoks vajalik UDP protokoll.
Kuna ka välismaailm tahab seadme olemasolust tõenäoliselt aimu saada on tihti vajalik ka vastupidise pingimise lubamine, ehk väljastpoolt saabuvate päringute lubamine:
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
Nende käskude täitmisel on võimalik ka konfigureeritavat seadet väljaspoolt pingida. Sarnaselt eelpool mainitule, saab ka siin pingida vaid ip aadressi. Eelnenud käskudes olid mõningad parameetrid, millest antud artiklis lähemalt juttu ei tule. Nende kohta saab täpsemalt lugeda lõpus välja toodud viidete alt.
Olles esmaste muudatustega ühele poole saanud, tuleb iptables nüüd seadistada lubama http veebiliiklust. Selleks on vajalik lubada TCP protokolli liiklus pordil 80.
iptables -A INPUT -p tcp --sport 80 -j ACCEPT iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
Muutes pordi numbrit on võimalik sama kiiresti lubada ka turvaline https ühendus
iptables -A INPUT -p tcp --sport 443 -j ACCEPT iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT
Siiski ei tööta turvaline ühendus enne, kui on lubatud DNS. Seega viimase sammuna oleks äärmiselt asjakohane lisada õigused ka UDP protokolli jaoks, mis võimaldab puuduoleva DNS nimelahenduse.
iptables -A INPUT -p udp -j ACCEPT iptables -A OUTPUT -p udp -j ACCEPT
Viimaste käskudega on iptablesis olemas esmased põhilised reeglid (filtrid), mis võimaldavad võrgupakettide liikluse olulist piiramist, kuid ka sobivate pakettide lubamist. Juhul kui mingil hetkel peaks tekkima vajadus mõnda olemasolevat reeglit muuta või täiendada saab seda teha kasutades iptables parameetrit -R
iptables -R INPUT 4 -p tcp --sport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
Antud käsk muudab INPUT ahelas real 4 asuvat reeglit ning täiendab seda lisades paketi lubamise vajalikuks vasteks ühenduse oleku tunnused NEW ja ESTABLISHED.
Sarnaselt reegli muutmisele võib vajalikuks osutuda ka reegli kustutamine. Lihtsaim viis selle saavutamiseks on kasutades rea numbrit.
iptables -D INPUT 5
Käsu täitmisel kustutatakse INPUT ahelast real 5 asetsev UDP protokolli lubav käsk. Selle käsu testimisel peab vatava reegli taastama iseseisvalt.
Pikemate ahelate puhul saab rea numbri teada käsuga:
iptables -L --line-numbers
Nüüd oleks paras hetk läbi viia ka uus iptables-save korraldus, salvestamaks tehtud muudatused konfiguratsioonifaili. Tuleb mainida, et antud muudatused kehtivad kuni järgmise alglaadimiseni, mille korral tuleb need taastada iptables-restore käsuga eelnevalt loodud konfiguratsioonifailist. Selleks, et fail laetaks mällu iga kord automaatselt tuleb lisada kirje /etc/network/interfaces
faili. Kasutades suvalist tekstiredaktorit, tuleb faili lõppu lisada rida:
pre-up iptables-restore < /etc/iptables/iptables.conf
Sisse kantud rida rakendatakse enne kui ükski liides aktiivseks tehakse, mistõttu hakkavad ka filtreerimise reeglid kehtima enne kui paketid liidestel liikumist alustavad. Nii on tagatud kaitse võimalike rünnakute eest, kus muul juhul võidaks filtrite puudumist ära kasutada.
Iptables'i konfiguratsiooni tühistamiseks tuleb kõigi ahelate policy'd seada ACCEPT olekusse ning kasutada kolme järgnevat, eelnevalt loetletud, parameetrit
iptables -F
Tühjendab kõik või määratud ahela(d) olemasolevatest reeglitest.
iptables -Z
Nullib ära kõigi või määratud ahela(te) paketi loendurid.
iptables -X
Võimaldab kustutada kasutaja loodud ahelaid, kuid ainult juhul kui need ei sisalda reegleid. Nime määramata jätmisel üritab kustutada kõiki kasutaja loodud ahelaid.
Siinkohal on esmane konfigureerimine lõppenud. Välja toodud käsud on kindlasti vaid sissejuhatus täpsemasse ning eesmärgipärasesse reeglite loomesse. Toodud käske saab kindlasti täiendada ning lisada erinevaid parameetreid pakettide täpsemaks analüüsiks, nagu näidatud ka reegli muutmise puhul. Konkreetsemaid näiteid ning parameetrite kirjeldused on jällegi leitavad kasutades alltoodud viiteid.
Kokkuvõte
Iptables on linuxi tulemüürirakendus, mis võimaldab konfigreerida linuxi kerneli moodulit nimega Netfilter. Tulemüüri konfigureerimine käib tabelite abil, mis koondavad endasse pakettide filtreerimiseks ning suunamiseks vajalikud reeglid. Reeglid on jaotatud ahelatesse. Iga pakett läbib oma teekonnal süsteemi või sellest välja vähemalt ühe ahela. Iptablesi konfigureerimine toimub käsurea abil.
Dokumentatsioon
Iptables on küllalt hästi dokumenteeritud oma manuaalis, mis on leitav nii käsurealt man iptables, kui ka mitmel pool internetis. Lisaks manuaalile tuleb installatsiooniga kaasa ka html kujul kasutusjuhis mis on leitav kataloogis /usr/share/doc/iptables/html
ning veebis aadressil http://netfilter.org/documentation/HOWTO/packet-filtering-HOWTO.html#toc7
Kasutatud materjalid
http://en.wikipedia.org/wiki/Iptables - Küllalt detailne ülevaade iptablsesi toimimise mehhanismidest.
http://en.wikipedia.org/wiki/Netfilter - Kaasosa Iptables wiki artiklile. Tutvustab lähemalt Netfilteri ajalugu ja tööpõhimõtteid.
http://linux.die.net/man/8/iptables - Iptables'i manuaal veebis. Sama sisu mis man iptables.
http://www.thegeekstuff.com/2011/06/iptables-rules-examples/ - Olulisemad konfiguratsiooni näited ja parameetrid. Antud artikli näited põhinevad sellel allikal.
http://ubuntuforums.org/showthread.php?t=159661 - Ubuntu foorumid. Ülevaade iptables parameetritest koos näidisreeglitega. Olemas juhised skriptide loomiseks.
http://wiki.itcollege.ee/index.php/Tulem%C3%BC%C3%BCri_labor - EIK IT Infrastruktuuri teenused aine raames vajaliku konfiguratsiooni teostamise juhend.
http://www.thegeekstuff.com/2011/01/iptables-fundamentals/ - Lühitutvustus iptables'ist ja ülesehitusest.
http://office_sep_344747_sep_themes.freecode.com/projects/iptables/releases?page=1 - Iptablesi versioonide ajalugu.