Iptables: Difference between revisions

From ICO wiki
Jump to navigationJump to search
No edit summary
mNo edit summary
Line 1: Line 1:
Koostanud: '''Mikk Käosaar''' A41,''Detsember 2011''
Koostanud: '''Mikk Käosaar''' A41, ''Detsember 2011''


== Sissejuhatus ==
== Sissejuhatus ==

Revision as of 23:40, 14 December 2011

Koostanud: Mikk Käosaar A41, Detsember 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üsteemi administraatoritel seadistada ning hallata kerneli tulemüüri mingis konkreetses linuxi süsteemis. Iptables võimaldab kasutajatel luua n.ö kontrollahelaid ehk reeglite jadasid mille alusel reguleeritakse võrgupakettide liikumist erinevatel võrguliidestel ja üldist ligipääsu süsteemile. Erinevate protokollide jaoks on kasutusel erinevad kerneli moodulid ning Iptables programmid. Käesolev juhend keskendub programmile Iptables (kasutab kerneli moodulit nimega ip_tables) mis keskendub põhiliselt IPv4 protokollile. Lisaks on olemas moodulid ja programmid IPv6 ja ARP protkollidele ning ethernet pakettidele. Üldjoontes on Iptables'i näol tegemist pigem konfiguratsiooni tööriistaga või Netfilter'i kasutajaliidesega, kui eraldiseisva tulemüüri rakendusega.


Iptables ajalugu

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 hetkel on jõutud versioonini 1.4.12.1. Aastal 2009 alustati tööd ka Iptables'i järglaseks tituleeritud "nftables" projektiga. Käesoleval hetkel on antud projektist väljastatud vaid alfaversioon ning aktiivne arendusprotsess on peatunud.

Ülesehitus ja tööpõhimõte

Netfilter

Nagu enamik võrguliikluse filtreerimisega seotud rakendusi, põhineb Iptables oma tegevuses pakettide analüüsile. Iga süsteemi läbiv pakett viiakse läbi "käsuahela" ehk reeglite jada, mille alusel määratakse paketi edasine saatus. Iptables'i funktsionaalsus põhineb linuxi kernelis paikneval Netfilter'i raamistikul, linuxi kerneli osal, mis võimaldab võrguliikluse jälgimist ja manipuleerimist. Seetõttu on oluline lisaks Iptablesile tutvustada veidi 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, näiteks Network Adress Translation'i (NAT) võimaldamine.

Ahelaid nimetatakse üldjuhul filtreeritavate pakettide päritolu järgi. Näiteks välisvõrgust sissetulev pakett satuks "INPUT" ahelasse ning välisvõrku suunatud pakett peab läbima "OUTPUT" ahela. Üheks olulisemaks uuenduseks võrreldes oma eelkäijatega on Netfilteri võimekus jälgida ja hallata ühenduste olekut (connection tracking). See võimaldab Netfilteril jagada pakette erinevate olekute alusel, mille abil on võimalik iga pakett suunata õigesse ahelasse. Erinevad olekud võivad olla järgnevad

  • NEW: viitab uue ühenduse loomisele
  • ESTABLISHED: analüüsitav pakett kuulub mõne juba eksisteeriva ühenduse alla
  • RELATED: viitab oodatud 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. Ehk mingi juba ühendust omav programm algatab paralleelselt eksisteerivaga uue ühenduse.
  • 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 läbi viia. 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 kui administraator soovib lubada kõiki TCP pakette mis saabuvad INPUT ahelasse pordilt 80 ning samas ahelas keelata pordile 80 saabuvad TCP paketid, mis suunduvad porti 8000, siis lubatakse siiski kõigi TCP pakettide liiklus kuna vastav reegel eelnes teisele. Sellisest käitumisest pääsemiseks peab asetama üldisemad reeglid ahela lõpu poole ning rohkem spetsiifilised 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. Loomulikult saab määrata ka ahela üldotsuse, mida rakendatakse juhul kui ükski reegel terves ahelas pole võrreldava tunnusega vastet toonud.

