Napredne funkcije iptables-a kao vatrozida (sa L7 filtiranjem i custom zakrpama)

Izvor: SIS Wiki
Skoči na: orijentacija, traži

Projekt iz kolegija "Sigurnost informacijskih sustava"

Akademska godina 2012./13.

Izradio: Dejan Todorović


Sadržaj

Uvod

Popularizacija Interneta stvorila je potrebu za zaštitom od neovlaštenih udaljenih zlonamjernih korisnika, kako na poslužiteljima tako i na osobnim računalima. Zbog što bolje zaštite vatrozidi postaju neizostavni dio računalnih sustava.

Jednostavno rečeno vatrozidi su sustavi koji sprječavaju neautorizirani pristup privatnoj mreži ili izlaz s privatne mreže. Mogu biti implementirani i u softver i u hardver, kao i kombinirano u oboje. Obično im je namjena da spriječe Internet korisnike kako bi neautorizirano pristupili privatnim mrežama koje su spojene na Internet, te analiziraju svaki paket i blokira one koje ne zadovoljavaju sigurnosne kriterije.

Općenito, vatrozidi su konfigurirani za zaštitu od neprovjerenih interaktivnih prijava iz vanjskog svijeta. To pomaže u sprečavanju "hakera" da se prijavljuju na strojeve koji se nalaze u privatnoj mreži. Više sofisticirani vatrozidi blokiraju promet izvana, ali dopuštaju korisnicima u privatnoj mreži da komuniciraju sa nešto više slobode s vanjskim svijetom.

Današnji vatrozidi dolaze u različitim oblicima i sa različito postavljenim mrežnim konfiguracijama, a sve ovisi o potrebama korisnika. Velika većina ih ima mogućnost filtriranja mrežnog prometa isključivo na drugom, trećem i četvrtom OSI sloju, tj. prema MAC adresi, IP adresi, priključnoj točki (portu usluge) i stanju konekcije. Sve masovnija upotreba računalnih mreža dovodi do potrebe kontroliranja mrežnog prometa na sedmom sloju ( aplikacijskoj razini). Mrežni se promet filtrira prema protokolima koji se koriste na ovoj razini OSI modela, te postoje razna rješenja za tu vrstu kontrole. Jedno od takvih rješenja je i filtriranje mrežnog prometa pomoću Iptables alata s L7 filtriranjem i custom zakrpama.


Potrebni paketi za Iptables filtriranje na 7.sloju

- 2.4 or 2.6 Linux jezgra source (preporuka 2.6) - kernel.org

- iptables source - netfilter.org

- "l7-filter verzija jezgre" paket (netfilter-layer7-vX.Y.tar.gz)

- "Definicije protokola" paket (l7-protocols-GGGG-MM-DD.tar.gz)


Linux jezgra

Slika 1. Linux logo
Linux je jezgra računalnog operativnog UNIXoidnog sustava. Kreator Linuxa je Linus Torvalds, koji je 1991. dok je još bio student, zbog vlastitih potreba, napravio vlastiti operativni sustav. U ranim danima Linux je služio kao eksperimentalni sustav, te nije bilo komercijalne upotrebe. Kasnije se to promijenilo te pod okriljem GNU projekta i pod GPL licencom, kao besplatan i otvorenog koda, Linux postaje dominantan na području poslužitelja i superračunala, te na područjima pametnih telefona, tablet računalima, usmjerivačima, televizorima itd…

Linux distribucija je operacijski sustav sastavljen od Linux jezgre (s pogonskim programima), GNU sistemskih i aplikacijskih programa, Xorg grafičkog servera i grafičkog okruženja. Osim tih osnovnih dijelova, različite distribucije uključuju veći ili manji broj ostalih korisničkih programa specifične namjene. Svaka distribucija je podešena prema željama autora i korisnika za određenu namjenu. Nemoguće je utvrditi točan broj distribucija, a ne postoji niti jasan kriterij što čini Linux distribuciju. Veliki broj distribucija kao i nepostojanje standarda - poput jedinstvenog načina instaliranja programa - mnogim korisnicima računala otežava prelazak na Linux, ali i komercijalnu upotrebu.

Distribucije se mogu podijeliti u tri osnovne skupine s obzirom kako se distribuira softver uz pojedinu distribuciju. Softver se može distribuirati u izvornom kodu (kao kod distribucije Gentoo) ili u zato predviđenim paketima (koji sadrže izvršne inačice softvera) ili pak kao izvršni programi ili skripte koje same instaliraju softver (također u izvršnom obliku). Dva najčešća sustava za upravljanje paketima su rpm i dpkg pa se stoga distribucije koje ih koriste često nazivaju nazivaju RPM distribucije, odnosno distribucije temeljene na Debianu. U distribucije vrste RPM spadaju npr. RHEL, Fedora, Mandriva, PCLinuxOS, OpenSuse, dok u distribucije vrste Debian spadaju (osim samog Debiana): Ubuntu, Xandros, Mepis, Knoppix, Sidux i dr.

Posljednja stabilna verzija Linux jezgre je 3.6.5 (na dan 3.11.2012). Prilikom prikaza naprednih funkcija iptablesa na 7. sloju koristit će se Linux distribucija CentOS 5.9 sa 2.6.26 verzijom jezgre.


Iptables

Iptables je napredni administratorski alat koji omogućuje IPv4 filtriranje mrežnog prometa i translaciju mrežnih i port adresa. Iptables paket uključuje i ip6tables za IPv6 filtriranje. S korisničke strane iptables je osnovni vatrozid većine linux distribucija te u njima dolazi kao dio osnovne instalacije. Koristi se u naprednim nadzorima mreže, vatrozidima, transparentnim proxyjima i dijeljenju mrežne povezanosti.

