Natrag na blog

Arhitektura Iptables i Netfilter

Arhitektura Iptables i Netfilter

Jedan vatrozid je sigurnosni uređaj (hardver/softver) koji štiti mrežu filtriranjem prometa i blokiranjem neželjenog/neautoriziranog pristupa privatnim podacima. Imati odgovarajući vatrozid važno je za zaštitu vaših poslužitelja i infrastrukture. On ne samo da može blokirati neželjeni promet, već i spriječiti zlonamjerni softver da zarazi sustav.

U Linux ekosustavu, iptables je popularan vatrozid koji se povezuje s netfilter okvirom na Linux kernelu. Većina modernih Linux sustava dolazi s ovim unaprijed ugrađenim alatima. Kako biste izvukli najviše iz ovih sustava, od presudne je važnosti razumjeti njihovu arhitekturu. U suprotnom, razvoj pouzdanih pravila vatrozida može biti zastrašujući. To bi moglo dovesti do stvaranja složene sintakse, međusobno povezanih dijelova u okviru itd.

Ovaj vodič će detaljno analizirati arhitekturu iptables kako bi pomogao korisnicima koji moraju stvoriti vlastita pravila vatrozida. Također ćemo istražiti kako se iptables povezuje s netfilter i kako se različite komponente uklapaju.

Iptables i Netfilter

U Linuxu, iptables vatrozid je najčešći. Radi tako što se povezuje s kukama za filtriranje paketa u mrežnom stogu Linux kernela. Upravo se te kuke kernela zajednički nazivaju netfilter okvirom.

Svaki dolazni/odlazni paket u sustavu aktivirat će ove kuke dok prolazi kroz stog. Tako su programi registrirani s ovim kukama u mogućnosti komunicirati s prometom u ključnim točkama. Naposljetku, moduli kernela povezani s iptables povezuju se s ovim kukama kako bi primijenili navedena pravila vatrozida.

Netfilter kuke

Kako bi se programi mogli povezati, postoji pet različitih netfilter kuka. Kako paketi prolaze kroz stog, kuke aktiviraju module kernela koji su kod njih registrirani. Uvjet aktivacije ovisi o uvjetima kao što su: smjer paketa (dolazni/odlazni), odredište paketa, je li paket odbačen/odbijen u prethodnoj točki itd.

Ovo su kuke koje predstavljaju različite dobro definirane točke u mrežnom stogu:

  • NF_IP_PRE_ROUTING: Ovu kuku aktivira bilo koji dolazni promet. Aktivacija se događa prije donošenja bilo kakve odluke o usmjeravanju u vezi s odredištem paketa.

  • NF_IP_LOCAL_IN: Ova se kuka aktivira nakon usmjeravanja dolaznog paketa. Paket također mora biti namijenjen lokalnom sustavu.

  • NF_IP_FORWARD: Ova se kuka također aktivira nakon usmjeravanja dolaznog paketa. Međutim, aktivira se ako se paket treba usmjeriti na drugo računalo.

  • NF_IP_LOCAL_OUT: Bilo koji lokalni odlazni promet, čim dospije u mrežni stog, aktivira ovu kuku.

  • NF_IP_POST_ROUTING: Ovu kuku aktivira bilo koji odlazni/prosljeđeni promet nakon što se izvrši usmjeravanje, a prije nego što paket stigne do fizičkog medija.

Moduli kernela koji se žele registrirati na ovim kukama moraju navesti prioritetni broj. Ova vrijednost pomaže u određivanju redoslijeda kojim će biti pozvani nakon što se kuka aktivira. Takav mehanizam omogućuje višestrukim modulima (različitim modulima ili višestrukim kopijama istog modula) da se povežu sa svakom od kuka determinističkim redoslijedom. Svaki će modul vratiti odluku netfilter okviru nakon obrade paketa.

Tablice i lanci u iptables