Lisaks harilikele otsustele on võimalik kasutada ka ahela suunamist ehk "goto" funktsiooni.Selle abil on võimalik teatava üldisema mustri avastamisel suunata pakett ühest ahelast teise. 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 otsusena. 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 võimalust kasutatakse näiteks NATi rakendamiseks enne filtreerimist või mõne muud muudatuse tegemiseks enne paketi suunamist läbi filtreerimisahela.
  • INPUT: Paketid selles ahelas on saabunud välisvõrgust ning ahela läbimisel saavad 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 ahela filtritele.
  • 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 paketis vajalike muudatuste läbi viimiseks enne riistvarale üle andmist.

Lisaks neile kirjeldatud ahelatele võib süsteemi administraator luua 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 konfigureerimiseks.
  • MANGLE: Kasutatakse spetsiifiliste reeglite kogumiseks. Kutsutakse välja enne või pärast filtreerimistoiminguid.
  • RAW: Kui vastav moodul on Netfilter'is avatud siis kutsutakse 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 oleks vaja suur hulk pakette minema visata enne kui need süsteemi mälu koormama hakkavad)

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 filtreerimise ahela. 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 täpsemasse 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. Eelistatum on esimene. 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 konfiguratsiooni faili ei tekitata, vaid kasutatakse "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 vaadata ning muuta vabalt valitud tekstiredaktoriga.

Iptables konfigureerimine

Uurides eelmises punktis loodud konfiguratsioonifaili on näha, et vaikimisi on kõik ühendused lubatud. Sellisel kujul pole Iptables'ist kasu. Selleks, et luua tabelisse esimesed pakette filtreerivad reeglid tuleb eelnevalt tunda mõningaid olulisemaid iptables'i parameetreid ja konfigureerimise käsu ülesehitust. Peamised iptables konfiguratsioonilause elemendid on tegevus tabeliga, ahela nimetus, milles reegel asub, reegli elemendid ja otsus ning lisaparameetrid.

  • Tabeliga tegevused
-A (append) Lisa uus reegel ahela lõppu.
-D (delete) Kustuta määratud reegel (Reegli saab ära määrata nii rea numbriga antud ahelas või reegli kuju alusel. Samuti on võimalik kasutada mõlemat korraga).
-I (insert) Lisa uus reegel ahela algusesse või konkreetsele reale, määrates ära 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)
-F (flush) Kustuta reeglid määratud ahelas või kõigis ahelais
-N (new) Loo uus ahel
-X (delete-chain) Kustuta loodud ahelaid
-P (policy) Määrab ära kogu ahela üldise otsuse, mis täidetakse, kui ükski reegel ahelas ei ole sobinud
  • Ahela nimetus
Võib olla milline tahes kasutaja enda loodud tabelites või üks 4st süsteemsest tabelist
  • 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 (tuleb arvestada oma NAT seadistustega, s.t võib toimuda PREROUTING NAT)
-sport (source-port) Määrab paketi päritolu pordi numbri
-d (destination) Määrab paketi sihtpunkti aadressi.
-dport (destination-port) Määrab paketi sihtpunkti pordi numbri.
-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 etteantud väärtustest, mis otsustab paketi saatuse koheselt. Lisaks on -j parameetriga võimalik ka esile kutsuda filtreerimise lisamooduleid väga täpsete võrdlusastmete loomiseks. Kui reegel, millele hüpati ei sobi paketiga antakse järg 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.
  • Lisaparameetrid
Võimaldavad muuta reeglite visuaalse esituse ning visuaalse väljastuse omadusi

Näited Nagu eelnevalt mainitud, kasutab Iptables filtreerimise toimingute saavutamiseks pakettide ja reeglite võrdlemist. Iptables võimaldab pakette filtreerida protokollide, aadresside, liideste ja mitmete teiste tunnuste alusel. Erinevat match võimalused tabeli loomise näide? hüppamine (goto) ja vanemahelasse pöördumine

  • Mis on põhikäsud konfigureermisel
  • Millised on põhiparameetrid, mida nad tähendavad, mida teevad
  • Mõned konfiguratsiooni näited (1 - 2) (viide tulemüüride labori juhendile)
  • Kuidas kontrollida versiooni