Iako se iptables paket instalira pri instalaciji sustava i automatski je konfiguriran tako da se pokreće prilikom podizanja sustava, bez dodatne konfiguracije ne pružaju nikakvu zaštitu.

Program se iz komandne linije poziva sa naredbom:

#iptables <opcije>

Ovisno o opcijama navedenim iza imena programa, u tablice za filtriranje paketa se dodaju nova, brišu stara,ili mijenjaju postojeća pravila. Iako je program iptables moguće pozvati direktno iz komandne linije, za veći skup pravila to nije praktično, pa je zbog toga jednostavnije napisati skriptu u kojoj se definiraju pozivi programa sa svim željenim opcijama.

Postoje 4 osnovne tablice u iptables konfiguraciji: filter, nat, mangle i raw. Osnovna tablica koja se koristi i koja je zadana (default) kada se eksplicitno ne navede ime tablice je filter.

#iptables –L

S ovom naredbom ćemo izlistati „filter“ zadanu tablicu.


Ukoliko želimo više informacija, i da vidimo portove kao brojeve umjesto imena upisat ćemo slijedeću naredbu:

#iptables –L –vn

Pravila u tablicama podijeljena su na lance, a u filter tablici postoje tri osnovna lanca:

INPUT – lanac koji definira pravila za ulazne pakete

OUTPUT – lanac koji definira pravila za izlazne pakete

FOWARD – lanac koji definira pravila za pakete koji poslužitelj prosljeđuje.


Slika 2. Tok paketa u Netfilteru i mreži


U svakom od tih lanaca moguće je definirati prosljeđivanje paketa u neki od drugih, od strane korisnika definirani lanac. Postoje pravila kojima se slažu pravila u lancima, koja govore što se može a što ne može nalaziti u pravilima, pa tako na primjer nije dopušteno definirati ulazni port bez da se definira protokol, te postoje brojna druga pravila i kombinacije onoga što se može definirati u jednom pravilu.

Akcija je najvažnija stvar koja se definira u jednom pravilu, a ona opisuje što će se dogoditi sa paketom koji je obuhvaćen. Akcije mogu biti: ACCEPT - koja označava bezuvjetno prihvaćenje paketa, LOG – koja stvara zapise u paketu u log datotekama, REJECT – koji vrši odbacivanje projekta i šalje poruku o grešci pošiljatelju, DROP – vrši bezuvjetno odbacivanje paketa, na taj način da druga strana, koja poslala paket, ne zna što se dogodilo s njim ...


Ukoliko želimo blokirati IP promet koji dolazi sa specifične IP adrese, to bi napravili sa naredbom:

#iptables –A INPUT –s 192.168.200.150 –j DROP


Ako želimo blokirati samo na određenoj mrežnoj kartici, onda bi koristila slijedeća naredba:

#iptables –A INPUT –s 192.168.200.150 –i eth0 –j DROP


Za određeni port, npr. Tcp port 22:

#iptables –A INPUT –s 192.168.200.150 –p tcp –dport 22 –j DROP


Također se može blokirati promet koji dolazi sa određene mreže, a ne samo sa IP adrese, i to naredbom:

#iptables –A INPUT –s 192.168.200.150/24 -j DROP


Ukoliko želimo možemo zabraniti bilo kakav promet koji dolazi s određene MAC adrese. To može biti korisno u slučaju kada DHCP server mijenja IP adresu stroja od kojeg ne želimo prihvaćati promet. U tom slučaju se upisuje ova naredba:

#iptables –A INPUT –m mac --mac-source 00:12:2f:8f:f8:f8 –j DROP


Osim što možemo blokirati određeni port sa određene IP adrese, također možemo blokirati bilo kakav dolazni promet preko određenog porta. Npr. Port 21 ćemo blokirati na ovaj način:

#iptables –A INPUT –p tcp --destination-port 21 –j DROP


Ako imamo server sa dvije mrežne kartice, sa jednom mrežnom okrenutu prema Internetu, a drugu prema privatnoj lokalnoj mreži, te pri tome želimo blokirati FTP protokol od vanjskog svijeta.

#iptables -A INPUT -p tcp -i eth1 -p tcp --destination-port 21 -j DROP

U ovom slučaju eth1 je mrežna okrenuta prema Internetu.


Možemo blokirati port sa specifične IP adrese:

#iptables -A INPUT -p tcp -s 22.33.44.55 --destination-port 21 -j DROP


Ili čak blokirati pristup portu od bilo gdje, osim sa specifičnog IP raspona

#iptables -A INPUT p tcp -s ! 192.168.200.150/24 --destination-port 21 -j DROP


Korisna naredba kojom možemo zabraniti virusu da šalje mailove je da zabranimo izlaz prometa preko porta 25:

#iptables -A FORWARD -p tcp --dport 25 -j DROP

U ovom primjeru koristimo FORWARD, jer bi naredbu koristili da je npr. poslužitelj i vatrozid, ali možemo koristiti i OUTPUT također da bi blokirali i poslužiteljev promet preko tog porta.


Logiranje prometa

Ukoliko želimo napraviti log prometa prije nego ga blokiramo, npr. Kada bi u uredu postojalo pravilo, gdje su svim zaposlenicima rekli da se ne prijavljuju na određeni poslužitelj, i želimo biti sigurni da će se svi pridržavati tog pravila tako da ćemo blokirati pristup ssh portu. Ali također želimo i vidjeti da li se neki zaposlenik pokušao prijaviti.