Za organizaciju svojih pravila, iptables vatrozid koristi tablice. Tablice kategoriziraju pravila na temelju vrste odluka koje donose. Na primjer, ako se pravilo bavi NAT-om (prevođenjem mrežnih adresa), tada se pravilo stavlja pod nat tablicu. Slično tome, ako pravilo odlučuje hoće li dopustiti/odbiti paket do njegovog odredišta, ono se dodaje u filter tablicu.

Unutar svake tablice iptables, pravila su dodatno organizirana unutar zasebnih “lanaca”. Dok tablica predstavlja vrstu pravila koja sadrži, lanci opisuju netfilter kuke koje aktiviraju pravila. Ukratko, lanci određuju kada će se pravilo procijeniti.

Evo ugrađenih lanaca za iptables. Zanimljivo je da nazivi lanaca također odražavaju naziv povezanog netfilter kuka:

Lanac (iptables) Korištenje
PREROUTING NF_IP_PRE_ROUTING
INPUT NF_IP_LOCAL_IN
FORWARD NF_IP_FORWARD
OUTPUT NF_IP_LOCAL_OUT
POSTROUTING NF_IP_POST_ROUTING

Koristeći lance, administratori mogu odrediti u kojoj će se fazi isporuke paketa pravilo procjenjivati. Budući da svaka tablica sadrži više lanaca, ona također može proširiti svoj utjecaj na više točaka u obradi. Određene odluke imaju smisla samo u određenim točkama mrežnog stoga. Stoga svaka tablica neće imati lanac registriran sa svakom kukom jezgre.

Okvir netfilter nudi samo 5 kuka jezgre. Kao takvi, lanci iz više tablica registrirani su na svakoj točki kuka. Na primjer, ako tri lanca imaju PREROUTING lance, tada su oni registrirani s NF_IP_PRE_ROUTING kukom. Svaki od njih mora osigurati prioritet koji odlučuje kojim se redoslijedom PREROUTING lanac svake tablice poziva. Najviši prioritet PREROUTING lanca procjenjuje se prvi, onaj sa sljedećim najvišim prioritetom procjenjuje se drugi, i tako dalje.

Tablice iptables

Vratimo se korak unatrag i pogledajmo tablice koje iptables nudi. Kao što je ranije spomenuto, svaka tablica predstavlja različite skupove pravila, organizirane prema području interesa, za procjenu paketa.

  • Tablica filter

U iptables , tablica filter jedna je od najpopularnijih. Koristi se za određivanje hoće li paketu biti dopušten nastavak do odredišta ili ne. U terminologiji vatrozida, ovaj proces je poznat kao “filtriranje” paketa.

Upravo su funkcije tablice filter ono na što ljudi misle kada raspravljaju o vatrozidima (većim dijelom).

  • Tablica nat

Ova tablica implementira pravila koja reguliraju NAT. Kada paketi uđu u mrežni stog, pravila opisana u ovoj tablici odlučuju kako izmijeniti izvornu/odredišnu adresu paketa, što utječe na usmjeravanje paketa i sav povratni promet.

Često se tablica nat koristi za usmjeravanje paketa u mreže kojima nema izravnog pristupa.

  • Tablica mangle

Ova tablica sadrži pravila koja na različite načine mijenjaju IP zaglavlja paketa. Na primjer, može promijeniti vrijednost TTL (Time to Live) paketa produljenjem/skraćivanjem broja valjanih mrežnih skokova koje paket može podnijeti. Osim toga, tablica mangle može mijenjati druga IP zaglavlja na sličan način.

Ovoj tablici je također dopušteno staviti internu oznaku jezgre “mark” na paket koju druge tablice i mrežni alati mogu preuzeti za daljnju obradu. Ova oznaka ne dira stvarni paket, već dodaje oznaku prikazu paketa u jezgri.

  • Tablica raw

