Linuks kao fajervol (iptables – opis i pravila)

Linuks fajervol (firewall) – Netfilter je sastavni deo Linuks kernela koji omogućuje filtriranje paketa, prevođenje mrežnih adresa ili skraćeno NAT (network address translation), kao i razne druge manipulacije paketima. Netfilter je unapređena verzija ipchains-a koji je bio aktuelan u starijim verzija Linuks operativnog sistema. Više o Netfilteru i svim mogućnostima koje on obezbeđuje, možete pronaći ovde.

Iptables je alat za kontrolu i konfigurisanje Netfiltera, mada se često u praksi podrazumeva da kada govorimo o iptables-u mislimo na objedinjenu funkcionalnost iptables-a i Netfiltera. Kada govorimo o fajervol funkcionalnosti na Linuksu, u stvari mislimo na upotrebu iptables-a i Netfilter-a. Postoje mnoga fajervol rešenja na Linuks sistemima, koji nam obezbeđuju jednostavnije interfejse za korišćenje, razumljiviji su korisnicima, a nimalo ne zaostaju u funkcionalnosti. Međutim oni se pozadinski takođe oslanjaju na iptables i Netfilter. Jedno od takvih rešenja je shorewall, a više o njemu možete pronaći ovde .

Pre nego što se detaljnije pozabavimo sa iptables, sledi kratak osvrt na to šta je uopšte fajervol, i koje su osnovne funkcionalnosti koje on treba da obezbedi.

Funkcionalnosti i mogući scenariji primene

Osnovna uloga fajervola je zaštita sistema koju postižemo filtriranjem paketa. U zavisnosti od toga da li je fajervol namenjen zaštiti računara na kome je aktivan ili čitave mrežu iza sebe, možemo ih podeliti na personalne i korporativne. Sama konfiguracija fajervola takođe zavisi od većeg broja parametara.

Bez obzira da li se radi o kućnom ili korporativnom okruženju, broj mrežnih interfejsa koje poseduje računar i bezbednosna politika između njih, kao i stepen poverenja pojedinim okruženjima, su samo neki od faktora koji određuju scenario konfiguracije fajervola.

Kada govorimo o korporativnom fajervolu mislimo na uređaj koji se nalazi između interneta i lokalne mreže. U ovakvom scenariju fajervol je zadužen za translaciju mrežnih adresa (NAT) i filtraciju paketa od interneta ka LAN-u i ako je potrebno obratno (od LAN-a ka internetu). Lokalna mreža opet može biti podeljena na više mrežnih segmenata, između kojih treba definisati bezbedonosnu politiku – za ovo je takođe zadužen fajervol.

Često se iza fajervola nalazi DMZ (Demilitarized zone), posebna zona čiji određeni segmenti trebaju biti izloženi internetu, ali koja ne treba biti vidljiva lokalnoj mreži.

Sledi kratko pojašnjenje često spominjanih pojmova prevođenja mrežnih adresa i filtriranja paketa.

Prevođenje mrežnih adresa (NAT)

NAT je proces konverzije IP adresa privatne mreže u jedinstvenu IP adresu na internetu – javnu adresu koju koristi fajervol. NAT nam unutar lokalne mreže dozvoljava korišćenje bilo kojeg opsega IP adresa, pa čak i onih javnih koje se već koriste na internetu.

NAT može biti SNAT (source network address translation) I DNAT (destination network address translation). Kada neki računar iz lokalne mreže pošalje zahtev za određenim internet resursom, prilikom prolaska paketa kroz fajervol, adresa iz lokalnog opsega zameniće se sa javnom adresom koju fajervol koristi. To je SNAT i on omogućava računarima jedne lokalne mreže da koriste internet resurse i da na internetu budu vidljivi sa javnom adresom fajervola.

Možda vam može biti zanimljivo i: Rutiranje i protokoli za rutiranje

Često korišćeni sinonim za DNAT je prosleđivanje portova (port forwarding). Kada neki računar preko interneta uputi zahtev fajervolu za nekim portom, fajervol proverava NAT tabelu, tražeći unos za specifičan računaru iz privatne mreže koji je naznačen da prihvata zahteve po tom portu, pa ukoliko takav unos postoji, sledi zamena javne fajervol adrese na koju je zahtev stigao, sa privatnom adresom računara kome je zahtev upućen.

Filtriranje paketa

Filtriranje paketa je fundamentalna funkcionalnost svakog fajervola. Fajervol analizira pakete i upoređuje ih sa utvrđenim pravilima i shodno tome primenjuje predefinisane akcije. Pakete fajervol filtrira po tipu protokola, izvornoj (source) adresi ili informaciji o odredišnom portu. Na ovaj način pravimo izbor koje ćemo protokole (npr. TCP, UDP, ICMP, IGMP) propustiti, a koje ne, kao i sa kojih adresa je dozvoljen pristup određenim portovima.

