1(8) Seminaarityö 7.11.2011 Opintojakso: A241227 Linux järjestelmät Opettaja: Tomi Pahula Opintojakson toteutus: Syksy 2011 Opiskelijaryhmä: Opiskelija: TI09 Markus Varjola Seminaarityön aihe: Iptables & Squid proxy
2(8) Iptables Iptables on kättäjätilan sovellus, jota käytetään linuxytimen (linux kernel) palomuurin hallintaan. Iptables ei ole ainoa ohjelma, jolla palomuuria voidaan hallita, sillä palomuuri koostuu useista osista ja jokaisen osan hallintaan on olemassa oma sovellus. Linuxin palomuurin muodostavien moduuldeiden kokonaisuutta kutsutaan netfilteriksi. Iptables moduulia kätetään vain ja ainoastaan ipv4 liikenteen hallintaan, manipulointiin ja suodattamiseen. Iptables / netfilter projekti aloitettiin vuonna 1998 Rusty Russelin toimesta, jonka käsialaa oli myös iptablesia edeltänyt ipchains projekti. Netfilteristä tuli kiinteä osa silloista linuxin ydintä (2.3) vuonna 2000 ja on ollut mukana kaikissa linuxytimen päivityksissä siitä lähtien. Kuvassa esitetään netfilterin kaikki komponentit ja miten esimerkiksi iptables sijoittuu tähän kokonaisuuteen. Iptables on yks viidestä taulujenhallinta moduulista, joista käytetään yhteisnimitystä Xtables. Huomioitavaa on, että käyttäjälle tarkoitettu sovelluksen nimi on identtinen itse netfilterin varsinaisen moduulin nimen kanssa. Moduuleilla on useita eri kohtia, joissa paketin hallinan voi aloittaa.
3(8) 1. Raw ensimmäinen kohta, jossa pakettiin voidaan koskea. Tapahtuu varhaisessa vaiheessa, ennen kuin paketilla on tilaisuutta rekisteröityä muualla, kuten conntrack:ssa (pakettien tilan tarkkailu). 2. Mangle paketteja voidaan muokata ja suodattaa sen jälkeen, kun paketti on jo rekisteröitynyt esimerkiksi pakettien tilan tarkkailuun. 3. Nat pakettaja voidaan muokata ennen tai jälkeen varsinaisen suodatuksen. 4. Filter varsinainen pakettien suodatus eli palomuuri. Raw ja mangle ovat harvemmin käytettyjä, kun taas suurin osa arkisten sovellusten vaatimuksista keskittyy nat ja filter operointitiloihin. Iptables toimii edeltäjänsä tavoin säännöistä muodostuvilla ketjuilla. Riippuen paketista ja kyseisen palomuurin asetuksista paketti matkustaa määrätyssä järjestyksessä ketjujen läpi. Ketjut voidaan käydä lineaarisesti läpi, mutta myös hypyt sivuketjuihin ovat mahdollisia. Sivuketjuista palataan takaisin lineaariseen suorittamiseen. Jokainen paketti matkustaa vähintään yhden ketjun läpi ja jokaisella ketjulla on oletustoiminto, joka suoritetaan, jos mikään muu ehto ei toteudu. Oletustoimintoja on olemassa vain kaksi, ACCEPT ja DROP. Sääntöjen lineaarisen suorituksen vuoksi, sääntöjen kirjoitus järjestyksellä on äärimmäisen suuri merkitys palomuurin toiminnallisuuden kannalta. Jokaiselle paketille on olemassa vain yksi sääntö, koska täsmäävän ehdon löydyttyä, sääntö suoritetaan välittömästi, eikä ketjua käydä läpi pidemmälle. Paketin alkuperä luonnollisesti vaikuttaa ketjun valintaan. Ketjuja on vakiona viisi kappaletta. PREROUTING paketit käyvät tämän ketjun läpi, ennen kuin reitityspäätöstä on tehty INPUT paikalliseen käyttöön tulevat paketit suodatetaan tässä ketjussa FORWARD kaikki paketit, jotka reititetään ja eivät tule palomuurikoneelle kulkevat tämän ketjun kautta. OUTPUT kaikki palomuurikoneesta lähtevät paketit kulkevat tämän ketjun kautta. POSTROUTING paketit käsitellään reitityspäätöksen jälkeen.
4(8) Kuvassa esitetään, miten ketjut ovat kytköksissä toisiinsa. Kaikki alkaa aina PREROUTING ketjusta, jonka jälkeen siirrytään tutkimaan, kuuluuko paketti kyseiselle koneelle, vaiko toiselle koneelle. Tämän päätöksen jälkee paketti jatkaa INPUT tai FORWARD ketjua pitkin. Kummatkin reitit päättyvät lopulta POSTROUTING ketjuun ja järjestelmästä ulos, jollei pakettia hylätä sitä ennen tai oteta paikalliseen käyttöön. Iptables käytännössä Iptables pystyy muuttamaan tavallisen linuxtietokoneen tehokkaaksi palomuuriksi nopeasti pienellä vaivalla ja on ominaisuuksiltaan monen kaupallisen palomuurin veroinen. Siitä syystä iptables on hyvin suosittu ja on löytänyt tiensä moneen ilmaiseen sovellukseen. Esimerkkinä kaupalliset reitittimet, joihin on mahdollista asentaa pieni kokoinen linux käyttöjärjestelmä, kuten ddwrt, OpenWrt ja Tomato. Kaikki edellämainituista käyttää iptablesia oletusarvoisesti palomuuritoiminnalisuuden tarjoamiseen. Tulevat esimerkit ovat Tomatosta, koska se sattui olemaan kätevästi saatavilla. Reititin on NetGear WNR 3500L ja käyttöjärjestelmä on Tomato v1.28.9054 MIPSR2-beta K26 USB vpn3.6. Puhtaalla asennuksella iptables näyttää seuraavalta.
5(8) Ilman mitään muutosta, iptables hoitaa kaiken hyvin mallikkaasti. Kaikki ulospäin menevä liikenne on sallittu, kaikki sisäänpäin tuleva liikenne tiputetaan jollei toisin määrätä ja sama pätee välitettäviin paketteihin. INPUT ketjusta tärkeitä huomioitavia asioita on, että kaikki br0:aan ja lo:aan tuleva liikenne sallitaan. Tämä mahdollistaa kaiken sisäverkon liikenteen esteettä. Jos kaikki sisäverkkoon suunnattu liikenne on estetty, miten sitten ylipäätänsä mikään toimii? Sekä INPUT, että FORWARD ketjussa on määritelty säännöt kaikkien protokollien paluuliikenteelle. Kaikki tietoliikenne, mikä on alotettu sisäverkosta saa myös keskustella takaisin päin. Tämmöinen toiminnalisuus on mahdollista vain tilallisissa palomuureissa. Muita mielenkiintoisia huomioita on esimerkiksi INPUT ketjun ensimmäinen rivi, jossa todetaan, että kaikki sisäverkosta tulevat paketit, joiden kohde on reitittimen ulkoinen osote tiputetaan. Kuitenkin sisäverkosta voi suorittaa ping komennon ulkoverkon osoitteella ja reititin vastaa siihen. Tähän löytyy selitys ketjun alkupäästä.
6(8) PREROUTING ketjun ensimmäinen sääntö toteaa, että kaikki ulkoverkon osoitteeseen osoitetut paketit ohjataan sivuketjuun nimeltä WANPREROUTING. Tässä ketjussa ensimmäinen sääntö toteaa, että kaikki icmp viestit ohjataan reitittimen sisäverkon osoitteeseen. Näin paketti pääsee uudelleen käsittelyyn uudella osoitteella ja nyt paketti täsmää INPUT ketjun kohtaan, jossa kaikki sisäverkosta tuleva liikenne täsmää ja näin reititin vastaa ping kutsuun. Toinen esimerkki siitä, miten taulukko muuttuu, kun esimerkiksi haluamme ohjata portista 2222 liikennettä sisäverkon porttiin 22 reitittimen osoistteeseen. Tehdään muutos Tomaton web käyttöliittymällä. Viimeinen rivi on lisätty kohta, joka tekee iptablesiin muutoksen ja muutos näyttää seuraavalta. WANPREROUTING ketjuun ilmestyi viimeinen rivi, jossa todetaan, että kaikki tcp paketit, jotka on suunnattu porttiin 2222 osoitetaan koneelle 192.168.1.1 porttiin 22. Paketin käsittelyn vuoksi, paketti seuraavaksi kulkee FORWARD ketjuun, jossa on sivuketju wanin, jossa paketti käsitellään lopullisesti. Kaikki tcp paketit hyväksytään, joiden portti on 22 (SSH). Näin graafisesti suoritetut komennot siirtyvät iptablesiin. Tästä ei tulisi hämääntyä, koska iptables on komentorivityökalu, joten kaikki graafiset sovellukset ovat ohjelmoitu vain tiettyjä tarkoituksia varten. Vain komentoriviltä käyttää iptablesin kaikkia ominaisuuksia.
7(8) Lopuksi esimerkki miten konfiguroidaan yksinkertainen palomuuri komentoriviltä. #Oletusasetukset iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT iptables -t nat -P PREROUTING ACCEPT iptables -t nat -P POSTROUTING ACCEPT iptables -t nat -P OUTPUT ACCEPT # INPUT ketju iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -i br0 -j ACCEPT iptables -A INPUT -p TCP -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A INPUT -p UDP -m state --state RELATED,ESTABLISHED -j ACCEPT # FORWARD ketju iptables -A INPUT -i br0 -o br0 -j ACCEPT iptables -A INPUT -p TCP -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A INPUT -p UDP -m state --state RELATED,ESTABLISHED -j ACCEPT # POSTROUTING ketju iptables -t nat -A POSTROUTING -o vlan2 -j MASQUERADE Kyseinen palomuuri sallii kaiken sisäverkon liikenteen, sallii kaiken paluuliikenteen ja suorittaa ip osotteiden naamioimisen (MASQUERADE). Lisätoiminnallisuutta varten tarvitaan lisää sääntöjä, mutta kyseisellä esimerkillä pääsee jo pitkälle. Käytetyt portit on otettu Tomatosta, mutta muitakin voi olla. Lyhyesti br0 on tässä tapauksessa sisäverkko. Se voisi olla myös vaikka eth0 ja vlan2 edustaa WAN porttia.
8(8) Squid proxy Squid on välityspalvelin ja internet välimuisti palvelu. Sillä on useita käyttötarkoituksia, kuten selauksen nopeuttaminen, web, DNS ja muiden verkkojen hakujen välimuistiin tallettamista, sekä liikenteen suodattamista. Pääsääntöisesti Squidia käytetään kuitenkin http ja ftp välimuistina, vaikka se tukee muitakin protokollia esim tls, ssl, internet gopher ja https. Alun perin Squid suunniteltiin linuxille, mutta on myöhemmin käännetty muillekkin järjestelmille, kuten Windowsille. Squid on kaiken lisäksi ilmainen. Syitä miksi välityspalvelimia halutaan käyttää: Taataan välityspalvelimen takana oleville koneille anonyymiteetti. Nopeutetaan resurssien saatavuutta (käytetään välimuistina). Toteutetaan pääsylistoja, sallitaan tai evätään pääsy tietyille sivuille. Kierretään pääsylistoja esim ISP:n kieltämät sivustot. Kerätään käyttäjätietoja Ohitetaan turvamääräyksiä Tietoa käsittelemätöntä välityspalvelinta kutsutaan useimmiten yhdyskäytäväksi. Suora välityspalvelin (Forward Proxy) on yleisimpiä välityspalvelia. Niitä käytetään esimerkiksi, kun halutaan salata oma alkuperäinen sijainti. Esimerkiksi internet tv, jota voi katsoa vain maan sisällä on käytettävissä suoran välityspalvelimen avulla, koska internet tv palvelu näkee pyynnön tulevan välityspalvelimelta. Käänteis välityspalvelin (Reverse Proxy) on välityspalvelin, joka esimerkiksi palvelee isomman web palvelimen edessä ja näyttää käyttäjille vain yhdeltä palvelimelta, mutta todellisuudessa välittää pyyntöjä useammalle palvelimelle. Näin saadaan aikaiseksi esimerkiksi kuorman tasausta.