Vatrozid iptables prati stanje (stateful), što znači da se paketi procjenjuju u kontekstu njihovog odnosa s prethodnim paketima. Značajka praćenja veze razvijena povrh netfilter okvira omogućuje da iptables vidi pakete kao dio tekuće veze ili sesije, a ne kao tok diskretnih, nepovezanih paketa. Općenito, logika praćenja veze primjenjuje se vrlo brzo nakon što paket stigne do mrežnog sučelja.

Tablica raw dolazi s vrlo usko definiranom funkcijom. Jedina svrha ove tablice je pružiti mehanizam za označavanje paketa kako bi se isključili iz praćenja veze.

  • Tablica security

Tablica security stavlja interne oznake sigurnosnog konteksta SELinuxa na pakete. To pak utječe na to kako će SELinux (or bilo koja druga aplikacija koja tumači sigurnosne kontekste SELinuxa) rukovati paketima.

Oznake SELinux mogu se primijeniti po paketu ili po vezi.

Lanci implementirani u svakoj tablici

Do sada smo o tablicama i lancima govorili odvojeno. Vrijeme je da prođemo kroz to koji su lanci dostupni u svakoj tablici. Ova tema proširuje raspravu o redoslijedu procjene lanaca registriranih na istu kuku. Na primjer, što se događa ako tri tablice imaju PREROUTING lance? Kakav je njihov redoslijed procjene?

Zatim pogledajte sljedeću tablicu. Ona prikazuje lance koji su dostupni unutar svake iptables tablice.

  PREROUTING INPUT FORWARD OUTPUT POSTROUTING

(odluka o usmjeravanju)

raw

(praćenje veza omogućeno)

mangle

nat (DNAT)

(odluka o usmjeravanju)

filter

security

nat (SNAT)

Kada se čita s lijeva na desno, opisuje koje tablice sadrže koje lance. Na primjer, raw tablica ima i PREROUTING i OUTPUT lance. Kada se čita odozgo prema dolje, opisuje kojim se redoslijedom svaki lanac poziva kada se aktivira njegov pridruženi netfilter hook se aktivira.

Imajte na umu da je nat tablica podijeljena između DNAT operacija (izmjena odredišta paketa) i SNAT operacija (izmjena izvora paketa) kako bi se jasnije odredio njihov redoslijed. Tablica također uključuje točke prikaza u kojima se donose odluke o usmjeravanju i u kojima je omogućeno praćenje veza.

Hookovi (stupci) koje će paket aktivirati temelje se na prirodi paketa (dolazni/odlazni), donesenim odlukama o usmjeravanju i tome zadovoljava li paket kriterije filtriranja.

Određeni događaji mogu preskočiti lanac tablice tijekom obrade. Na primjer, samo će se prvi paket u vezi procijeniti prema NAT pravilima kako je opisano u nat tablici. Svaki sljedeći paket u istoj vezi imat će primijenjene iste nat odluke bez ikakve dodatne procjene. Odgovori na NAT veze automatski će imati primijenjena obrnuta NAT pravila za ispravno usmjeravanje.

Redoslijed prolaska kroz lance

Pod pretpostavkom da poslužitelj poznaje pravila usmjeravanja paketa i da pravila vatrozida dopuštaju prijenos, sljedeći tokovi predstavljaju kako će se prolaziti različitim putanjama:

  • Dolazni paketi namijenjeni lokalnom sustavu: PREROUTING >> INPUT

  • Dolazni paketi namijenjeni drugom poslužitelju: PREROUTING >> FORWARD >> POSTROUTING

  • Lokalno generirani paketi: OUTPUT >> POSTROUTING

Zaključno, kombinirajući sve informacije o kojima smo do sada raspravljali, možemo vidjeti da će se svaki dolazni paket namijenjen lokalnom sustavu procijeniti prema PREROUTING lancima raw, mangle, i nat tablica. Zatim će proći kroz INPUT lance mangle, filter, security, i nat tablica prije nego što konačno stigne do lokalnog socketa.

Iptables pravila