#iptables -A INPUT -p tcp --dport 22 -j LOG --log-prefix "blokiran promet na port 22"
#iptables -A INPUT -p tcp --dport 22 -j DROP

Na ovaj način možemo vidjeti koja je IP adresa pokušala pristupiti serveru, ali naravno nije mogla.


Savjeti i trikovi

Kako iptables izvršava pravila po redu, ako želimo nešto promijeniti morali bi umetnuti pravilo u određeno mjesto, ili željeni efekt neće biti postignut.


Izlistavanje određenih lanaca

#iptables -nL --line-numbers

Ova naredba će izlistati sva pravila koja smo upisali sa brojevima koja prethode pravilima. Odredimo gdje želimo umetnuti pravilo i upišemo:

#iptables -nL INPUT

Izlistat će sva INPUT pravila.

#iptables -nL FORWARD

Izlistat će sva OUTPUT pravila.


Umetanje pravila:

#iptables -I INPUT 3 -s 10.0.0.0/8 -j ACCEPT

Ta će naredba dodati pravilo na poziciju 3


Brisanje pravila:

#iptables -D INPUT 3

Ovo će obrisati pravilo koje je umetnuto sa prethodnom naredbom, odnosno briše pravilo koje se nalazi 3. u nizu u lancu, a također ga možemo maknuti i na ovaj način:

#iptables -D INPUT -s 10.0.0.0/8 -j ACCEPT


Ukoliko želimo započeti sa praznom talicom i potpuno obrisati tablice, to bi učinili sa slijedećim naredbama:

#iptables --flush
#iptables --table nat --flush
#iptables --table mangle --flush
#iptables --delete-chain
#iptables --table nat --delete-chain
#iptables --table mangle --delete-chain


Zaustavljanje brute force napada

Primjer kako zaustaviti brute force napade na poslužitelj pomoću iptablesa. Ovim primjerom ćemo dozvoliti samo tri pokušaja prijave preko ssh prije nego će IP adresa biti blokirana na 15minuta. Na taj način ćemo dozvoliti legitimnim korisnicima da se prijave na server, a botovima ćemo to onemogućiti.

#iptables -F
#iptables -A INPUT -i lo -p all -j ACCEPT
#iptables -A OUTPUT -o lo -p all -j ACCEPT                    
#iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
#iptables -A INPUT -p tcp --dport ssh -j ACCEPT
#iptables -A INPUT -p tcp --dport www -j ACCEPT
#iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --set
#iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --update --seconds 900 --hitcount 3 -j DROP
#iptables -P INPUT DROP


NAT sa iptablesima

Iptables je vrlo koristan i za konfiguriranje NAT usmjerivača, i to tako da se Linux stroj konfigurira da se ponaša kao usmjerivač i dijeli svoju javnu IP adresu sa privatnim mrežama iza njega. Također je korisno i za konfiguriranje DHCP-a na istom poslužitelju.

Kako bi konfigurirali NAT usmjerivač, bilo bi dobro da imamo računalo sa dvije mrežne kartice. Npr.

* eth0: 12.13.14.15

* eth1: 10.1.1.1

Sada možemo konfigurirati NAT da prosljeđuje sav promet sa 10.1.1.0 mreže preko eth0, i to slijedećim naredbama:

#iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE
#iptables --append FORWARD --in-interface eth1 -j ACCEPT

Sve što se još treba napraviti je da se omogući jezgrino preusmjerivanje:

#echo 1 > /proc/sys/net/ipv4/ip_forward


U primjerima su navedene neki osnovne, ali i korisne funkcije iptables vatrozida.

Kratka objašnjenja osnovnih upotrijebljenih opcija:

-A INPUT - označava lanac u koji se dodaje pravilo (INPUT)

-A FOWARD – označava lanac u koji se dodaje pravilo (FOWARD)

-A OUTPUT – označava lanac u koji se dodaje pravilo (OUTPUT)

-i eth0 - označava na koje sučelje dolaze paketi na koje se pravilo odnosi

-p tcp - označava da pravilo filtrira TCP pakete

--dport 22 - označava odredišni port paketa na koje se pravilo odnosi, u ovom slučaju 22

-m state - označava match naredbu koja definira koji modul se koristi (moguće je koristiti samo module koji se nalaze u kernelu), a za zadani primjer koristi se modul state koji omogućava upravljanje paketima na osnovi njihovog stanja

--state NEW - označava da se ovim pravilom filtriraju samo novouspostavljene konekcije

-m recent --update --seconds 60 --hitcount 8 - koristi modul recent i radi prebrojavanje paketa unutar vremenskog okvira od 60 sekundi (pravilo se aktivira kada se pobroji više od 8 paketa u 60 sekundi)

--rttl - naredba recent modula koja može poslužiti kao zaštita od lažiranja adrese

-j DROP - paketi se odbacuju bez upisa u log datoteku

-j ACCEPT – paketi su prihvaćeni

POSTROUTING - mijenjanje odredišne IP adrese i/ili porta u zaglavlju

MASQUERADING - prevođenje internih IP adresa na adrese izlaznog sučelja



l7-filtar

L7-filter je softverski paket koji omogućuje klasifikaciju za Linux Netfilter podsustav koji mogu kategorizirati pakete Internet protokola na temelju njihovih podataka iz aplikacijskog sloja. Glavni cilj ovog alata je da omogućuje identifikaciju peer-to-peer programa, koji koriste nepredvidive brojeve portova. Postoje dvije verzije za ovaj softver, prvi je implementiran kao modul jezgre za Linux 2.4 i 2.6. Druga eksperimentalna verzija je objavljena u prosincu 2006. koja radi kao program korisničkog prostora (dio memorije unutar koje se izvršavaju sve aplikacije), a oslanja se na biblioteke iz netfilterovog korisničkog prostora za postupak klasifikacije.