Moguće akcije koje fajervol može primeniti su odbacivanje paketa (DROP), prihvatanje paketa (ACCEPT) ili odbijanje paketa uz obaveštenje pošiljaocu da njegov paket nije prihvaćen (REJECT). U praksi se za odbacivanje paketa češće koristi DROP umesto REJECT, radi izbegavanja nepotrebnog mrežnog saobraćaja.

iptables | struktura i konkretni primeri

Iptables odaje utisak kompleksnosti na prvi pogled, međutim kada jednom razumete njegov koncept, shvatićete da je logičan i ne toliko nepristupačan za korišćenje. Struktura alata iptables je organizovana tako da se sastoji iz tabela (tables), lanaca (chains) i pravila (rules). Postoje četiri osnovne tabele: filter, nat, mangle i raw. Svaka od ovih tabela sadrži određene lance, pa tako recimo filter tabela sadrži INPUT, OUTPUT I FORWARD lance, a NAT tabela PREROUTING i POSTROUTING. Za svaki lanac se definišu određena pravila, koja predstavljaju predefinisane akcije koje ćemo primenti nad paketima.

Za filtriranje paketa, koristi se filter tabela. Ona se sastoji, kao što smo već napomenuli, iz INPUT, OUTPUT i FORWARD lanaca i svaki lanac sadrži listu pravila sa kojima upoređujemo pakete. Kada paket pristigne, na osnovu odredišne adrese se određuje da li je paket namenjen lokalnom računaru (fajervol) i ako je tako prosleđuje se INPUT lancu. Ako pravila INPUT lanca dozvole da paket prođe, paket se prosleđuje odgovarajućem procesu kome je namenjen.

Ukoliko paket treba rutirati, onda ga prosleđujemo FORWARD lancu, pa ukoliko zadovolji sva pravila ovog lanca, prosleđuje se dalje interfejsu koji je zadužen za njega. OUTPUT lanac je zadužen za odlazne pakete. Ukoliko je paket prošao kroz lanac, a nijedno od pravila ga nije ni prihvatilo ni odbacilo, onda se na njega primenjuje predefinisana polisa tog lanca.

Jednostavni primer

Slika demonstrira iptables konfiguraciju na računaru sa jednim mrežnim interfejsom. Sav dolazni saobraćaj je blokiran, osim ssh i http saobraća, a sav odlazni sabraćaj je dozvoljen. Takođe onemogućeno je rutiranje, jer postoji samo jedan mrežni interfejs.

Prva linija „iptables -F“ obezbeđuje poništavanje (F – flush) trenutne iptables konfiguracije. Iduća dva reda obezbeđuju dodavanje (A – append) dva pravila u INPUT lanac, i dozvoljavaju tcp konekcije ka ssh i http portu na lokalnom računaru. P (pe) parametar označava predefinisanu polisu za odgovarajući lanac. To u našem primeru znači da svaki dolazni paket odbacujemo („iptables -P INPUT DROP“), dozvoljavamo odlazni saobraćaj („iptables -P OUTPUT ACCEPT“), kao i da onemogućavamo rutiranje („iptables -P FORWARD DROP“).

Već smo napomenuli da se prvo izvršavaju predefinisana pravila, pa ukoliko se nijedno od njih ne odnosi na paket, onda se primenjuje predefinisana polisa datog lanca. „iptables -A INPUT -i lo -j ACCEPT“ – ovim naredbom smo dozvolili lokalni loopback saobraćaj (-i parametar znači interfejs). Sistem često prilazi određenim servisima po loklanom interfejsu (127.0.0.1), i bez ove komande rad sistema bi bio ugrožen, jer bi fajervol odbacivao neke sistemske zahteve.

Sledeća linija je takođe zanimljiva. Parametar -m podrazumeva učitavanje dodatnog modula – state modula u našem slučaju. State modul zadužen je za detekciju stanja paketa i on detektuje da li je dati paket deo neke već inicijalizovane konekcije ili ne. Ukoliko jeste paket se propušta, u suprotnom biva odbačen.

Takođe možemo zaključiti da je iptables modularne strukture, i da je za dodavanje nekih funkcionalnosti potrebno učitavanje odgovarajućih modula. Predzadnja linija snima iptables konfiguraciju, kako bi bila aktuelna i nakon ponovnog podizanja sistema, a zadnja linija ekranski štampa trenutnu iptables konfiguraciju.