Pravila iptables vatrozida smještena su unutar određenog lanca određene tablice. Kada se lanac pozove, dotični paket će se procijeniti prema svakom pravilu u lancu. Svako pravilo ima dvije komponente: komponentu podudaranja i komponentu radnje.

  • Podudaranje

Dio pravila koji se odnosi na podudaranje određuje uvjete koje paket mora ispuniti prije nego što se izvrši navedena radnja (ili “cilj”) ispunjena.

Sustav podudaranja nudi nevjerojatnu fleksibilnost. Njegova se funkcionalnost također može proširiti uz pomoć iptables proširenja. Pravila se mogu opisati tako da odgovaraju paketima prema vrsti protokola, izvornoj/odredišnoj adresi, izvornom/odredišnom portu, izvornoj/odredišnoj mreži, ulaznom/izlaznom sučelju, zaglavljima, stanju veze i drugim kriterijima. Pravilo također može imati kombinaciju ovih uvjeta, što rezultira složenim skupovima pravila za razlikovanje različitog prometa.

  • Ciljevi

Cilj (target) je radnja koja se poduzima kada paket zadovolji kriterije podudaranja pravila. Općenito, ciljevi se dijele u dvije skupine:

    • Završni ciljevi: Prekida proces procjene unutar lanca i vraća kontrolu netfilter hooku. Na temelju povratne vrijednosti, hook će ili dopustiti paketu da nastavi svoj put ili će ga odbaciti.

    • Nezavršni ciljevi: Cilj izvodi radnju i procjena u lancu se nastavlja. Iako svaki lanac mora proći kroz konačnu završnu odluku, prije toga se može dogoditi bilo koji broj nezavršnih ciljeva.

Dostupnost svakog cilja unutar pravila ovisi o kontekstu. Na primjer, lanac i vrsta tablice mogu utjecati na dostupnost ciljeva. Ostali mogući čimbenici uključuju aktivirana proširenja u pravilu i klauzule podudaranja.

Korisnički definirani lanci

Postoji’ također i posebna klasa nezavršnih ciljeva: cilj skoka. Ciljevi skoka su radnje koje se izvode kada se evaluacija pomakne s jednog lanca na drugi radi dodatne obrade. Do sada smo govorili o ugrađenim lancima koji su usko povezani s netfilter kukama koje ih pozivaju. Međutim, iptables također omogućuje administratorima stvaranje vlastitih prilagođenih lanaca.

Pravila u korisnički definiranim lancima također su slična onima u ugrađenim lancima. Ključna razlika je u tome što su korisnički definirani lanci dostupni samo “skakanjem” na njih iz nekog pravila. To je zato što korisnički definirani lanci nisu povezani ni s jednom netfilter kukom.

Korisnički definirane lance možete zamisliti kao proširenja lanca koji ih je izvorno pozvao. Na primjer, u korisnički definiranom lancu, evaluacija će se vratiti na pozivajući lanac ako dosegne kraj popisa pravila ili ako podudarajuće pravilo izvrši RETURN cilj. Zanimljivo je da korisnički definirani lanac također može “skokom” preusmjeriti evaluaciju na drugi korisnički definirani lanac.

Ova značajka postavlja temelje za bolju organizaciju i potreban okvir za robusno grananje.

Praćenje veza

Kada smo raspravljali o raw tablici i kriterijima podudaranja stanja veze, raspravljali smo o sustavu praćenja veza implementiranom povrh netfilter okvira. Ova značajka omogućuje iptables  da vidi pakete u kontekstu tekuće veze. Sustav praćenja veza također pruža iptables s potrebnom funkcionalnošću za izvođenje “stateful” operacija.

Neposredno nakon što paket uđe u mrežni stog, primjenjuje se praćenje veze. Lanci raw tablice i neke osnovne provjere ispravnosti čine svu logiku koja se koristi za povezivanje paketa s vezom.