Obje verzije L7-filtra koriste regularne izraze (iako korisnički prostor i moduli jezgre koriste različite regularne izraze biblioteka) za prepoznavanje mrežnih protokola.

Sve verzije L7-filtra su objavljeni pod GNU Općom javnom licencom.

L7-filtar je dobio ime po sedmom (aplikacijskom) sloju OSI modela. Taj sloj je najbliži krajnjem korisniku. On dostavlja mrežne servise/usluge aplikacijama krajnjeg korisnika. Za razliku od svih ostalih slojeva, ne dostavlja usluge ni jednom drugom OSI sloju, nego isključivo aplikacijama koje se nalaze van OSI modela. Primjeri takvih aplikacija su tablični kalkulatori, uređivača teksta i slično. Aplikacijski sloj uspostavlja dostupnost između komunikacijskih partnera i sinkronizira i uspostavlja dogovore o procedurama oporavka u slučaju greški i kontrolira integritet podataka. Ne predstavlja, na primjer, razinu nekog uređivača teksta ili baze podataka, već protokole i funkcije da bi korisnikove aplikacije ispravno komunicirale s podacima, kao: otvaranje, čitanje, brisanje i zapisivanje datoteka, zajednički pristup datotekama, prijenos datoteka i pristup bazama podataka, potpora programskoj potpori za elektroničku poštu, opća usluga pregleda i dohvata resursa mreže, usluge za ispravan rad postaje i resursa koje 'vidi'.


Slika 3. OSI model


L7-filtar je odlično rješenje za klasifikaciju aplikacijskih podataka u mreži, i značajno je poboljšanje zaštite korištenjem L7-filtra u odnosu na filtriranje korištenjem samo klasičnih vatrozida. Ono što klasični vatrozidi rade je propuštanje i blokiranje prometa prema samo prethodno definiranim pravilima o tome koji servis osluškuju na kojem portu, te da li mu se smije pristupiti ili ne. Ukoliko jedna od strana u komunikaciji, bilo da je to klijent ili poslužitelj s kojim klijent razmjenjuje podatke, promijeni broj portova vatrozida više ne može ispraviti filtrirani promet.

L7-filtri služe i kao nadopuna postojećim programima koji se poklapaju prema IP adresi, broju porta i slično pa se zato često koriste kao nadopuna vatrozida i sličnih sustava. Filtriranjem se omogućava otkrivanje bilo kojeg protokola koji koristi nepredvidljive priključnice (npr. P2P razmjena podataka), otkrivanje prometa na nestandardnim portovima (npr. HTTP na portu 1111), razlikovanje protokola koji dijele port (npr. P2P razmjena podataka koja koristi port 80).

L7-filtriranje ima dosta prednosti, ali kao i sa gotovo svakom dobrom stvari, postoje i nedostaci. Kako L7-filtar mora zapravo analizirati podatke sadržane u IP paketima, prilično je očito da to može „pojesti“ puno procesorske snage. Dakle, koristiti L7-filtar na Linux usmjerivaču s visokim prometom nije baš preporučljivo, s obzirom da L7-filtar dosta troši procesorsku snagu te stoga može dovesti do latencije i gubitka paketa u mreži. Međutim, to stvarno ovisi o vrsti prometa koji prolazi kroz taj usmjerivač, a ne toliko o količini prometa. Na primjer, ako imamo u prosjeku 20 Mbps WWW podataka, L7-filtar može raditi prilično dobro, ali za 2 Mbps VoIP prometa, performanse usmjerivača će dramatično pasti.

Ono što L7-filtar pruža je način za iptables kako bi poslagali pakete na temelju aplikacije kojoj pripadaju.

TCP / IP model sadrži četiri sloja i, prije L7-filtar projekta, Netfilter je mogao slagati podatke prema prva tri sloja.


Slika 4. Tcp/ip_model.png



Instalacija L7-filtra

Za instalaciju L7-filter projekta, moramo zakrpati naše kernele sa zakrpama koji se mogu pronaći na http://l7-filter.sourceforge.net. Da bi to učinili, moramo imati izvorni kod kernela. Sljedeći korak bi bio da se primijeni iptables zakrpa, rekompajlira iptables, i instaliraju definicije protokola datoteke.


Primjena Kernel Patch

Prvi korak je preuzimanje izvornog koda kernela sa slijedećeg linka - http://www.kernel.org. Dalje, moramo preuzeti L7-filtar od http://l7-filter.sourceforge.net.


L7-filter Aplikacije

L7-filtar možemo koristiti s bilo kojom iptables opcijom, jer ipak L7-filtar pruža samo još jednu odgovarajuću opciju. Međutim, nisu sve stvari koje možemo napraviti sa tom novom opcijom preporučljive, jer se može dogoditi da L7-filtar odgovara paketima koji pripadaju drugim aplikacijama a ne onima koje želimo.


Filtriranje Application Data

Blokiranje podataka aplikacije koja prolazi kroz usmjerivač je jedan od ne-preporučenih stvari koje možemo učiniti s L7-filtra.



Primjer instalacije i podešavanja L7-filtra na CentOS 5.9

U slijedećem primjeru će biti prikazano podešavanje L7-filtra na Linux distribuciji Cent0S 5.9, koje se može primijeniti na bilo koju drugu Linux distribuciju.


Preuzimanje potrebnih paketa

1.1) Preuzimanje izvornog koda L7-filtra

wget http://downloads.sourceforge.net/l7-filter/netfilter-layer7-v2.19.tar.gz
Slika 5. Preuzimanje izvornog koda L7-filtra