Složeniji primer

Slika demonstrira iptables konfiguraciju na računaru sa dva mrežna interfejsa – eth0 interfejs povezan sa internetom i eth1 lokalni LAN interfejs. Scenario je sledeći – lokalnoj mreži razrešavamo internet zahteve, radeći prevođenje mrežnih adresa (SNAT) na interfejsu eth0. Takođe svaki zahtev za lokalnim tcp portom 8080 fajervol presleđuje na port 80 lokalnog računara sa IP adresom 10.0.0.5. Sam fajervol izlaže veb server i ssh server prema internetu, dok ka lokalnoj mreži nema restrikcija.

Prva linija je ista kao u prethodnom primeru, ali druga je već nešto drugačija. Naredba „iptables -t nat -F“ poništava sva pravila u NAT tabeli. Koristeći iptables podrazumevano radimo sa filter tabelom i tada parametar -t nije obavezan. Međutim, za rad sa drugim tabelama -t parametar je neophodan. Napomenuli smo već da u NAT tabeli postoje dva lanca PREROUTING I POSTROUTING. Prvi se koristi za razrešavanje mrežnih adresa ili SNAT, a drugi za prosleđivanje portova ili DNAT.

Naredba „iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE“ obezbeđuje prevođenje mrežnih adresa, a naredne dve su zadužene za DNAT ili prosleđivanje porta.

Naredba „iptables -t nat -A PREROUTING -i eth0 -p tcp –dport 8080 -j DNAT –to 10.0.0.5:80″ zamenjuje javnu odredišnu adresu interfejsa eth0 sa lokalnom adresom 10.0.0.5 i zamenjuje vrednost 8080 odredišnog porta sa vrednošću 80.

Naredba“iptables -A FORWARD -p tcp -d 10.0.0.5 –dport 80 -j ACCEPT“ prosleđuje dati paket FORWARD lancu koji ga dalje rutira do veb servera sa loklanom IP adresom 10.0.0.5.

Sledi predefinisanje policse za sva tri lanca filter tabele. Vrednosti su identične kao i u prethodnom primeru, što znači da svaki dolazni paket odbacujemo („iptables -P INPUT DROP“), dozvoljavamo odlazni saobraćaj („iptables -P OUTPUT ACCEPT“), kao i da onemogućavamo rutiranje („iptables -P FORWARD DROP“).

Možda može biti zanimljivo i: Neka osnovna postavka iptables

Politika za dolazni saobraćaj je restriktivna, ali smo kao izuzetke postavili loopback interfejs (lo) i lokalni interfejs (eth1). Nastavak je sličan kao u prethodnom primeru. Dozvoljavamo pristup tcp portovima 22 i 80 na samom fajervolu. Definisali smo restriktivnu polisu FORWARD lanca, ali dodajemo lokalni eth1 interfejs kao izuzetak. Takođe propuštamo sve pakete koji su deo već ostvarenih konekcija, a treba ih dalje rutirati. Predzadnja linija snima trenutnu iptables konfiguraciju, a poslednja je ekranski štampa.

Napomenimo još nešto. Da bi rutiranje bilo omogućeno na Linuks operativnom sistemu, moramo startovati sledeću naredbu „echo 1 > /proc/sys/net/ipv4/ip_forward.. Data naredba dodeljuje vrednost „1“, fajlu ip_forward, koji je sastavni deo „proc“ pseudo fajl sistema, generisanog od strane Linuks kernela. Isto kao i informacije u memoriji, svi podaci u „proc“ fajl sistemu su tu do prvog ponovnog pokretanja sistema, zato je najednostavnije datu komandu ubaciti rc.local skriptu ili je startovati direktno iz iptables skripte.

Zaključak

Prilikom konfigurisanja fajervol-a bitno je da uvek definišete globalnu polisu, a svaki izuzetak od globalne polise definišete kao dodatno pravilo. Uvek imate izbor – primeniti restriktivnu politiku, pa dodavati izuzetke koji nešto dozvoljavaju ili se opredeliti za nerestriktivnu politiku pa onda izričito zabranjivati ono što treba zabraniti. Akcenat ovog teksta je bio na osnovnim funkcionalnostima koje fajervol treba da obezbedi i kako ih ostvariti korišćenjem iptables alata. Naravno iptables je kompleksan i sveobuhvatan alat i ovim člankom smo samo zagrebali površinu.

Tekst je preuzet sa ugašenog bloga IT modul i originalni autor ovog teksta je Vladimir Blagojević. Kompjuteraš IT blog objavljuje tekstove sa tog bloga kako riznica znanja sa te lokacije ne bi otišla u zaborav.