Sustav provjerava svaki paket u odnosu na skup postojećih veza. Ako je potrebno, sustav će ažurirati stanje postojećih veza ili stvoriti nove. Paketi koji su označeni ciljem NOTRACK u bilo kojem lancu raw tablice zaobići će daljnje rutine praćenja veza.

  • Dostupna stanja

Vezama koje prati sustav za praćenje veza bit će dodijeljeno bilo koje od sljedećih stanja:

    • NEW : Nakon dolaska paketa koji nije povezan s postojećom vezom, ali nije nevažeći kao prvi paket, u sustav se dodaje nova veza s ovom oznakom. To se događa i za protokole koji su svjesni veze (na primjer, TCP) i za protokole bez uspostave veze (na primjer, UDP).

    • ESTABLISHED: Stanje veze se ažurira iz NEW  u ESTABLISHED kada primi valjani odgovor iz suprotnog smjera. Za TCP veze, to označava SYN/ACK. Za UDP i ICMP promet, to označava odgovor u kojem su izvor i odredište izvornog paketa zamijenjeni.

    • RELATED: Paketi koji nisu dio veze, ali su povezani s uspostavljenom vezom, dobivaju oznaku RELATED . To može značiti pomoćnu vezu (na primjer, kod FTP veze za prijenos podataka) ili ICMP odgovore na pokušaje povezivanja od strane drugih protokola.

    • INVALID: Paketi koji nisu dio uspostavljene veze, smatraju se neprikladnima za otvaranje nove veze, ne mogu se identificirati, ne mogu se usmjeriti itd. dobivaju oznaku INVALID.

    • UNTRACKED: Paket se može označiti kao UNTRACKED ako je bio ciljan u lancu raw tablice radi zaobilaženja praćenja.

    • SNAT: Označava virtualno stanje postavljeno kada se izvorna adresa izmijeni NAT operacijom. Njime upravlja sustav za praćenje veza kako bi se izvorne adrese prevele u povratnim paketima.

    • DNAT: Slično kao i SNAT, označava virtualno stanje kada je odredišna adresa izmijenjena NAT operacijom. Sustav za praćenje veza njime upravlja tako da zna prevesti odredišnu adresu natrag prilikom usmjeravanja paketa odgovora.

Ova stanja koja prati sustav za praćenje veza omogućuju administratorima stvaranje specifičnih pravila usmjerenih na određene točke u životnom vijeku veze. Pruža potrebnu funkcionalnost za temeljitija i sigurnija pravila.

Završne misli

U Linuxu, netfilter okvir i iptables vatrozid služe kao osnova za većinu vatrozida. Netfilter kuke dovoljno su blizu mrežnom stogu da omoguće moćnu kontrolu nad paketima koje sustav obrađuje. Koristeći ove mogućnosti, iptables vatrozid nudi fleksibilan način prenošenja zahtjeva pravila jezgri.

Ovaj vodič detaljno opisuje unutarnju strukturu netfilter okvira i iptables vatrozida. Osim toga, raspravlja o sustavu za praćenje veza. Razumijevanjem kako se ovi dijelovi uklapaju, možete ih bolje iskoristiti za stvaranje robusnijih i sigurnijih poslužiteljskih okruženja.

Na kraju, iako se ovaj vodič bavi unutarnjim radom, pogledajte ovaj vodič o konfiguriranju iptables kako biste ih primijenili u praksi. Osim toga, možete vidjeti kako UFW vatrozid dodatno pojednostavljuje iptables. Nadalje, bit će korisno naučiti kako izlistati i izbrisati pravila iptables vatrozida.

Sretno računanje!

author

Preslav Dobrev

Autor · CloudSigma

Preslav Dobrev je kreativni dizajner u CloudSigma, usredotočen na dosljedan poslovni identitet korištenjem tradicionalnih i inovativnih marketinških kanala. Vješt je u spajanju umjetničke vizije sa strateškim marketingom kako bi stvorio dojmljive brendirane priče.

Komentari

Još nema komentara. Budite prvi.