1.2) Preuzimanje L7-filtra korisničkog prostora

wget http://downloads.sourceforge.net/l7-filter/l7-filter-userspace-0.7.tar.gz

Slika 6. Preuzimanje L7-filtra korisničkog prostora


1.3) Preuzimanje definicija protokola L7-filtra

wget http://downloads.sourceforge.net/l7-filter/l7-protocols-2008-04-23.tar.gz
Slika 7. Preuzimanje definicija protokola L7-filtra

Napomena: Posljednja dostupna verzija paketa, za prva tri koraka, se preuzima sa slijedećeg linka - http://sourceforge.net/projects/l7-filter/files/


1.4) Preuzimanje Linux Iptables 1.4.0

wget http://www.netfilter.org/projects/iptables/files/iptables-1.4.0.tar.bz2
Slika 8. Preuzimanje iptablesa


1.5) Preuzimanje Linux Jezgre 2.6.26

wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.26.tar.bz2
Slika 9. Preuzimanje definicija protokola L7-filtra


Instalacija L7-filtra

tar -xvf linux-2.6.26.tar.bz2
Slika 10. Ekstraktiranje arhive izvornog koda Linux jezgre
tar -xvf netfilter-layer7-v2.19.tar.gz
Slika 11. Ekstraktiranje arhive izvornog koda Layer7 filtra


2.1) Primjeniti zakrpu na izvorni kod Linux jezgre

cd linux-2.6.26 
patch -p1 < ../netfilter-layer7-v2.19/kernel-2.6.25-layer7-2.19.patch
Slika 12. Primjena zakrpe na izvorni kod Linux jezgre


2.2) Primjena zakrpa i instalacija iptables 1.4.0

tar -xvf iptables-1.4.0.tar.bz2
Slika 13. Ekstraktiranje arhive iptablesa
cd iptables-1.4.0
patch -p1 < ../netfilter-layer7-v2.19/iptables-1.4-for-kernel-2.6.20forward-layer7-2.19.patch
chmod +x extensions/.layer7-test
make KERNEL_DIR=~/linux-2.6.26
Slika 14. Primjena zakrpe iptablesa i instalacija
make install KERNEL_DIR=~/linux-2.6.26
Slika 15. Instalacija iptablesa


Instalacija definicija protokola

