Napredne funkcije iptables-a kao vatrozida (sa L7 filtiranjem i custom zakrpama)
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
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.
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'.
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.
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
1.2) Preuzimanje L7-filtra korisničkog prostora
wget http://downloads.sourceforge.net/l7-filter/l7-filter-userspace-0.7.tar.gz
1.3) Preuzimanje definicija protokola L7-filtra
wget http://downloads.sourceforge.net/l7-filter/l7-protocols-2008-04-23.tar.gz
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
1.5) Preuzimanje Linux Jezgre 2.6.26
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.26.tar.bz2
Instalacija L7-filtra
tar -xvf linux-2.6.26.tar.bz2
tar -xvf netfilter-layer7-v2.19.tar.gz
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
2.2) Primjena zakrpa i instalacija iptables 1.4.0
tar -xvf iptables-1.4.0.tar.bz2
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
make install KERNEL_DIR=~/linux-2.6.26
Instalacija definicija protokola
tar -xvf l7-protocols-2008-04-23.tar.gz
cd l7-protocols-2008-04-23 mkdir /etc/l7-protocols cp protocols/* /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
Odabrati Networking options ---> opciju
Odabrati Network packet filtering framework (Netfilter) ---> opciju
Odabrati Core Netfilter Configuration ---> opciju
Odabrati "layer7" match support (NEW) opciju
Odabrati i označiti Layer 7 debugging output opciju
Izaći iz konfiguracijskog izbornika i prihvatiti promjene
Kompajliranje izvornog koda jezgre
make all
Instalacija modula
make modules_install
Instalacija Linux jezgre
make install
Provjeriti da li grub.conf file izgleda ovako:
Ponovno pokrenuti sustav, te nakon što se sustav ponovno podigne testirati L7-filtar s naredbom:
#iptables -m layer7 --help
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 |
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