tar -xvf l7-protocols-2008-04-23.tar.gz
Slika 16. Ekstraktiranje arhive s definicijama protokola
cd l7-protocols-2008-04-23
mkdir /etc/l7-protocols
cp protocols/* /etc/l7-protocols
Slika 17. Kopiranje protokola u novokreirani folder etc/l7-protocols


Komplajliranje i instalacija nove Linux jezgre

cd linux-2.6.26
make menuconfig

Konfiguriranje Linux jezgre za L7 filtriranje:

Odabrati Networking ---> opciju

Slika 18. Izbornik za konfiguriranje Linux jezgre


Odabrati Networking options ---> opciju

Slika 19. Networking izbornik


Odabrati Network packet filtering framework (Netfilter) ---> opciju

Slika 20. Networking options izbornik


Odabrati Core Netfilter Configuration ---> opciju

Slika 21. Network packet filtering framework (Netfilter) izbornik


Odabrati "layer7" match support (NEW) opciju

Slika 22. Core Netfilter Configuration izbornik


Odabrati i označiti Layer 7 debugging output opciju

Slika 23. Core Netfilter Configuration izbornik


Izaći iz konfiguracijskog izbornika i prihvatiti promjene

Slika 24. Izlaz iz konfiguracijskog izbornika


Kompajliranje izvornog koda jezgre

make all
Slika 25. Komajliranje jezgre


Instalacija modula

make modules_install
Slika 26. Kopiranje jezgre


Instalacija Linux jezgre

make install
Slika 27. Instalacija jezgre


Provjeriti da li grub.conf file izgleda ovako:

Slika 28. grub.conf fajl


Ponovno pokrenuti sustav, te nakon što se sustav ponovno podigne testirati L7-filtar s naredbom:

#iptables -m layer7 --help
Slika 29. Mogućnosti L7-filtra
iptables v1.4.0

Usage: iptables -[AD] chain rule-specification [options]
      iptables -[RI] chain rulenum rule-specification [options]
      iptables -D chain rulenum [options]
      iptables -[LFZ] [chain] [options]
      iptables -[NX] chain
      iptables -E old-chain-name new-chain-name
      iptables -P chain target [options]
      iptables -h (print this help information)

Commands:
Either long or short options are allowed.
  --append  -A chain            Append to chain
  --delete  -D chain            Delete matching rule from chain
  --delete  -D chain rulenum
                                Delete rule rulenum (1 = first) from chain
  --insert  -I chain [rulenum]
                                Insert in chain as rulenum (default 1=first)
  --replace -R chain rulenum
                                Replace rule rulenum (1 = first) in chain
  --list    -L [chain]          List the rules in a chain or all chains
  --flush   -F [chain]          Delete all rules in  chain or all chains
  --zero    -Z [chain]          Zero counters in chain or all chains
  --new     -N chain            Create a new user-defined chain
  --delete-chain
            -X [chain]          Delete a user-defined chain
  --policy  -P chain target
                                Change policy on chain to target
  --rename-chain
            -E old-chain new-chain
                                Change chain name, (moving any references)
Options:
  --proto       -p [!] proto    protocol: by number or name, eg. `tcp'
  --source      -s [!] address[/mask]
                                source specification
  --destination -d [!] address[/mask]
                                destination specification
  --in-interface -i [!] input name[+]
                                network interface name ([+] for wildcard)
  --jump        -j target
                                target for rule (may load target extension)
  --goto      -g chain
                              jump to chain with no return
  --match       -m match
                                extended match (may load extension)
  --numeric     -n              numeric output of addresses and ports
  --out-interface -o [!] output name[+]
                                network interface name ([+] for wildcard)
  --table       -t table        table to manipulate (default: `filter')
  --verbose     -v              verbose mode
  --line-numbers                print line numbers when listing
  --exact       -x              expand numbers (display exact values)
[!] --fragment  -f              match second or further fragments only
  --modprobe=<command>          try to insert modules using this command
  --set-counters PKTS BYTES     set the counter during insert/append
[!] --version   -V              print package version.

LAYER7 match v1.4.0 options:
--l7dir <directory>  : Look for patterns here instead of /etc/l7-protocols/
                       (--l7dir must be specified before --l7proto if used!)
--l7proto [!] <name> : Match the protocol defined in /etc/l7-protocols/name.pat


Mogućnosti l7-filtra

L7-filtar koristi standardnu iptables sintaksu, pa će komanda izgledati ovako:

#iptables [specifikacija tablice i lanca] -m layer7 --l7proto [ime protokola] -j [akcija

Moguće radnje su: blokiranje određenih protokola, kontroliranje pojasne širine i praćenje stanja na mreži. Svaka navedena radnja bit će opisana dalje u tekstu.


Blokiranje protokola

Blokiranje nije najpoželjniji način kontrole mrežnog prometa, i to iz više razloga: - l7-filtar klasifikacija nije neotporna, jer se može dogoditi da jedan protokol izgleda kao drugi (false positive), a i aplikacije mogu učiniti opskurne stvari na koje nismo računali - skoro svaka vrsta mrežnog prometa je legitimna (primjer su P2P protokoli koji se koriste za legalno razmjenjivanje i distribuciju besplatnih programa i programa otvorenog koda, a istovremeno se koriste za piratstvo i kršenje autorskih prava) L7-filtar nije dizajniran s namjerom da se mrežni promet blokira, pa bi ovu radnju trebalo koristiti samo u nuždi.


Primjer kako se može blokirati neke aplikacije

Blokiranje Microsoft MSN messengera:

#iptables -I FORWARD -m layer7 --l7proto msnmessenger -j DROP
#iptables -I FORWARD -m layer7 --l7proto msn-filetransfer -j DROP


Blokiranje bittorrenta:

#iptables -I FORWARD -m layer7 --l7proto bittorrent -j DROP


Blokiranje mrežnog igranja videoigre Doom 3:

#iptables -I FORWARD -m layer7 --l7proto doom3 -j DROP


Blokiranje Symantecovog programa za udaljeni pristup:

#iptables -I FORWARD -m layer7 --l7proto pcanywhere -j DROP


Kontrola pojasne širine

Za kontrolu pojasne širine koristi se Netfilter za označavanje paketa (mark) i zatim se pomoću QoS (Quality of Service) tehnika može oblikovati promet označenih paketa. Samo označavanje radi se s opcijom

-j MARK --set-mark [integer]

dok se za oblikovanje koristi tc komandna linija koja je dio IPROUTE paketa. Slijedi primjer označavanja i filtriranja paketa koji koristi imap protokol:

#iptables -t mangle -A POSTROUTING -m layer7 --l7proto imap -j MARK --set-mark 3

Vrijednost [integer] varijable je proizvoljna.

Oblikovanje mrežnog prometa tog označenog paketa se može izvoditi na sljedeći način:

tc filter add dev eth0 protocol ip parent 1:0 prio 1 handle 3 fw flowid 1:3

Time je označeni imap promet usmjeren na treću podklasu prio metode za upravljanje redom čekanja. Komplicirana i nerazumljiva sintaksa tc komandne linije opisana je u LARTC HOWTO dokumentu. Skriptu je potrebno modificirati na način da se odredi protokol koji se želi pratiti tj. oblikovati. Također, u slučaju ne-premosnika, potrebno je konfigurirati i NAT servis. Skriptu treba modificirati na način da se promjeni IP adresa na kojoj se nalazi računalo koje obavlja NAT. Preporučljivo je da se skripte stave unutar /etc/init.d/ direktorija te se stave u startup proceduru sustava naredbom:

update-rc.d -f <ime_skripte> defaults

Podržan je priličan broj protokola, a to su uglavnom P2P protokoli te protokoli koje koriste računalne igre. Također je moguće napisati definicije za nove protokole, ukoliko za to postoji potreba. Uz protokole, moguće je definirati i tipove datoteka čiji promet želimo kontrolirati.


Popis protokola:

Ime Opis
100bao 100bao a Chinese P2P protocol/program - http://www.100bao.com
aim AIM - AOL instant messenger (OSCAR and TOC)
aimwebcontent AIM web content - ads/news content downloaded by AOL Instant Messenger
applejuice Apple Juice - P2P filesharing - http://www.applejuicenet.de
ares Ares - P2P filesharing - http://aresgalaxy.sf.net
armagetron Armagetron Advanced - open source Tron/snake based multiplayer game
battlefield1942 Battlefield 1942 - An EA game
battlefield2 Battlefield 2 - An EA game.
battlefield2142 Battlefield 2142 - An EA game.
bgp BGP - Border Gateway Protocol - RFC 1771
biff Biff - new mail notification
bittorrent Bittorrent - P2P filesharing / publishing tool - http://www.bittorrent.com
chikka Chikka - SMS service which can be used without phones - http://chikka.com
cimd Computer Interface to Message Distribution, an SMSC protocol by Nokia
ciscovpn Cisco VPN - VPN client software to a Cisco VPN server
citrix Citrix ICA - proprietary remote desktop application - http://citrix.com
counterstrike-source Counterstrike (using the new "Source" engine) - network game
cvs CVS - Concurrent Versions System
dayofdefeat-source Day of Defeat: Source - game (Half-Life 2 mod) - http://www.valvesoftware.com
dazhihui Dazhihui - stock analysis and trading; Chinese - http://www.gw.com.cn
dhcp DHCP - Dynamic Host Configuration Protocol - RFC 1541
directconnect Direct Connect - P2P filesharing - http://www.neo-modus.com
dns DNS - Domain Name System - RFC 1035
doom3 Doom 3 - computer game
edonkey eDonkey2000 - P2P filesharing - http://edonkey2000.com and others
fasttrack FastTrack - P2P filesharing (Kazaa, Morpheus, iMesh, Grokster, etc)
finger Finger - User information server - RFC 1288
freenet Freenet - Anonymous information retrieval - http://freenetproject.org
ftp FTP - File Transfer Protocol - RFC 959
gkrellm Gkrellm - a system monitor - http://gkrellm.net
gnucleuslan GnucleusLAN - LAN-only P2P filesharing
gnutella Gnutella - P2P filesharing
goboogy GoBoogy - a Korean P2P protocol
gopher Gopher - A precursor to HTTP - RFC 1436
guildwars Guild Wars - online game - http://guildwars.com
h323 H.323 - Voice over IP.
halflife2-deathmatch Half-Life 2 Deathmatch - popular computer game
hddtemp hddtemp - Hard drive temperature reporting
hotline Hotline - An old P2P filesharing protocol
http-rtsp RTSP tunneled within HTTP
http HTTP - HyperText Transfer Protocol - RFC 2616
ident Ident - Identification Protocol - RFC 1413
imap IMAP - Internet Message Access Protocol (A common e-mail protocol)
imesh iMesh - the native protocol of iMesh, a P2P application - http://imesh.com
ipp IP printing - a new standard for UNIX printing - RFC 2911
irc IRC - Internet Relay Chat - RFC 1459
jabber Jabber (XMPP) - open instant messenger protocol - RFC 3920 - http://jabber.org
kugoo KuGoo - a Chinese P2P program - http://www.kugoo.com
live365 live365 - An Internet radio site - http://live365.com
liveforspeed Live For Speed - A racing game.
lpd LPD - Line Printer Daemon Protocol (old-style UNIX printing) - RFC 1179
mohaa Medal of Honor Allied Assault - an Electronic Arts game
msn-filetransfer MSN (Micosoft Network) Messenger file transfers (MSNFTP and MSNSLP)
msnmessenger MSN Messenger - Microsoft Network chat client
mute MUTE - P2P filesharing - http://mute-net.sourceforge.net
napster Napster - P2P filesharing
nbns NBNS - NetBIOS name service
ncp NCP - Novell Core Protocol
netbios NetBIOS - Network Basic Input Output System
nntp NNTP - Network News Transfer Protocol - RFCs 977 and 2980
ntp (S)NTP - (Simple) Network Time Protocol - RFCs 1305 and 2030
openft OpenFT - P2P filesharing (implemented in giFT library)
pcanywhere pcAnywhere - Symantec remote access program
poco POCO and PP365 - Chinese P2P filesharing - http://pp365.com http://poco.cn
pop3 POP3 - Post Office Protocol version 3 (popular e-mail protocol) - RFC 1939
pplive PPLive - Chinese P2P streaming video - http://pplive.com
qq Tencent QQ Protocol - Chinese instant messenger protocol - http://www.qq.com
quake-halflife Half Life 1 engine games (HL 1, Quake 2/3/World, Counterstrike 1.6, etc.)
quake1 Quake 1 - A popular computer game.
radmin Famatech Remote Administrator - remote desktop for MS Windows
rdp RDP - Remote Desktop Protocol (used in Windows Terminal Services)
replaytv-ivs ReplayTV Internet Video Sharing - Digital Video Recorder - http://replaytv.com
rlogin rlogin - remote login - RFC 1282
rtp RTP - Real-time Transport Protocol - RFC 3550
rtsp RTSP - Real Time Streaming Protocol - http://www.rtsp.org - RFC 2326
runesofmagic Runes of Magic - game - http://www.runesofmagic.com
shoutcast Shoutcast and Icecast - streaming audio
sip SIP - Session Initiation Protocol - Internet telephony - RFC 3261, 3265, etc.
skypeout Skype to phone - UDP voice call (program to POTS phone) - http://skype.com
skypetoskype Skype to Skype - UDP voice call (program to program) - http://skype.com
smb Samba/SMB - Server Message Block - Microsoft Windows filesharing
smtp SMTP - Simple Mail Transfer Protocol - RFC 2821 (See also RFC 1869)
snmp SNMP - Simple Network Management Protocol - RFC 1157
socks SOCKS Version 5 - Firewall traversal protocol - RFC 1928
soribada Soribada - A Korean P2P filesharing program/protocol - http://www.soribada.com
soulseek Soulseek - P2P filesharing - http://slsknet.org
ssdp SSDP - Simple Service Discovery Protocol - easy discovery of network devices
ssh SSH - Secure SHell
ssl SSL and TLS - Secure Socket Layer / Transport Layer Security - RFC 2246
stun STUN - Simple Traversal of UDP Through NAT - RFC 3489
subspace Subspace - 2D asteroids-style space game - http://sscentral.com
subversion Subversion - a version control system
teamfortress2 Team Fortress 2 - network game - http://www.valvesoftware.com
teamspeak TeamSpeak - VoIP application - http://goteamspeak.com
telnet Telnet - Insecure remote login - RFC 854
tesla Tesla Advanced Communication - P2P filesharing (?)
tftp TFTP - Trivial File Transfer Protocol - used for bootstrapping - RFC 1350
thecircle The Circle - P2P application - http://thecircle.org.au
tonghuashun Tonghuashun - stock analysis and trading; Chinese - http://www.10jqka.com.cn
tor Tor - The Onion Router - used for anonymization - http://tor.eff.org
tsp TSP - Berkely UNIX Time Synchronization Protocol
uucp UUCP - Unix to Unix Copy
validcertssl Valid certificate SSL
ventrilo Ventrilo - VoIP - http://ventrilo.com
vnc VNC - Virtual Network Computing. Also known as RFB - Remote Frame Buffer
whois Whois - query/response system, usually used for domain name info - RFC 3912
worldofwarcraft World of Warcraft - popular network game - http://blizzard.com/
x11 X Windows Version 11 - Networked GUI system used in most Unices
xboxlive XBox Live - Console gaming
xunlei Xunlei - Chinese P2P filesharing - http://xunlei.com
yahoo Yahoo messenger - an instant messenger protocol - http://yahoo.com
zmaap ZMAAP - Zeroconf Multicast Address Allocation Protocol


Drugi, manje popularni, protokoli:

Ime Opis
audiogalaxy Audiogalaxy - (defunct) Peer to Peer filesharing
gtalk GTalk, a Jabber (XMPP) client
http-dap HTTP by Download Accelerator Plus - http://www.speedbit.com
http-freshdownload HTTP by Fresh Download - http://www.freshdevices.com
http-itunes HTTP - iTunes (Apple's music program)
httpaudio HTTP - Audio over HyperText Transfer Protocol (RFC 2616)
httpcachehit HTTP - Proxy Cache hit for HyperText Transfer Protocol (RFC 2616)
httpcachemiss HTTP - Proxy Cache miss for HyperText Transfer Protocol (RFC 2616)
httpvideo HTTP - Video over HyperText Transfer Protocol (RFC 2616)
pressplay pressplay - A legal music distribution site - http://pressplay.com
quicktime Quicktime HTTP
snmp-mon SNMP Monitoring - Simple Network Management Protocol (RFC1157)
snmp-trap SNMP Traps - Simple Network Management Protocol (RFC1157)


Praćenje prometa na mreži

Ako nas zanima što se događa na našoj mreži, koristimo gornju naredbu, ali bez -j opcije. Na primjer:

#iptables -t mangle -A POSTROUTING -m layer7 --l7proto imap

Statistika se u tom slučaju može pratiti pomoću naredbe

#iptables  -t mangle -L -v


Zaključak

Programski paket L7-filtar namijenjen je unixoidnim operacijskim sustavima, a svrha mu je klasifikacija paketa na temelju aplikacijskog sloja podataka. Instalacija L7-filtara nije komplicirana, a najviše vremena oduzima konfiguracija jezgre operacijskog sustava, jer trenutna inačica L7-filtra nije kompatibilna s novijim inačicama jezgre.

Osim jezgrene verzije, postoji i verzija korisničkog prostora s kojom se namjerava zamijeniti jezgrena s obzirom da je verzija koja radi u korisnikom prostoru puno sigurnija i fleksibilnija, te je puno lakša za instalaciju pošto ju dosta poznatih Linux distribucija mogu povući direktno iz repozitorija. Međutim verzija korisničkog prostora je još u ranom stupnju razvoja i još nije spremna za primarnu uporabu.

Osim iptablesa i drugi Linux vatrozidi mogu dobiti nadogradnju koja bi im omogućila filtriranje na 7. sloju, kao što je IpCop, a nekakve alternative su AppArmour, SELinux i Tomoyo, koji zapravo nisu vatrozidi u tradicionalnom smislu, ali rade kontrolu pristupa na aplikacijskoj razini, odnosno do nje, i već su unaprijed instalirani i aktivirani na gotovo svim poznatim Linux distribucijama.


Literatura

1. L7-filter Kernel Version HOWTO, Preuzeto 15.11.2012. http://l7-filter.sourceforge.net/HOWTO

2. L7-filter Supported Protocols, Preuzeto 15.11.2012. http://l7-filter.sourceforge.net/protocols

3. L7-filter Userspace Version HOWTO, , Preuzeto 16.11.2012. http://l7-filter.sourceforge.net/HOWTO-userspace

4. Linux Advanced Routing & Traffic Control, Preuzeto 15.11.2012. http://lartc.org/

5. Linux Firewalls Using iptables, Preuzeto 15.11.2012. http://www.linuxhomenetworking.com/wiki/index.php/Quick_HOWTO_:_Ch14_:_Linux_Firewalls_Using_iptables

6. SafariBooksOnline - Layer 7 filtering, Preuzeto 16.11.2012. http://my.safaribooksonline.com/book/-/9781904811657/layer-7-filtering/ch05#X2ludGVybmFsX0h0bWxWaWV3P3htbGlkPTk3ODE5MDQ4MTE2NTclMkZjaDA3bHZsMXNlYzAxJnF1ZXJ5PQ==

7. Službena stranica Centos.org – Firewalls, Preuzeto 15.11.2012. http://www.centos.org/docs/4/4.5/System_Administration_Guide/ch-fw.html

8. Zaštita od upada korištenjem L7- filtara, Preuzeto 15.11.2012. http://www.cert.hr/sites/default/files/CCERT-PUBDOC-2008-10-242.pdf

Osobni alati
Imenski prostori
Inačice
Radnje
Orijentacija
Traka s alatima