České vysoké učení technické v Praze Fakulta elektrotechnická
Bakalářská práce
IP filtr a detektor útoků Petr Milanov
Vedoucí práce: doc. Ing. Jan Janeček, CSc.
Studijní program: Elektrotechnika a informatika strukturovaný bakalářský Obor: Výpočetní technika červen 2006
- ii -
Poděkování Mé poděkování patří panu doc. Ing. Janu Janečkovi, CSc. za jeho čas a rady, které mi po dobu řešení této práce věnoval.
- iii -
- iv -
Prohlášení Prohlašuji, že jsem svou bakalářskou práci vypracoval samostatně a použil jsem pouze podklady uvedené v přiloženém seznamu. Nemám závažný důvod proti užití tohoto školního díla ve smyslu §60 Zákona č. 121/2000 Sb., o právu autorském, o právech souvisejících s právem autorským a o změně některých zákonů (autorský zákon).
V Mnichově Hradišti dne 26. června 2006
…………………………………… Petr Milanov -v-
- vi -
Abstract The aim of this work is designing a new packet filtering and intrusion detection system. Firstly, there is a description of the function of firewall and its basics types. It is followed by the description of some methods, which are used for attacking the end-station connected to the network or the network itself. Furthermore, it is focused on some of the packet filtering systems that are already in use. Finally, it describes the proposal of a new system.
Abstrakt Cílem této práce je návrh systému filtrace síťového provozu a detekce útoků. Nejprve je popsána činnost firewallu a jeho základní typy. Následuje popis některých metod používaných k napadení koncové stanice zapojené v síti či sítě samotné. Dále jsou uvedeny příklady již existujících systémů síťové filtrace a jejich popis. Nakonec práce popisuje návrh systému nového.
- vii -
- viii -
Obsah 1. Úvod
1
Filtrování síťového provozu ................................................................................................... 2 Paketový filtr ...................................................................................................................... 3 Aplikační brána (application gateway) .............................................................................. 4 Stavový paketový filtr ........................................................................................................ 4 Stavový paketový filtr s kontrolou protokolů a IDS .......................................................... 6 2. Metody útoků na koncovou stanici či lokální síť
8
ARP spoofing.......................................................................................................................... 8 Denial-of-service attack ....................................................................................................... 10 Útoky, které využívají chyb v implementaci TCP/IP ...................................................... 10 Ping of Death................................................................................................................ 10 Teardrop attack............................................................................................................. 11 Útoky, které využívají nedokonalostí a nedostatků ve specifikaci TCP/IP ..................... 11 SYN attack ................................................................................................................... 11 Land attack ................................................................................................................... 12 Útoky hrubou silou........................................................................................................... 13 Smurf útok.................................................................................................................... 13 UDP Flood.................................................................................................................... 13 Distributed Denial-of-Service attack (DDoS) ...................................................................... 13 Distributed reflected denial of service ............................................................................. 14 3. Popis již existujících systémů používaných k filtraci síťového provozu
15
Netfilter a IP Tables ............................................................................................................. 15 IP Tables........................................................................................................................... 17 Pravidla používaná pro filtraci síťového provozu............................................................ 20 Statická (bezestavová) filtrace ..................................................................................... 20 Stavová (dynamická) filtrace ....................................................................................... 20 Použití IP Tables .............................................................................................................. 23 Tabulky a řetězce pravidel ............................................................................................... 23 Základní akce podporované systémem ............................................................................ 24 IP část pravidla ................................................................................................................. 24 Rozšíření pravidel (extensions)........................................................................................ 25 IPFW .................................................................................................................................... 29 Sada pravidel IPFW ......................................................................................................... 30 Syntaxe pravidel IPFW .................................................................................................... 31 Konfigurace IPFW ........................................................................................................... 31 IPF (ipfilter) ......................................................................................................................... 33 4. Návrh systému síťové filtrace
36
Systém odchytávání paketů................................................................................................... 36 Pravidla............................................................................................................................. 37 Základní způsob činnosti systému.................................................................................... 45 Formát paketu a příklad datové struktury vhodné pro jeho uložení................................. 46 Shrnutí činnosti systému .................................................................................................. 49 - ix -
5. Závěr
50
Seznam literatury a zdrojů
51
Příloha
53
A) Příkazy, specifikace pravidel a rozšíření iptables .................................................... 53 B) Obsah přiloženého CD .................................................................................................... 58
-x-
Seznam obrázků Obr. 1 – Umístění paketového filtru (stavový i bezestavový)
3
Obr. 2 – Umístění aplikačního filtru (příklad pro Telnet relaci)
4
Obr. 3 – Znázornění oblasti činnosti jednotlivých kategorií firewallů (vztaženo k TCP/IP modelu)
5
Obr. 4 – Znázornění oblasti činnosti jednotlivých kategorií firewallů (vztaženo k typickým parametrům)
6
Obr. 5 – Ukázka Ethernetového rámce (Ethernet type II)
8
Obr. 6 – Schéma odposlechu komunikace mezi dvěma stanicemi v síti Ethernet
9
Obr. 7 – Navázání TCP spojení (three-way handshake)
11
Obr. 8 – Zneužití procesu navázání TCP spojení při DoS typu SYN attack (SYN flood)
12
Obr. 9 – Ukázka DDoS útoku (ICMP flood)
14
Obr. 10 – Cesta paketu TCP/IP stackem
16
Obr. 11 – Cesta paketu filtrovacím kódem – implementace ipchains
18
Obr. 12 – Cesta paketu filtrovacím kódem – implementace iptables
18
Obr. 13 – Cesta paketu filtrovacím kódem – implementace iptables
19
Obr. 14 – Znázornění způsobu vyhodnocování pravidel při využití stavové filtrace
22
Obr. 15 – Rozhodovací strom, kterým prochází pakety při využití stavové filtrace
22
Obr. 16 – Průběh vyhodnocování pravidel (příklad obrany před SYN flood)
23
Obr. 17 – Struktura systému IPFW
30
Obr. 18 – Průchod paketu systémem IPF
34
Obr. 19 – Schéma systému odchytávání paketů (dvě kotvy pro zachytávání procházejících paketů – FILTER_IN a FILTER_OUT)
36
Obr. 20 – Umístění paketového filtru (firewallu) v systému
37
Obr. 21 – Příklad rozhodovacího stromu
38
Obr. 22 – Rozhodovacího stromu
41
Obr. 23 – Struktura paketu (obecně a konkrétněji pro Ethernet a protokoly TCP/IP)
46
Obr. 24 – IP hlavička
47
Obr. 25 – TCP hlavička
47
Obr. 26 – UDP hlavička
47
Obr. 27 – Ethernetová hlavička (Ethernet 2 DIX)
48
- xi -
- xii -
1. Úvod První myšlenky o vybudování počítačové sítě se objevily již na počátku šedesátých let dvacátého století v USA. Tehdy, v době studené války, se mělo jednat o síť propojující nejdůležitější vojenské, vládní a akademické počítače, schopnou přežít i jaderný útok. Tyto myšlenky začaly být postupně realizovány na konci šedesátých let. Na podzim roku 1969 byly zprovozněny první čtyři uzly sítě ARPANET (všechny čtyři uzly byly umístěny na amerických univerzitách). V roce 1971 se velikost sítě ARPANET rozrostla na 15 uzlů, v roce 1972 bylo propojeno již 37 počítačů. K prvnímu rozšíření sítě za hranice amerického kontinentu došlo roku 1973, kdy byla připojena University College of London a Royal Radar Establishment. V roce 1974 byla zveřejněna první specifikace protokolů TCP/IP, k nimž se oficiálně přešlo v roce 1983. Období mezi lety 1983 a 1992 přineslo prudký rozvoj Internetu (z přibližně tisíce počítačů v roce 1983 na více než milion počítačů v roce 1992). Na začátku tohoto období se přenosové kapacity páteřních sítí pohybovaly na rychlostech okolo 56 kbit/s, ke konci pak dosahovaly rychlostí kolem 50 Mbit/s. Začátek devadesátých let přinesl první hypertextový dokument, čímž byl položen základ dnes nejpoužívanější služby Internetu. Prudký nárůst obliby WWW se datuje k září 1993, kdy byla uvedena první funkční verze velmi populárního prohlížeče NCSA Mosaic. Vstup komerčních organizací roku 1993 se stal definitivním zlomovým momentem v rozšíření Internetu. Počet uživatelů Internetu každým rokem mnohonásobně rostl, až se Internet stal, prakticky po celém světě, každodenní součástí života. Celosvětový rozvoj Internetu však přináší i problémy. Jednak to jsou problémy související s vysokou zátěží sítě, jednak dále problémy bezpečnostní. Z původně malé „akademické sítě“ se totiž stala celosvětová síť, ke které mají přístup úplně všichni. Pod pojmem počítačová bezpečnost lze chápat různé věci. Dá se však říci, že počítač je bezpečný, jestliže se můžeme spolehnout na chování počítače samotného a chování softwaru na něm provozovaného. Například můžeme požadovat to, že data do počítače vložená zůstanou uchována beze změn po celou požadovanou dobu. Dále může být vyžadováno, že tato data nebudou čtena nepovolanými uživateli. Systému, který zajistí, že naše požadavky budou splněny, můžeme tzv. důvěřovat. K zajištění bezpečnosti počítačové sítě (popř. bezpečnosti koncové stanice) se může použít tzv. firewall. Firewall umožňuje kontrolovat a řídit síťový provoz (množství a typ) mezi -1-
interní (např. podnikovou) a externí (veřejnou) sítí, popřípadě provoz mezi koncovou stanicí a ostatními stanicemi zapojenými v síti (připojené ať už k vnitřní nebo k vnější síti). Nejčastějším požadavkem bezpečnosti je zamezení „síťového“ přístupu ke stanici nepovolaným osobám či regulace provozu určitých komunikačních protokolů.
Filtrování síťového provozu K filtrování síťového provozu se používá tzv. firewall (síťový filtr). Firewall může být realizován softwarově (firewall code) nebo hardwarově (firewall machine). Jeho funkcí je aplikování bezpečnostní politiky na každý požadavek jím procházející. Jinými slovy zajišťuje bezpečnost koncové stanice v síti či odděluje jednu síť od druhé pomocí uplatňování stanovených bezpečnostních pravidel. Nejvíce se používá k oddělení lokální počítačové sítě (LAN) od Internetu a k zajištění bezpečnosti terminálové stanice. Funkce firewallu (resp. systému pracujícího se síťovou komunikací) lze využít v následujících oblastech: • ochrana aplikací, služeb a stanic v rámci lokální sítě (LAN) před nevyžádaným provozem přicházejícím z veřejného Internetu • omezení či zakázání přístupu stanic lokální sítě ke službám veřejného Internetu • zajištění překladu síťových adres (NAT/NAPT) • vyvažování zátěže (řízení toku dat jednotlivých aplikací či uživatelů, tzv. traffic shaping) Bezpečnostní politika aplikovaná firewallem je stanovena sadou pravidel. Způsob vytváření pravidel (řazení pravidel do seznamu) je závislý na implicitním naložení s procházejícími pakety (požadavky). První možností je implicitní zakázaní všech požadavků, které neodpovídají žádnému stanovenému pravidlu. Firewally používající tuto metodu se označují anglickým termínem inclusive
firewalls. Druhý způsob naložení
s požadavky (anglicky exclusive firewalls) je opakem prvního, a tudíž implicitně povoluje všechny nespecifikované požadavky. Pokud je pro daný požadavek, ať již u první nebo druhé metody, nalezeno pravidlo bezpečností politiky, je s ním naloženo předepsaným způsobem. Pravidlo může předepisovat povolení nebo zahození takovéhoto požadavku (paketu) či nějakou úplně jinou akci (například překlad síťové adresy nebo pouhé logování). Implicitní zákaz jinak neurčených požadavků je jistě bezpečnější metodou, avšak v určitých případech je nemožné dopředu stanovit (a povolit) všechny služby používané v rámci sítě.
-2-
Bezpečnost terminálové stanice nebo sítě může být ještě zvýšena stavovým (dynamickým, stateful) aplikováním bezpečnostních pravidel. Pravidla mohou být přidávána, odebírána či upravována za chodu firewallu. Stavová paketová filtrace představuje již základní systém ochrany, kdy si firewall pamatuje stav spojení, například zda-li bylo spojení otevřeno z vnitřní sítě, a na základě tohoto umožní i opačně navázané spojení. Dále lze například stanovit limit na počet otevřených spojení, počet přenesených bytů a jiných dynamicky se měnících parametrů a na jejich základě upravovat bezpečnostní opatření. Podle způsobu činnosti se firewally dají rozdělit do několika kategorií. Jsou jimi paketové filtry, aplikační brány, stavové paketové filtry a stavové paketové filtry s kontrolou protokolů a IDS (Intrusion Detection Systém; systémy detekce útoků).
Paketový filtr Nejstarším a nejjednodušším typem je paketový filtr (také nazývaný packet filtering router), který funguje nejčastěji v rámci třetí a čtvrté vrstvy OSI modelu. Na základě nastavených pravidel povoluje nebo zakazuje průchod paketů mezi dvěma síťovými rozhraními či mezi síťovým rozhraním a rozhraním síťových protokolů v jádře operačního systému (nejčastěji TCP/IP protocol stack). Výhodou tohoto typu firewallu, která je dána způsobem činnosti filtru a jednoduchostí používaných pravidel, je vysoká rychlost zpracování. Naopak nevýhodou je nízká úroveň kontroly procházejících paketů (spojení) a nemožnost autentizace na úrovni jiné než jen podle parametrů směrovaného protokolu (IP, IPX, AppleTalk, …) či parametrů protokolů transportní vrstvy (TCP, UDP, SCTP). Umístění paketového filtru v systému znázorňuje obr. 1. Příkladem paketového filtru mohou být tzv. ACL (Access Control List), používané směrovači (routery) společnosti Cisco Systems.
Obr. 1 – Umístění paketového filtru (stavový i bezestavový)
-3-
Aplikační brána (application gateway) Dalším používaným typem firewallu je aplikační brána, které se říká také proxy firewall. Na rozdíl od paketových filtrů slouží aplikační brána k oddělení sítí, mezi které je postavena a funguje již i na vyšších vrstvách OSI modelu (na aplikační vrstvě). Veškerá komunikace přes bránu probíhá formou dvou spojení – první je mezi iniciátorem a aplikační bránou (proxy), druhé mezi bránou a cílem. Tímto „zastupováním“ iniciátora spojení bránou dochází automaticky k překladu síťových adres (NAT) – zdrojová adresa paketů vyslaných iniciátorem je nahrazena adresou brány a v opačném směru je tomu naopak, tj. adresa brány (v tomto případě se jedná o cílovou adresu) je nahrazena adresou iniciátora. Výhodou aplikační brány je možnost výrazně vyšší kontroly než při použití pouze paketového filtru. Na aplikační vrstvě totiž lze kontrolovat i obsah (data) procházející paketů (zejména u dobře známých komunikačních protokolů). Dále aplikační brána umožňuje autentizaci na úrovni uživatelů. Nevýhodou hlubší analýzy obsahu procházejících paketů je vyšší zpoždění (latence), ke kterému dochází při zpracování bránou. Dále v důsledku její činnosti dochází ke ztrátě přímého spojení mezi komunikujícími uzly (iniciátorem a skutečným cílem). Tato skutečnost může v některých situacích vést k nutnosti speciální úpravy používané síťové aplikace. Uživatelé přistupují ke službám prostřednictvím těchto proxy serverů transparentně, popř. pomocí upravených klientů. Představitelem tohoto typu firewallu je například Gauntlet společnosti TIS, později zakoupený společností NAI.
Obr. 2 – Umístění aplikačního filtru (příklad pro Telnet relaci)
Stavový paketový filtr Tento typ firewallu provádí kontrolu stejně jako základní (obyčejný) paketový filtr, navíc však přidává možnost stavové filtrace. Společně s definovanými (statickými) pravidly si udržuje informace o stavu spojení (např. směr navázání spojení, doba spojení, apod.). Dále si firewall dynamicky udržuje hodnoty nejrůznějších pomocných čítačů (například celkový počet navázaných spojení). Platnost pravidla může být ovlivněna i aktuálním časem či dnem v týdnu. Všechny tyto informace pak mohou být během rozhodovacího procesu použity. Výhodou udržovaní informací o stavu spojení je urychlení rychlosti zpracování. Pokud procházející paket patří k již známému spojení, může být o jeho osudu rozhodnuto ihned, tj.
-4-
bez nutnosti jeho testování proti seznamu pravidel. Další výhodou je snazší možnost tvorby pravidel. V pravidlech lze uvádět pouze směr navázání spojení a firewall bude samostatně schopen povolit i odpovědní pakety a u známých protokolů i otevření nového komunikačního kanálu (nového spojení). Příkladem využití této schopnosti může být tvorba pravidel pro protokol FTP (File Transfer Protocol). Protože se jedná o známý protokol, stačí nastavit pravidlo povolující klientovi připojení na server pomocí FTP. Firewall sám povolí navázání řídícího spojení z klienta na port 21 serveru, odpovědi serveru klientovi (na jeho použitý port) a při požadavku na přenos dat pak povolí i otevření a provoz nového spojení (z portu 20 serveru na klientův port). Velkým vylepšením je i možnost vytváření tzv. virtuálního stavu spojení pro bezestavové protokoly (jako např. UDP a ICMP). Stavové paketové filtry tedy poskytují poměrně vysokou úroveň bezpečnosti při zachování vysoké rychlosti jejich činnosti. Jejich konfigurace je ve srovnání s aplikačními branami mnohonásobně snazší. Nevýhodou je ale obecně nižší bezpečnost, než kterou poskytují aplikační brány. Do této kategorie firewallů patří například iptables (Linux) a ipfw (BSD). Obr. 3 a 4 znázorňují oblasti, ve kterých firewally jednotlivých kategorií pracují. První je vztažen zhruba k vrstvám TCP/IP síťového modelu, druhý mapuje činnost na typické parametry.
Obr. 3 – Znázornění oblasti činnosti jednotlivých kategorií firewallů (vztaženo k TCP/IP modelu)
-5-
Obr. 4 – Znázornění oblasti činnosti jednotlivých kategorií firewallů (vztaženo k typickým parametrům)
Stavový paketový filtr s kontrolou protokolů a IDS Moderní stavové paketové filtry jsou rozšířeny o další funkce, které zajišťují ještě vyšší míru bezpečnosti. Kromě informací a stavu spojení a schopnosti dynamického otevírání portů implementují tzv. Deep Inspection či Application Intelligence (jedná se o marketingové pojmy různých společností). Tyto firewally jsou schopny kontrolovat procházející spojení až na úroveň korektnosti procházejících dat známých protokolů i aplikací. Příkladem této činnosti může být kontrola spojení HTTP protokolu. Firewall při analýze paketů tohoto spojení například může zjistit, že se nejedná o požadavek na WWW server, ale dochází k tunelování jiného protokolu. Toto často využívají klienti P2P sítí (ICQ, gnutella, napster, apod.), které tímto „skrývají svou pravou identitu“ – například z důvodu nastavené FUP (Fair User Policy) nebo jejich úplného blokování. Dále se při analýze paketu může zjistit, že například data v hlavičce e-mailu nesplňují požadavky RFC apod. Na základě těchto poznatků se může provést příslušná akce, kterou je většinou blokace takovéhoto spojení (zahazování paketů náležících spojení). Dále se do těchto systémů integrují tzv. in-line IDS (Intrusion Detection Systems – systémy detekce útoků). Tyto systémy pracují podobně jako antiviry a pomocí databáze signatur a heuristické analýzy jsou schopny odhalit vzorce útoků i ve zdánlivě nesouvisejících pokusech o spojení, např. skenování adresního rozsahu, rozsahu portů, známé signatury útoků uvnitř povolených spojení apod. Výhodou firewallů této kategorie je zajištění vysoké úrovně bezpečnosti při relativně snadné konfiguraci. Na druhé straně hlubší analýza procházejících paketů způsobuje významné
-6-
zpomalení (zhruba o třetinu až polovinu) proti stavovým paketovým filtrům. Oproti aplikačním branám je ale rychlost činnosti stále poměrně vysoká. Další nevýhoda spočívá v komplexitě celého systému. Základním pravidlem bezpečnosti je totiž udržovat bezpečnostní systémy co nejjednodušší a nejmenší. Tyto typy firewallů integrují obrovské množství funkcionality a zvyšují tak pravděpodobnost, že v některé části jejich kódu bude zneužitelná chyba, která povede ke kompromitování celého systému. Představitelem této kategorie je například Check Point FireWall-1. Podobná funkcionalita je k dispozici ve formě experimentálních modulů také pro iptables v linuxovém jádře.
-7-
2. Metody útoků na koncovou stanici či lokální síť Mezi metody používané síťovými útočníky k napadení jedné stanice či celé počítačové sítě patří ARP spoofing a útoky odepření služby (denial-of-service, DoS). Následující odstavce vysvětlují a udávají příklady použití těchto dvou metod útoků.
ARP spoofing Jednou z metod používanou útočníky k převzetí kontroly nad síťovou komunikací nějaké stanice v lokální síti je ARP spoofing (zvaný též ARP poisoning). Tato metoda se využívá k útokům v sítích postavených na technologii Ethernet. V síti Ethernet se pro správnou adresaci zpráv komunikujících stanic používají tzv. MAC adresy (Media Access Control address). Tyto adresy mají 48 bitů a jsou umístěné na daném místě Ethernetové hlavičky (zapouzdření na linkové vrstvě). Příklad Ethernetového rámce ukazuje následující obrázek:
Obr. 5 – Ukázka Ethernetového rámce (Ethernet type II) (zdroj: http://en.wikipedia.org/wiki/Ethernet)
K adresaci zpráv komunikujících stanic v rámci sítě postavené na protokolech TCP/IP se používají IP adresy. Proto pro zajištění síťové komunikace mezi dvěma stanicemi používajícími síťové protokoly rodiny TCP/IP a sídlícími v síti založené na technologii Ethernet je nutné znát mapování IP adresy na MAC adresu. Toto mapování může být nastaveno administrátorem sítě staticky, tj. staticky se udržuje překladová tabulka IP adresy na MAC adresu, nebo se toto párování zjišťuje dynamicky pomocí protokolu ARP (Address Resolution Protocol). Staticky udržovaná překladová tabulka IP-MAC není náchylná k útokům založených na ARP spoofingu, ale její vytvoření a údržba je ve větších sítích velmi náročná. Takovéhoto řešení je navíc nereálné v sítích s měnícím se počtem stanic, kde se IP adresy přidělují dynamicky například pomocí DHCP protokolu.
-8-
ARP spoofing se nejčastěji používá k převzetí (odposlechu) síťové komunikace (man-in-themiddle attack). Dále může být použit k DoS (Denial of Service) útokům. Jeho podstata spočívá v úmyslném podvržení nesprávné MAC adresy k IP adrese při vytváření (údržbě) mapovací tabulky. Útok je založen na používání tzv. gratuitous ARP paketů („bezdůvodných“ ARP paketů). Jedná se o pakety, kterými stanice oznamuje vazbu mezi IP a MAC adresou (ARP Reply), aniž by obdržela požadavek na vyslání takové informace (ARP Request). Stanice většinou gratuitous ARP přijme a informace z něj si zapíše do ARP cache a používá je (mezi různými OS existují drobné rozdíly). Útočník může například pomocí gratuitous ARP podstrčit stanicím svou MAC adresu místo MAC adresy síťové brány. Stanice pak posílají data do jiných sítí přes počítač útočníka, který je odposlouchává. Počítač útočníka pak funguje jako „směrovač rámců“, kdy odposlouchávané rámce přeposílá bráně. Takto může být odposlechnuto například uživatelovo heslo. Schéma takovéto komunikace ukazuje následující obrázek:
Obr. 6 – Schéma odposlechu komunikace mezi dvěma stanicemi v síti Ethernet
Pokud by útočník dále nepřeposílal rámce skutečnému cíli, popř. by podvrhnul neexistující MAC adresu či MAC adresu jiné stanice, vedl by takovýto útok k odepření služby (DoS) legitimnímu uživateli napadené stanice. Obranu proti ARP spoofingu mohou poskytovat samotná zařízení zajišťující síťovou komunikaci – přepínače (switch). Jedná se o tzv. Dynamic ARP Inspection (DAI), kdy přepínač pro každý ARP paket zjišťuje, zda údaje v něm obsažené (IP a MAC adresa) odpovídají skutečnosti. Jinou možností je statické mapování IP na MAC adresu pro klíčové hosty (například bránu). Dále je možné zvýšit bezpečnost udržováním vlastní ARP cache firewallem. Záznam v této paměti IP-MAC parů by byl použit pro porovnání s údaji v příchozí ARP odpovědi. Případná neshoda těchto údajů by vyvolala provedení definované akce (upozornění na možné narušení bezpečnosti či zahození takovéto potenciálně podvržené ARP odpovědi).
-9-
Denial-of-service attack Denial-of-service (DoS; „odepření služby“) attack je typ útoku na počítačovou stanici připojenou do sítě či na síť samotnou, jehož cílem je zamezení používaní služeb takto napadené stanice či ztráta dostupnosti celé sítě řádnými uživateli. Tyto problémy jsou většinou způsobeny nadměrným přetěžováním napadené stanice (přetěžování výpočetních a paměťových zdrojů) nebo celé sítě (nadměrné zatěžování dostupné šířky pásma). DoS útoky mohou být spáchány více způsoby. Základní metody udává následující přehled: • vyplýtvání výpočetních zdrojů (čas CPU, diskový prostor, šířka přenosového pásma) • narušení konfigurace (například směrovacích informací) • vyřazení z provozu určité síťové komponenty V některých případech nemusí být primárním cílem DoS útoku zhavarování napadeného systému, ale DoS útok je použit hackerem pouze jako doplňková akce sloužící například k zametení stop, restartování vzdáleného počítače apod. Podle způsobu provedení lze DoS útoky obecně rozdělit do tří skupin: • útoky, využívající chyb v implementaci TCP/IP (Ping of Death, Teardrops Attacks) • útoky využívající nedokonalostí a nedostatků ve specifikaci TCP/IP (SYN attack, Land attack) • útoky hrubou silou (Smurf attack)
Útoky, které využívají chyb v implementaci TCP/IP Ping of Death Příkaz (utilita) ping se běžně používá pro zjištění toho, zda vzdálený systém pracuje. Hacker použije příkaz ping pro vytvoření IP paketu, který je větší než maximum povolené ve specifikaci IP protokolu (65 536 bajtů). Tento abnormálně velký paket je pak poslán do cizí sítě, čímž může způsobit havárii, zamrznutí nebo restart celého systému. Tento útok je poměrně starý a všichni výrobci operačních systémů poskytují opravy, záplaty, které si s tímto typem útoku poradí.
- 10 -
Teardrop attack Teardrop attack je novější typ útoku, který využívá slabosti při opětovném sestavování fragmentů IP paketu. Během své cesty po síti může být IP datagram rozdělen na menší části. Každá část vypadá jako původní IP paket až na to, že obsahuje položku offset, která udává pozici fragmentu vůči původnímu paketu (například udává, že daný fragment nese bajty 600 až 800 původního IP paketu). Teardrop program vytváří sérii IP fragmentů s překrývajícími se položkami offsetů. V důsledku toho pak během opětovného sestavování fragmentů na cílovém počítači některé systémy zhavarují, zamrznou nebo se restartují.
Útoky, které využívají nedokonalostí a nedostatků ve specifikaci TCP/IP SYN attack Tento útok využívá způsobu, kterým se pomocí protokolu TCP navazuje spojení. Proces navazování spojení se označuje jako tzv. "třífázový handshake" (three-way handshake). Aplikace, jež požaduje navázání spojení (inicializuje session) posílá příjemci synchronizační paket SYN. Příjemce posílá zpátky potvrzovací paket SYN-ACK, na který iniciátor odpovídá potvrzovacím paketem ACK. Po takovémto navázání komunikace jsou aplikace připraveny posílat a přijímat data. Uvedený postup navázání spojení a možnosti zneužití tohoto procesu znázorňují následující obrázky:
Obr. 7 – Navázání TCP spojení (three-way handshake) (zdroj: http://bob.marlboro.edu/~msie/2004/it/graphics/handshake.png)
- 11 -
Obr. 8 – Zneužití procesu navázání TCP spojení při DoS typu SYN attack (SYN flood) (zdroj: http://www.texascollaborative.org/SmithModule01/images/Syn-Flood.jpg)
Při SYN útoku zaplavuje hacker cílový systém sérií TCP SYN paketů. Každý paket způsobuje to, že cílový systém pošle odpověď SYN ACK. Zatímco cílový systém čeká na ACK, které následuje za SYN-ACK, zařadí všechny nevyřízené SYN-ACK odpovědi do fronty (tzv. backlog queue). Tato fronta má omezenou délku, obvykle docela malou. Jakmile je fronta plná, systém začne ignorovat všechny příchozí SYN požadavky. Pakety SYN-ACK jsou vyřazeny z fronty pouze tehdy, když přijde zpět ACK nebo když interní časovač (který je nastaven na relativně dlouhé intervaly) ukončí celý proces navazování komunikace. Celý útok je „vylepšen“ tím, že v záhlaví příchozích SYN paketů je uvedena špatná nebo neplatná IP adresa. Všechny odpovědi SYN-ACK jsou posílány na tuto adresu, což zaručuje, že odpověď na SYN-ACK nikdy zpátky nepřijde. Tak se vytvoří fronta objednávek, která je vždycky plná, což téměř znemožní legitimním TCP SYN požadavkům dostat se do systému.
Land attack Jednoduchý hybrid SYN útoku - hackeři zaplaví síť SYN pakety do sítě s předstíranou (zfalšovanou) zdrojovou IP adresou. Většina výrobců OS poskytuje opravy řešící tento problém. Jiným způsobem, jak ochránit síť před Land útokem je mít firewall, který odfiltruje všechny příchozí pakety s neplatnými IP adresami. Například pakety, které přicházejí do systému se zdrojovou IP adresou, která je identifikuje jako generované z interního systému, jsou zřejmě špatné. Filtrování takovýchto paketů výrazně neutralizuje vystavení sítě tomuto typu útoku.
- 12 -
Útoky hrubou silou Smurf útok Jedná se o útok hrubou silou zaměřený na vlastnost v IP specifikaci, která je známá jako všeobecné adresování (direct broadcast addressing). Hacker zaplaví router speciálními pakety tzv. pingy. Poněvadž cílové IP adresy každého paketu jsou broadcast adresou této sítě, router bude šířit tyto pingy všem počítačům sítě. Pokud je k síti připojeno mnoho stanic, dojde k velkému nárůstu zatížení sítě. Celý útok se dá znásobit ještě tím, že hacker zfalšuje zdrojovou IP adresu pingů a odpovědi na tyto pingy mohou zahltit síť, odkud pochází předstíraná zdrojová adresa. Napadená síť se pak stane pouze prostředníkem útoku. Obrana proti tomuto druhu útoku spočívá v tom, že se buď vypne (zakáže) broadcast adresování (za předpokladu, že to router dovoluje), nebo se mohou filtrovat pingy pomocí firewallu (či Access Control Listu) a tím omezit provoz ICMP echo paketů na malé procento z celkového provozu sítě.
UDP Flood Při tomto typu útoku hacker spustí službu, která generuje sérii znaků pro každý přijatý paket. Dále využije UDP echo službu jiného systému, která také odpovídá na jakýkoliv přijatý znak a která vygenerované pakety přeposílá. Výsledkem je nonstop proud nesmyslných dat mezi dvěma systémy. Zabránit této UDP záplavě lze buď zakázáním všech UDP služeb na každém uzlu sítě nebo aktivováním firewallu, který odfiltruje všechny příchozí požadavky UDP služeb. Poněvadž UDP služby jsou navrženy pro interní diagnostikování, měl by stačit zákaz přístupu UDP služeb z vnějších sítí (Internetu). Úplný zákaz veškerého UDP provozu by mohl vést k odmítnutí i některých legitimních aplikací (například RealAudio), které používají UDP jako svůj transportní mechanismus.
Distributed Denial-of-Service attack (DDoS) DDoD označuje distribuovanou variantu útoku odepření služby (DoS). Útok není veden pouze z jednoho počítače, jako u klasické varianty DoS, ale současně z více počítačů. Praktická realizace takovéhoto útoku nespočívá v tom, že by najednou útočilo více hackerů (každý ze své stanice). Ostatní „útočící počítače“ jsou pod kontrolou (vzdáleně) jedné centrály, která útok vede. Takto ovládané počítače jsou označovány jako tzv. zoombie, protože na nich běží speciální programy (trojské koně), které umožňují jejich vzdálené ovládání. Tyto speciální programy běží na pozadí a bez vědomí řádného uživatele. Dá se tedy říci, že obětí tohoto útoku je nejen hromadně napadený systém, ale i předtím napadené a k útoku „zneužité“ systémy.
- 13 -
Ukázku jednoho z DDoS útoků ilustruje následující obrázek:
Obr. 9 – Ukázka DDoS útoku (ICMP flood) (zdroj: http://www.microsoft.com/mspress/books/sampchap/6429/0-7356-1877-4.gif)
Distributed reflected denial of service Distributed reflected denial of service je typem DDoS útoků, který spočívá v odesílání falešných (upravených) požadavků určitého typu. Odpovědi na tyto požadavky následně způsobí zaplavení napadené sítě obrovským množstvím paketů. Příkladem může být útok, který spočívá v odeslání velkého množství DNS požadavků se zfalšovanou zdrojovou IP adresou více DNS serverům. Následné odpovědi jsou DNS servery posílány na podvrženou zdrojovou IP adresu a způsobí tak zahlcení napadené sítě. Toto zahlcení může způsobit kolaps napadeného systému (zahlcení sítě – tj. vyčerpání dostupné šířky pásma, pád služby poskytované serverem či restartování tohoto serveru) a s tím spojenou nemožnost poskytovaní služeb legitimním uživatelům.
- 14 -
3. Popis již existujících systémů používaných k filtraci síťového provozu Různé operační systémy poskytují odlišné nástroje pro filtraci síťového provozu, překlad síťových adres (NAT) a manipulaci s pakety. OS Linux od verze jádra 2.4 poskytuje ve svém jádře subsystém netfilter/iptables. Systémy založené na BSD používají většinou ipfilter (ipf), který může být součástí jádra nebo zaváděn jako modul. Systém FreeBSD poskytuje kromě ipf také ipfirewall (ipfw), který je, podobně jako ipf, součástí jádra nebo může být zaváděn jako modul.
Netfilter a IP Tables S příchodem kernelu 2.4 došlo k uvedení nového nástroje pro správu filtrování paketů – programu iptables. Tento program nahradil dřívější nástroj ipchains. Program ipchains sice velmi zlepšil správu a efektivitu filtrování paketů, ale způsob jeho činnosti byl zbytečně složitý (zejména při překladu síťových adres – NAT) a jeho případné rozšíření o nové funkce bylo rovněž náročné. Funkce jako filtrování paketů, maškaráda a transparentní proxy byla nejen spravována jedním nástrojem, ale byla rovněž spojena i na úrovni implementace, což zvyšovalo možnost zavedení nechtěných chyb do filtrovacích pravidel při současném použití filtrování paketů a maškarády. Oddělení těchto funkcí v jádrech 2.4 a vyšších má za následek jednodušší používání nástroje iptables, vytvářená pravidla jsou průhlednější a méně náchylná k zavlečení nechtěných chyb při konfiguraci firewallu. Významnou změnou je rovněž možnost snadného rozšíření všech těchto nástrojů bez nutnosti následné rekompilace. Toto je zajištěno použitím sdílených knihoven. NAT, maškaráda, port forwarding a reverse NAT (load sharing) jsou spravovány pomocí nástroje ipnatctl. Oproti ipchains doznala architektura značných změn. Jejím základem je balík netfilter framework, který je součástí jádra. Pro cestu paketu TCP/IP stackem je definováno celkem pět bodů (kotviček, anglicky hook), ve kterých se mohou moduly jádra přihlásit k jeho odběru a stanovit, zda paket postoupí dál či zda bude zlikvidován. V každém bodě může být přihlášeno libovolné množství modulů a pakety, které nebyly dosud zlikvidovány, jsou předány postupně všem. Cestu paketu znázorňuje následující obrázek:
- 15 -
Obr. 10 – Cesta paketu TCP/IP stackem (zdroj: www.linux.cz)
Celý systém filtrace paketů (netfilter framework) v Linuxu 2.4.x a 2.6.x vytváří převážně: netfilter, ip_tables, connection tracking (ip_conntrack, nf_conntrack) a subsystém zajišťující překlad síťových adres (NAT). Hlavní znaky systému filtrace paketů: • bezestavové (statické, stateless) filtrování paketů (IPv4 a IPv6) • stavové (dynamické, stateful) filtrování paketů (IPv4) • všechny typy překladu síťových adres (NAT/NAPT) • flexibilní a rozšířitelný návrh systému • mnohovrstevné API • velké množství „pluginů" a rozšiřujících modulů Hlavní funkce systému filtrace paketů: • provoz internetových firewallů založených na statické a dynamické filtraci • použití NAT a maškarády za účelem sdílení připojení k internetu při nedostatečném počtu veřejných IP adres
- 16 -
• použití NAT k implementaci transparentní proxy • podpora systémů tc a iproute2 pro vytvoření důmyslné QoS • umožnění další manipulace s pakety (změna TOS/DSCP/ECN bitů v hlavičce IP rámce, atd.)
IP Tables iptables je uživatelský konzolový program používaný ke konfiguraci filtrovacích pravidel protokolu IPv4 v operačním systému Linux 2.4.x a 2.6.x. Je rovněž používán pro konfiguraci překladu síťových adres (NAT). Součástí balíku je i modul ip6tables zajišťující podporu protokolu IPv6. Hlavní znaky iptables: • uchování seznamu pravidel pro filtraci paketů • umožnění přidání, odebrání a změny pravidel • údržba čítačů přidružených k dílčím pravidlům Vlastní filtr paketů je implementován sadou modulů jádra, které je nutno zavést před vlastním vytvářením filtrovacích pravidel. Výhodou rozčlenění na více modulů různého druhu je možnost zavést pouze ty, které jsou potřebné. Dále je možné samotné iptables pomocí nových modulů rozšířit o nové funkce. Jako moduly lze přidávat cíle (oproti ipchains zde nejsou pouze základní cíle DENY, REJECT, ACCEPT a uživatelem vytvořené řetězce, ale lze přidávat libovolné další) a filtrovací pravidla. Aby tyto moduly byly spravovatelné pomocí nástroje iptables, je i tento nástroj navržen jako rozšiřitelný, a to pomocí dynamických knihoven. Každý netriviální modul, který vyžaduje předat nějaké parametry, má svůj doplněk v dynamické knihovně pro iptables. Vše je navrženo tak, aby implementace byla co nejjednodušší, a vše je kvalitně zdokumentováno. Cesta paketu filtrovacím kódem se liší od ipchains a poskytuje větší nezávislost na interfejsech. Klíčový rozdíl spočívá v odstranění funkce maškarády z jádra kódu a změně v umístění vstupního a výstupního řetězce.
- 17 -
V předchozí implementaci (ipchains) byl vstupní řetězec (input chain) shodný pro všechny pakety – bez ohledu na to, zda se jednalo o paket určený pro lokálního hosta či o paket směrovaný dále ke svému cíli. Podobně, výstupní řetězec (output chain) byl stejný pro všechny odchozí datagramy, tj. bez ohledu na to, zda byly generovány lokálním hostem či tímto hostem pouze dále směrovány. Cestu paketu filtrovacím kódem v této implementaci je možné znázornit následujícím obrázkem:
Obr. 11 – Cesta paketu filtrovacím kódem – implementace ipchains (zdroj: www.faqs.org)
V nové implementaci pomocí iptables je vstupní řetězec (input chain) určen pouze pro pakety cílené pro lokální stanici a „forwardovací“ řetězec (forward chain) je určen pouze pro pakety směrované ke svému cíli (k jiné stanici). Výstupní řetězec (output chain) je určen pouze pro pakety generované lokálním hostem (stanicí). Cestu paketu filtrovacím kódem lze opět znázornit pomocí následujících dvou obrázků:
Obr. 12 – Cesta paketu filtrovacím kódem – implementace iptables (zdroj: www.faqs.org)
- 18 -
Obr. 13 – Cesta paketu filtrovacím kódem – implementace iptables (zdroj: www.linux.cz)
Řetězec INPUT odpovídá bodu NF_IP_LOCAL_IN z obrázku 10 (cesta paketu TCP/IP stackem),
řetězec
FORWARD
bodu
NF_IP_FORWARD
a
řetězec
OUTPUT
bodu
NF_IP_LOCAL_OUT. Výhodou oproti předchozím implementacím je, že paket procházející řetězcem FORWARD, ve kterém se v běžných případech bude odehrávat většina filtrování, ví, jak o vstupním, tak o výstupním rozhraní, neboť již bylo rozhodnuto o jeho směrování. iptables umožňují při konstrukci filtrovacího slova zohlednit stav socketu, ke kterému procházející paket patří – tzv. stavové filtrování. Rozlišují se následující čtyři stavy: • NEW – jde o paket, který vytváří nový socket • ESTABLISHED – paket přiřaditelný k nějakému již probíhajícímu spojení • RELATED – paket, který se vztahuje k nějakému probíhajícímu spojení, ale není jeho součástí (např. ICMP zpráva o chybě) • INVALID – paket nepřiřaditelný k žádnému spojení, tyto pakety by měly být likvidovány iptables rovněž umožňují rozlišovat jednotlivé flagy v TCP hlavičce a podle nich pakety filtrovat. Dále lze filtrovat na základě TCP options nebo MAC adresy. Pomocí pravidla limit, které lze použít například k omezení logování v některém řetězci, lze nastavit maximální počet shod za sekundu a omezit tak přeplňování logu v řetězci, u kterého se očekává velký počet shod.
- 19 -
Pravidla používaná pro filtraci síťového provozu Statická (bezestavová) filtrace Základním typem filtrace síťového provozu je statická filtrace. Řízení síťového provozu se děje na základě uživatelem specifikovaných pravidel. Každé pravidlo definuje hodnoty parametrů hlaviček podporovaných síťových protokolů (typicky protokol, zdrojovou a cílovou IP adresu, zdrojový a cílový port) a akci, která má být v případě aplikování pravidla provedena. Mezi nejčastější akce patří: • povolení nebo zahození (zákaz) paketu • překlad síťových adres (NAT popř. NAPT) • logování Obecně se však může provádět i jakákoliv jiná akce. Vyskytnout se může i pravidlo s prázdnou (nedefinovanou) akcí. Toto má význam například tehdy, potřebujeme-li zjišťovat počet paketů (resp. počet bytů) vyhovujících danému pravidlu. Ke každému pravidlu je totiž přidružen čítač (uplatnění pravidla, celkového počtu bytů paketů vyhovujících danému pravidlu), který je při použití pravidla automaticky navyšován. Tímto způsobem můžeme například vytvořit statistiku provozu jednotlivých protokolů (TCP, UDP, SCTP, …).
Stavová (dynamická) filtrace Více možností filtrování (řízení) síťového provozu přináší stavová filtrace. Jak již z názvu vyplývá, rozhodnutí o aplikování daného pravidla na paket závisí nejen na hodnotách parametrů záhlaví, ale i na určitém (aktuálním) stavu. Tímto stavem může být například počet již prošlých paketů daného typu, aktuální zátěž stanice pakety, počet otevřených spojení, aktuální čas a další. Samozřejmě se na rozhodnutí o použití pravidla může podílet více faktorů najednou. Využitím stavové filtrace se můžou pravidla (bezpečnostní politika) měnit za provozu a chování firewallu se může přizpůsobovat aktuální situaci. Příkladem použití může být vytvoření nového pravidla zakazující určitý datový provoz při překročení mezní hodnoty toku. Toto pravidlo může mít pouze dočasnou platnost a po opadnutí síťového provozu (uvolnění dostupné šířky pásma) je zrušeno. Stavové filtrace se dá využít k obraně před možnými DoS útoky. Například při SYN flood útoku je možné po překročení určité hodnoty současně otevřených spojení zakázat jakýkoliv další pokus o navázání TCP spojení (otevření TCP session). Přitom tato hodnota může být
- 20 -
sledována jak absolutně (maximální počet současných TCP spojení), tak i relativně (počet nově otevřených TCP spojení za určitý časový interval). Pravidla definující chování systému jsou sdružena do seznamu (tabulky), přičemž pořadí jednotlivých záznamů je významné. Při definování politiky se často definují pravidla pro určitou skupinu paketů s nějakou společnou vlastností (například se zdrojovou adresou patřící do stejné sítě). Pokud má toto pravidlo platit pro všechny takovéto pakety kromě například jedné výjimky, přidá se do seznamu před „pravidlo skupiny“ pravidlo nové, definující jiné naložení s tímto „výjimečným“ paketem. Vzhledem k sekvenčnímu vyhodnocování pravidel by opačné pořadí nevedlo k očekávanému výsledku. Příklad na sekvenční zpracování pravidel: iptables -A INPUT -s 192.168.0.1 -j ACCEPT iptables -A INPUT -s 192.168.0.0/24 -j DROP
povolí příchozí TCP pakety se zdrojovou adresou 192.168.0.1 zakáže ostatní příchozí TCP pakety se zdrojovou adresou ze sítě 192.168.0.0/24 iptables -A INPUT -s 192.168.0.0/24 -j DROP iptables -A INPUT -s 192.168.0.1 -j ACCEPT
zakáže všechny příchozí TCP pakety se zdrojovou adresou ze sítě 192.168.0.0/24 ALE povolení stanice 192.168.0.1 se již neprojeví
Sekvenční průchod pravidly může být ovlivněn (změněn) použitím stavové filtrace. Použití pravidla se může například vztahovat pouze k určitému časovému intervalu během dne. Jiný případ může určovat uplatnění pravidla až při překročení sledované hodnoty (např. překročení mezní hodnoty počtu prošlých paketů s danou zdrojovou adresou). Nasazení stavové filtrace tak může na základě aktuálního stavu měnit průchod pravidly. Sekvenční vyhodnocování pravidel může být samozřejmě ovlivněno i „statickými parametry“. Podmínkovou větvení je třeba typ protokolu (TCP/UPD) nebo určitý rozsah portů. Pravidla pak vytvářejí jakousi stromovou strukturu. Příklad využití stavové filtrace: iptables -A INPUT -m time --timestart 8:00 --timestop 18:00 --days Mon,Tue,Wed,Thu,Fri -j ACCEPT iptables -P INPUT DROP
povolení paketů v pracovní dny od 08:00 do 18:00 (implicitně se pakety zahazují)
- 21 -
Tímto vlastně vytvoříme jeden uzel v „rozhodovacím stromě“ pravidel.
Obr. 14 – Znázornění způsobu vyhodnocování pravidel při využití stavové filtrace
V obecném případě však akcí nemusí být pouze povolení (ACCEPT) či zákaz (DROP), ale i uživatelem definovaný řetězec (chain). V tomto novém řetězci může být paket, ještě před provedením závěrečné akce, podroben dalšímu zkoumání. Výsledkem může samozřejmě být i „odeslání“ paketu do dalšího řetězce. Tímto může vzniknout jakýsi rozhodovací strom, kterým paket při vyhodnocování pravidel prochází.
Obr. 15 – Rozhodovací strom, kterým prochází pakety při využití stavové filtrace
Stavovou filtraci lze také využít k ochraně před DoS útoky. Můžeme vytvořit pravidlo, které během určitého časového intervalu povolí pouze specifikovaný počet nějakých paketů. Tímto je například možné omezit průchodnost TCP paketů otevírajících nové spojení (majících nastaven příznak SYN; ochrana před SYN flood) nebo třeba tok ICMP protokolu. Příklad nastavení pravidel pro ochranu před SYN flood (regulaci TCP SYN provozu): iptables -N syn-flood iptables -A syn-flood -m limit --limit 20/s --limit-burst 5 -j RETURN iptables -A syn-flood -j DROP
vytvoření nového řetězce syn-flood v řetězci syn-flood je stanoveno pravidlo propouštějící pouze 4 pakety za sekundu; akce pravidla stanovuje pouze návrat z tohoto řetězce (paket je pak dále testován na shodu s pravidly „z hierarchicky nadřazeného“ řetězce) ostatní pakety jsou zahozeny - 22 -
iptables -A INPUT -p tcp --syn -j syn-flood
do filtrovacího řetězce INPUT pak přidáme pravidlo, které zajistí „shodu“ s TCP pakety s nastaveným příznakem SYN a jehož akcí je „odeslání“ paketu do řetězce syn-flood k dalšímu zpracování Průběh vyhodnocování pravidel ukazuje následující obrázek:
Obr. 16 – Průběh vyhodnocování pravidel (příklad obrany před SYN flood)
Použití IP Tables
Předtím než je možné použít příkaz iptables, musí být do jádra zaveden modul netfilter. Nejjednodušší je použít příkaz modprobe: modprobe ip_tables Obecný formát příkazu iptables: iptables command rule-specification extensions
Tabulky a řetězce pravidel Systém iptables sdružuje pravidla do řetězců (chains) a řetězce do tabulek (tables). Definuje tři základní tabulky – FILTER, NAT a MANGLE. Tabulka FILTER uchováná řetězce s pravidly definujícími bezpečnostní politiku. Tabulka NAT je určena pro řetězce s pravidly překladu síťových adres (SNAT, DNAT, maškaráda, forwardování portů). Vstupní řetězec (INPUT) a „forwardovací“ řetězec (FORWARD) jsou přístupné pro tabulku FILTER, řetězce
- 23 -
PREROUTING a POSTROUTING jsou přístupné pro tabulku NAT, řetězec OUTPUT je přístupný pro obě tabulky. Tabulka MANGLE uchovává řetězce pravidel sloužících pro úpravy hlavičky paketů, manipulace s TTL, ToS, příznaků (flags), apod.
Základní akce podporované systémem -A, --append
- Přidání nového pravidla na konec řetězce
-D, --delete
- Smaže pravidlo (parametrem je buď celý tvar pravidla nebo jeho číslo)
-R, --replace
- Nahradí číslo pravidla jiným pravidlem
-I, --insert
- Vložení nového pravidla na začátek řetězce
-L, --list
- Vypsání všech pravidel v řetězci. Pokud není zadán řetězec, vypíšou se všechny řetězce + jejich pravidla
-F, --flush
- Vyprázdní všechna pravidla v řetězci
-N, --new-chain
- Vytvoří nový řetěz pravidel
-X, --delete-chain - Smaže vytvořený řetěz pravidel (výchozí smazat nejde) -P, --policy
- Výchozí politika řetězce
-E, --rename-chain - Přejmenování vytvořeného řetězce pravidel
IP část pravidla Pomocí přepínače –p (--protocol) se definuje protokol, pro který pravidlo platí. Pokud se neuvede žádný, použije se implicitně IP (tj. pravidlo platí vlastně pro všechny protokoly z rodiny TCP/IP). Zdrojová IP adresa se určí pomocí přepínače –s (--src, --source), cílová pomocí –d (-dst, -destination). Maska může být uvedena hned za adresou – oddělovačem je / (lomítko). Formát masky může být tradiční (např. 255.255.255.0) nebo novější prefixový (např. /24). Pokud je za přepínačem ! (vykřičník), je jeho význam negován. Akce, která se provede pokud paket vyhoví pravidlu, je určena pomocí přepínače –j. Základními akcemi jsou ACCEPT (povolení paketu) a DROP (zahození paketu). Akce však může být i jiná – například „odeslání“ paketu do jiného řetězce za účelem dalšího zpracování. Dále je vhodné mít možnost specifikovat rozhraní (interface), na kterém byl paket přijat resp. na kterém rozhraní bude odeslán. Toho je dosaženo pomocí přepínače –i resp. –o.
- 24 -
Příklad dostupných voleb: -p -s -d -j -i -o
[!] protocol [!] address[/mask] [!] address[/mask] target [!] interface-name [!] interface-name
Příklad pravidel: iptables -A INPUT -s 192.168.0.1 -j ACCEPT
povolí příchozí pakety se zdrojovou adresou 192.168.0.1 iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT
povolí příchozí pakety se zdrojovou adresou náležící síti 192.168.1.0/24 iptables -A INPUT -s ! 192.168.0.1 -j ACCEPT
povolí příchozí pakety se zdrojovou adresou jinou než 192.168.0.1 iptables -A INPUT -i eth0 -s ! 192.168.0.1 -j DROP
zakáže příchozí pakety z rozhraní eth0, které mají zdrojovou adresou jinou než 192.168.0.1
Rozšíření pravidel (extensions) Pro protokoly transportní vrstvy je velmi žádoucí mít možnost určit porty (zdrojový a cílový, popř. rozsahy portů) a další parametry hlavičky (příznaky – jako např. SYN). I pro ostatní protokoly je vhodné mít možnost specifikace určitých parametrů hlavičky (pro ICMP protokol např. typ zprávy). Každý protokol může mít své vlastní rozšíření – výběr se provádí pomocí přepínače –m. Rozšíření daného protokolu jsou dostupná i po výběru daného protokolu přepínačem –p. Například rozšíření protokolu TCP jsou dostupná buď pomocí -m tcp nebo -p tcp. Rozšíření pro TCP (-m tcp nebo -p tcp): 1) specifikace portů -–sport [!] [port[:port]]
– určení zdrojového portu (popř. rozsahu)
-–dport [!] [port[:port]]
– určení cílového portu (popř. rozsahu)
2) příznaky (flags) -–tcp-flags [!] mask comp
• mask – seznam symbolických jmen příznaků (SYN, ACK, FIN, RST, …), které mají být zkoumány při testování shody s pravidlem; oddělovačem jednotlivých jmen je čárka
- 25 -
• comp – seznam symbolických jmen příznaků, které musí mít zkoumaný paket nastaveny, aby se shodoval s pravidlem; oddělovačem jednotlivých jmen je čárka [!] -–syn
• zkratka pro jednu z variant --tcp-flags • jedná se o pakety otevírající TCP spojení Pozn. Pro význam jednotlivých příznaků viz. RFC-793.
Rozšíření pro UDP (-m udp nebo -p udp): Toto rozšíření umožňuje specifikovat porty (popř. jejich rozsahy). Syntaxe a význam je stejný jako pro protokol TCP. -–sport [!] [port[:port]] – určení zdrojového portu (popř. rozsahu) -–dport [!] [port[:port]] – určení cílového portu (popř. rozsahu)
Rozšíření pro ICMP (-m icmp nebo -p icmp): --icmp-type [!] typename
• učení typu ICMP zprávy; dostupné typy jsou echo-request, echoreply, source-quench, time-exceeded, destination-unreachable, network-unreachable, host-unreachable, protocol-unreachable, a port-unreachable • důležité jsou zejména echo-request a echo-reply – ping
V některých situacích může být vhodné určovat (kontrolovat) i parametry linkové vrstvy. Nejčastěji používanou technologií na této vrstvě je Ethernet, proto je poskytováno rozšíření „MAC“ umožňující přístup k adresám Ethernetu (tzv. MAC adresám). Rozšíření pro Ethernet (-m mac): --mac-source [!] address
•
umožňuje určit zdrojovou MAC adresu (Ethernetovou adresu); využití má význam pouze pro pravidla řetězce INPUT nebo FORWARD, protože námi budou odeslány všechny pakety, které projdou řetězcem OUTPUT
- 26 -
Příklady použití rozšíření: iptables -A INPUT -p tcp --dport 50:55 -j ACCEPT
povolí TCP pakety s hodnotami cílového portu v intervalu <50; 55> iptables -A INPUT -p tcp --syn -j DROP
zakáže TCP pakety otevírající spojení iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
zakáže ICMP echo request (ping)
Další příklady použití iptables: •
filtrace (převzato z www.faqs.org):
Přepokládejme síť s IP adresou 172.16.1.0 a s maskou 255.255.255.0 (/24). Chceme povolit uživatelům naší sítě přístup k WWW serverům na Internetu, ale všechen ostatní provoz zakázat. Možné řešení pomocí iptables: # # # #
modprobe ip_tables iptables -F FORWARD iptables -P FORWARD DROP iptables -A FORWARD -m tcp -p tcp -s 0/0 --sport 80 -d 172.16.1.0/24 / --syn -j DROP # iptables -A FORWARD -m tcp -p tcp -s 172.16.1.0/24 --sport / 80 -d 0/0 -j ACCEPT # iptables -A FORWARD -m tcp -p tcp -d 172.16.1.0/24 --dport 80 -s 0/0 -j / ACCEPT
Poznámky k příkladu: Prvním příkazem zavedeme modul netfilter. Druhým příkazem (-F) vymažeme všechna dosavadní pravidla pro řetězec FORWARD. Třetí příkaz (-P) stanoví „defaultní zacházení s pakety“. Čtvrtý příkaz: -A – připojení pravidla na konec uvedeného řetězce (zde FORWARD) -m – specifikace jména rozšíření (tcp) -p – určení protokolu (tcp) -s – zdrojová adresa/prefix (0/0 - jakákoli) -sport – zdrojový port (80) -d – cílová adresa/prefix (172.16.1.0/24) --syn – specifikace příznaku -j – určení akce, která se má provést v případě shody s pravidlem (zde DROP) Pátý a šestý příkaz – obdobný čtvrtému -dport – cílový port
- 27 -
•
NAT (převzato z www.faqs.org):
Předpokládejme malou domácí síť LAN, kde všechny stanice mají sdílet jedno vytáčené připojení k Internetu. Možné řešení je použití maškarády: # iptables -t nat -P POSTROUTING DROP # iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
Poznámky k příkladu: -t – specifikace použití tabulky nat (bez tohoto určení se předpokládá použití tabulky filter) -o – určení interface, na který má být datagram poslán Kdykoli bude chtít nějaká domácí stanice využít služeb jiné stanice na Internetu, pak budou její datagramy automaticky upraveny funkcí maškarády (NAT). První pravidlo zabraňuje směrování jakýchkoli jiných datagramů a tím zajišťuje trochu více bezpečnosti.
- 28 -
FreeBSD Operační systém FreeBSD poskytuje tři systémy paketového filtrování – IPFILTER (zvaný také IPF), IPFIREWALL (IPFW) a OpenBSD Packet Filter (PF) . Dále nabízí dva balíčky pro vyvažování zátěže (traffic shaping) – altq, dummynet. Dummynet je tradičně využíván společně s IPFW, Altq s IPF nebo PF. Tyto tři systémy se od sebe odlišují rozdílným způsobem činnosti a jiným tvarem zápisu pravidel.
IPFW IPFW je nativní paketový filtr a traffic-shapper pod FreeBSD. Ovládá se pomocí uživatelského programu IPFW. IPFW podporuje statickou i stavovou filtraci. Sada základních pravidel IPFW je ve standardní instalaci FreeBSD vložena do souboru /etc/rc.firewall. Tato pravidla jsou pouze základní a při reálném nasazení systému IPFW se předpokládá jejich doplnění a modifikace. Syntaxe pravidel IPFW umožňuje velmi jemnou specifikaci podmínek pro selekci paketů na základě nejrůznějších atributů jednotlivých protokolů. Proto je IPFW určen hlavně pro odborné uživatele, kteří mají vysoké nároky na schopnosti firewallu. Pro využití všech možností nabízených systémem IPFW je nutná značná znalost fungování síťových protokolů. Zejména důležitá je vysoká znalost způsobu vytváření hlaviček nejrůznějších protokolů. IPFW se skládá ze sedmi komponent. Hlavní komponentou v jádře OS je systém paketového filtrování (zpracování pravidel; kernel firewall filter rule processor) a jeho integrovaná součást evidence procházejících paketů (packet accounting facility). Dále IPFW tvoří monitorovací systém umožňující získat přehled o provozních podmínkách routeru (the logging facility), systém umožňující přesměrovat požadavky na jiné porty (divert) a další speciální funkce. Ve spojení s částí jádra dummynet zprostředkuje vyvažování zátěže (the dummynet traffic shaper facilities). Další komponenty slouží k přesměrování paketů (the 'fwd rule' forward facility), přepínání (the bridge facility) a „the ipstealth facility“. Mezi významné vlastnosti IPFW patří také podpora pro jiné úrovně síťové komunikace než TCP/IP.
- 29 -
Strukturu systému IPFW naznačuje následující obrázek:
Obr. 17 – Struktura systému IPFW (zdroj: http://www.usenix.org/publications/library/proceedings/bsdcon02/full_papers/lidl/lidl_html/bsdcon.png)
Sada pravidel IPFW Jednotlivá pravidla vytvořená za účelem řízení toku paketů vytvářejí sadu pravidel firewallu IPFW. Pořadí pravidel sady je dáno číslem každého z nich. To, zda bude dané pravidlo sady uplatněno na procházející paket stanovuje tzv. selektivní parametr. Tímto parametrem se specifikuje hodnota určitého atributu paketu. Pokud se hodnota zkoumaného atributu paketu procházejícího firewallem shoduje s hodnotou selektivního parametru, je dané pravidlo na paket uplatněno a další pravidla se již netestují. Pokud procházející paket nevyhoví selektivní podmínce jednoho pravidla, je porovnán s následujícím pravidlem sady. Takto může postupně projít všemi pravidly, aniž by byla nalezena shoda. Pokud k této skutečnosti dojde, závisí osud paketu na uplatňované implicitní politice. Ta může stanovit implicitní zákaz (inclusive firewall) nebo povolení (exclusive firewall) takovýchto paketů. V systému IPFW má toto poslední (implicitní) pravidlo číslo 65535.
- 30 -
Syntaxe pravidel IPFW Každé pravidlo je složeno z klíčových slov, která je nutno uvádět v předepsaném pořadí zleva doprava. Komentáře je možné vkládat za znak #. Prázdné řádky jsou ignorovány. Obecný formát zápisu pravidla: CMD RULE_NUMBER ACTION LOGGING SELECTION STATEFUL
Konfigurace IPFW Pro konfiguraci firewallu se kromě konfiguračního souboru používá klientský program ipfw. Jeho fungování lze shrnout do následujících čtyř oblastí: • přidávání (add) a mazání (delete) pravidel • vypisování jednotlivých pravidel (show), jejich skupin (tzv. chains – řetězce) a čítačů paketů (list) • smazání všech pravidel (flush) • resetování čítačů (clear) Příklady zápisu pravidel:
1) ipfw add deny tcp from evil.crackers.org to nice.people.org 23 via ed0 - zakazuje komunikaci protokolem TCP iniciovanou „evil.crackers.org“ a cílenou na port 23 stanice „nice.people.org“ jdoucí přes rozhraní ed0
2) ipfw add deny log tcp from evil.crackers.org/24 to nice.people.org - zakazuje a loguje veškerou komunikaci protokolem TCP ze sítě „crackers.org“ s 24bitovou maskou (prefix /24) na stanici „nice.people.org“ Po instalaci je implicitně nastaven řetězec zakazující jakýkoliv přístup zvenčí: allow 100 ip from any to any via lo0 deny 200 ip from any to 127.0.0.0/8 deny 65535 ip from any to any Čísla určují pořadí v jakém budou pakety s pravidly porovnávány. Je tedy nutné dávat nižší čísla konkrétnějším pravidlům (vztahujícím se na užší skupinu paketů) a vyšší čísla pravidlům více obecným. Pravidlo s číslem 65535 je implicitní a definuje způsob zacházení se všemi
- 31 -
pakety, pro které nebyla nalezena shoda s jiným pravidlem (definuje implicitní chování firewallu, které může být tzv. otevřené, kdy je vše povoleno, nebo, častěji, tzv. uzavřené, kdy je vše zakázáno).
3) ipfw flush - smaže všechna pravidla (kromě implicitního pravidla s číslem 65535), což má za následek „nastolení implicitního chování firewallu“: • deny 65535 ip from any to any – úplné uzavření síťové komunikace • allow 65535 ip from any to any – úplné otevření síťové komunikace
4) ipfw add fwd localhost,23 log tcp from evil.crackers.org to fbi.gov 23 - přesměruje pakety jdoucí z „evil.crackers.org“ na port 23 lokálního počítače na „fbi.gov“, port 23 Obecná syntaxe příkazu ipfw: ipfw [rule_number] [set set_number] [prob match_probability] action [log [logamount number]] body rule_number .............. vzestupné číslo pravidla (implicitní a neměnné 65535), udává pořadí zpracování set set_number ........... číslo množiny pravidel (1-30); takto lze seskupovat pravidla a manipulovat s nimi prob match_probability ... float od 0 do 1; používá se s dummynet (například simulace cest paketů) action ................... viz výše uvedené příklady a manuálové stránky log [logamount number] ... zda logovat uvedené pakety pomocí syslog a jejich počet body ..................... viz výše uvedené příklady a manuálové stránky
- 32 -
IPF (ipfilter) IPF je programový balíček, který je používán k filtraci síťového provozu a k zajištění překladu síťových adres (NAT). IPF není závislý na operačním systému – je to open source aplikace, která běží například na OS FreeBSD, OpenBSD, NetBSD, SunOS, HP/UX a Solaris. IPF může být přímo součástí jádra nebo zaváděn jako modul. Činnost IPF je ovládána pomocí uživatelských konzolových programů. Pravidla firewallu se nastavují pomocí programu ipf. Překlad síťových adres se definuje programem ipnat. ipfstat umožňuje výpis statistik činnosti jednotlivých součástí IPF. Program ipmon může zapisovat zprávy o činnosti IPF do systémových logovacích souborů. IPF původně fungoval na principu „poslední pravidlo, pro které byla nalezena shoda, vítězí“ (the last matching rule wins) a podporoval pouze statická pravidla (stateless types of rules). Postupně byla ovšem přidána podpora stavové filtrace (stateful) a logika vyhodnocování pravidel byla změněna na „quick“ (provede se akce definovaná hned prvním pravidlem, pro které byla nalezena shoda). Tato změna vedla k modernizaci systému IPF. Oficiální dokumentace IPF popisuje původní způsob vytváření pravidel a původní metodu práce se vstupními soubory. Později přidané modernizované funkce jsou zahrnuty pouze jako další volby, jejichž použití vede k vytvoření bezpečnějšího firewallu. Průchod paketu systémem IPF ilustruje obr. 18. Network Address Translation (NAT): • odchozím paketům procházejícím skrz NAT bude změněna zdrojová IP adresa (pokud existuje příslušné pravidlo) • příchozím paketům procházejícím skrz NAT bude změněna cílová IP adresa (na její hodnotu v rámci vnitřní sítě) IP Accounting: • v tomto bodě se zaznamenává například počet prošlých bytů, počet užití každého pravidla apod. – vytváření statistik o chodu systému (pravidla pro vytváření statistik příchozích a odchozích paketů mohou být nastavena odlišně)
- 33 -
Obr. 18 – Průchod paketu systémem IPF (zdroj: http://coombs.anu.edu.au/~avalon/ipfil-flow.html)
- 34 -
Firewall check: •
rozhodnutí, zda je paketu povoleno pokračovat dále v cestě skrz IPFilter, TCP/IP kernel protocol stack nebo na síťové rozhraní (pravidla pro příchozí a odchozí pakety mohou být nastavena odlišně)
- 35 -
4. Návrh systému síťové filtrace Systém odchytávání paketů Základem systému síťové filtrace, nad kterým bude firewall provozován, je systém odchytávání paketů. Tento systém definuje dvě kotvy pro zachytávání paketů, které budou umístěny mezi TCP/IP stackem a ovladačem síťové karty. Umístění systému odchytávání paketů znázorňuje následující obrázek:
Obr. 19 – Schéma systému odchytávání paketů (dvě kotvy pro zachytávání procházejících paketů – FILTER_IN a FILTER_OUT)
Nad těmito dvěma kotvami je tedy možné zachytávat procházející pakety. Se zachyceným paketem pak lze provést nějakou akci, popřípadě sekvenci více činností (například povolení či zahození paketu, překlad síťových adres, apod.). Umístění paketového filtru, který ke své činnosti využívá výše popsaný systém odchytávání paketů, ukazuje obr. 20.
- 36 -
Obr. 20 – Umístění paketového filtru (firewallu) v systému
Pravidla Podmínka pravidla může být teoreticky tvořena všemi parametry hlaviček síťových protokolů. Mezi nejzákladnější prvky podmínky určitě patří IP adresa, port a protokol. Dále může podmínku výběru tvořit například čas a den v týdnu, hodnoty různých čítačů sledujících síťový provoz a jiné další. Pravidla se budou vytvářet ve stromové struktuře. Strom je totiž nejuniverzálnější datová struktura, která se dá snadno optimalizovat. Takovouto strukturu pravidel lze navíc lehce převádět i do jiných forem reprezentace. Dále je uživateli takovýto způsob vytváření pravidel dobře srozumitelný. Samotná interpretace této stromové struktury pravidel by ale nebyla při reálném nasazení systému efektivní. Průchod takovouto strukturou by totiž představoval značnou zátěž, která by mohla být při vysokém zatížení pakety neúnosná. Navíc by se zvyšovala i latence činnosti firewallu. Proto budou pravidla, po provedení možné optimalizace, přeložena do sekvenční posloupnosti instrukcí (podobné například posloupnosti pravidel systému iptables). Tyto instrukce již budou šité na míru konkrétní platformě (architektuře), na které bude systém provozován. Tímto bude dosaženo co možná nejvyšší rychlosti zpracování veškerých požadavků (procházejících paketů). Stromová struktura tedy bude vnější, uživatelsky přijemnou reprezentací pravidel. V našem případě se bude jednat o binární strom. Arita každého uzlu je tedy 2, což odpovídá situaci, kdy buď procházející paket (jeho aktuálně testovaný parametr) dané podmínce vyhoví nebo nevyhoví. Takovýto rozhodovací strom, jak již bylo výše uvedeno, se může relativně snadno optimalizovat tak, aby testování trvalo co nejkratší dobu. Například se dá optimalizovat hloubka stromu, popřípadě se strom může optimalizovat z hlediska entropie – k tomuto je ale - 37 -
zapotřebí znát statistiku síťového provozu (typický síťový provoz), podle které lze jednotlivé atributy pravidla (uzly stromu) porovnávat. Podmínka může stanovit hodnotou daného parametru nebo interval hodnot (uzavřený, tj. včetně krajních hodnot). Na hodnoty daného parametru mohou být dále uplatněny logické operátory – n-ární OR (logický součet) a AND (logický součin), unární NEG (negace). Tímto lze vytvářet složené výrazy a lépe vyjádřit podmínku shody s paketem. Listy rozhodovacího stromu mají význam akce, která je provedena s paketem vyhovujícím podmínkám cesty od kořene do daného listu. Akce může být jednorázová (povolení či zahození paketu, apod.), nebo ji může tvořit posloupnost příkazů (například logování informací o procházejícím paketu a jeho následné povolení nebo zahození). Vlastní pravidlo je tedy tvořeno posloupností (cestou) dílčích podmínek od kořene k listu rozhodovacího stromu. Jednotlivé podmínky na této cestě musí samozřejmě platit současně – v přímé formě, pokud je podmínka v dané cestě splněna nebo v negované formě, pokud podmínka v dané cestě splněna není. Dílčí pravidlo tedy lze zapsat jako logický součin podmínek tvořících cestu (příp. negovaných tvarů podmínek), přičemž akce, která se má se shodujícím se paketem provést, je definována listem (posledním prvkem cesty).
Obr. 21 – Příklad rozhodovacího stromu
- 38 -
Popis rozhodovacího stromu z obr. 21 v XML:
<podminka> <min> 10.0.0.1 <max> 10.0.0.9 10.0.0.254 <splnena> <podminka> <port_dst>80 <splnena> <list> <list> <podminka> <min> 200.20.1.1 <max> 200.20.1.254 <splnena>
- 39 -
<list> <podminka> <protokol>ICMP <splnena> <list> <list>
- 40 -
Jiný rozhodovací strom znázorňuje obrázek 22 (podmínky jsou znázorněny ovály a akce obdélníky).
Obr. 22 – Rozhodovací stromu
Struktura rozhodovacího stromu bude zapisována pomocí jazyka XML. Popis jazykem XML umožní následné použití již hotových nástrojů pro různé úpravy stromové struktury pravidel (například převody do jiných forem zápisu). V následujících odstavcích je popsána struktura rozhodovacího stromu, podmínky a akce pomocí jazyka XML. Jedná se vlastně o XML schéma (definici datového typu). Popis struktury rozhodovacího stromu:
<element name="uzel"> <element name="podminka" minOccurs="1" maxOccurs="1" /> <element name="splnena" minOccurs="1" maxOccurs="1" /> <element name="nesplnena" minOccurs="1" maxOccurs="1" /> <element name="list"> <element name="akce" minOccurs="1" maxOccurs="1" />
- 41 -
Popis uzlu:
<element name="podminka"> <element name="hodnota" minOccurs="0" maxOccurs="1" /> <element name="interval" minOccurs="0" maxOccurs="1" /> <element name="or" minOccurs="0" maxOccurs="1" /> <element name="and" minOccurs="0" maxOccurs="1" /> <element name="neg" minOccurs="0" maxOccurs="1" /> T<element nameT="splnena"> <element name="uzel" minOccurs="0" maxOccurs="1" /> <element name="list" minOccurs="0" maxOccurs="1" /> <element name="nesplnena"> <element name="uzel" minOccurs="0" maxOccurs="1" /> <element name="list" minOccurs="0" maxOccurs="1" />
Popis listu: <list> <element name="akce">
<element name="accept" minOccurs="0" maxOccurs="1" /> <element name="drop" minOccurs="0" maxOccurs="1" /> <element name="log" minOccurs="0" maxOccurs="1" /> <element name="queue" minOccurs="0" maxOccurs="1" />
Popis podmínky: <podminka> <element name="or">
<element name="hodnota" minOccurs="0" maxOccurs="*" /> <element name="interval" minOccurs="0" maxOccurs="*" /> <element name="and">
<element name="hodnota" minOccurs="0" maxOccurs="*" /> <element name="interval" minOccurs="0" maxOccurs="*" />
- 42 -
<element name="neg">
<element name="hodnota" minOccurs="0" maxOccurs="1" /> <element name="interval" minOccurs="0" maxOccurs="1" /> <element name="or" minOccurs="0" maxOccurs="1" /> <element name="and" minOccurs="0" maxOccurs="1" /> <element name="neg" minOccurs="0" maxOccurs="1" /> <element name="hodnota">
<element name="ip_src" type="string" minOccurs="0" maxOccurs="1" /> <element name="ip_dst" type="string" minOccurs="0" maxOccurs="1" /> <element name="port_src" type="string" minOccurs="0" maxOccurs="1" /> <element name="port_dst" type="string" minOccurs="0" maxOccurs="1" /> <element name="protokol" type="string" minOccurs="0" maxOccurs="1" /> <element name="interval">
<element name="min" minOccurs="1" maxOccurs="1" /> <element name="max" minOccurs="1" maxOccurs="1" /> <element name="min">
<element name="ip_src" minOccurs="0" maxOccurs="1" /> <element name="ip_dst" minOccurs="0" maxOccurs="1" /> <element name="port_src" minOccurs="0" maxOccurs="1" /> <element name="port_dst" minOccurs="0" maxOccurs="1" /> <element name="max">
<element name="ip_src" minOccurs="0" maxOccurs="1" /> <element name="ip_dst" minOccurs="0" maxOccurs="1" /> <element name="port_src" minOccurs="0" maxOccurs="1" /> <element name="port_dst" minOccurs="0" maxOccurs="1" />
- 43 -
Pravidla z obr. 21, která jsou znázorněna ve formě rozhodovacího stromu, lze přeložit do sekvenční formy. Následují dva možné příklady takovéhoto překladu, přičemž pravidla jsou zapisována v syntaxi iptables. První příklad překladu stromové struktury pravidel do posloupnosti pravidel systému iptables: iptables iptables iptables iptables
–N -A -A -A
UZEL_1 UZEL_1 -m iprange --dst-range 10.0.0.1-10.0.0.9 -j UZEL_2 UZEL_1 -d 10.0.0.254 -j UZEL_2 UZEL_1 –j UZEL_3
iptables iptables iptables iptables iptables
–N –A –A –A –A
UZEL_2 UZEL_2 UZEL_2 UZEL_2 UZEL_2
–p –p –j -j
tcp –-dport 80 –j ACCEPT udp –-dport 80 –j ACCEPT LOG --log-ip-options DROP
iptables –N UZEL_3 iptables –A UZEL_3 -m iprange --src-range 200.20.1.1-200.20.1.254 -j ACCEPT iptables –A UZEL_3 –j UZEL_4 iptables iptables iptables iptables
–N –A –A –A
UZEL_4 UZEL_4 –j LOG --log-ip-options UZEL_4 –p ! icmp –j ACCEPT UZEL_4 –j DROP
Druhý příklad překladu stromové struktury pravidel do posloupnosti pravidel systému iptables: iptables –N CHAIN iptables -A CHAIN -m -j ACCEPT iptables -A CHAIN -m -j ACCEPT iptables -A CHAIN -d iptables -A CHAIN -d iptables -A CHAIN -m options iptables -A CHAIN -m iptables -A CHAIN -d iptables -A CHAIN -d iptables –A CHAIN -m iptables –A CHAIN –j iptables –A CHAIN –p iptables –A CHAIN –j
iprange --dst-range 10.0.0.1-10.0.0.9 –p tcp –dport 80 iprange --dst-range 10.0.0.1-10.0.0.9 –p udp –dport 80 10.0.0.254 –p tcp –dport 80 -j ACCEPT 10.0.0.254 –p udp –dport 80 -j ACCEPT iprange --dst-range 10.0.0.1-10.0.0.9 –j LOG --log-ipiprange --dst-range 10.0.0.1-10.0.0.9 -j DROP 10.0.0.254 -j LOG --log-ip-options 10.0.0.254 –j DROP iprange --src-range 200.20.1.1-200.20.1.254 -j ACCEPT LOG --log-ip-options ! icmp –j ACCEPT DROP
- 44 -
Základní způsob činnosti systému Navrhovaný systém má být co nejefektivnější. Proto se pravidla, vytvořená ve formě rozhodovacího stromu, po případné optimalizaci přeloží do vnitřní formy. Tato forma bude, jak již bylo uvedeno výše, přizpůsobena kontrétní architektuře, na které bude systém provozován. Činnost systému spočívá v odchycení paketu, jeho porovnání s pravidly a následném vykonání příslušné akce. Při hledání shody s pravidly je nutné porovnávat obsah paketu (parametry hlaviček síťových protokolů) s vlastními pravidly. Aby toto porovnavání bylo možné, musí být systémem používaná struktura pravidla a paketu shodná. Konečná podoba pravidla používaná v reálném provozu systému definuje vždy určitou část paketu (např. ip záhlaví). Dále je pro každou zkoumanou část nutné znát příslušnou masku, s níž bude skutečný obsahu paketu tzv. vymaskován (pomocí logické fukce and). Maska určuje část obsahu (například část ip záhlaví), která nás při porovnávání s paketem zajímá. Zajímat nás může například zdrojová IP adresa, ale cílová už ne. Maska také umožňuje vytváření obecnějších pravidel pro určité skupiny paketů – např. pro pakety se zdrojovou adresou patřící do stejné sítě. Tímto se vlastně definuje určitý interval hodnot nějakého parametru, na který se pravidlo vztahuje. Porovnání s pravidlem tedy spočívá nejprve ve vymaskování obsahu paketu (aplikování logické funkce AND na zkoumanou část paketu a masku) a následném porovnání s pravidlem (tj. vlastně se vzorem). Tento postup znázorňuje níže uvedený příklad. Příklad porovnání paketu s pravidlem: Podmínka výběru definuje například zdrojovou adresu s maskou – 192.168.1.0 / 24. Tomuto pravidlu tedy vyhoví všechny pakety, jejichž zdrojová adresa patří právě do této sítě. Zdrojovou adresu a masku můžeme zapsat binárně: 192.168.1.010 …….... 1100 0000 . 1010 1000 . 0000 0001 . 0000 00002 255.255.255.010 …… 1111 1111 . 1111 1111 . 1111 1111 . 0000 00002 1) Procházející paket má zdrojnou adresu náležící této síti – např. 192.168.1.10. Tuto adresu opět převedeme do binární podoby: 192.168.1.1010 …… 1100 0000 . 1010 1000 . 0000 0001 . 0000 10102 1. krok (vymaskování) – adresa paketu & maska
- 45 -
1100 0000 . 1010 1000 . 0000 0001 . 0000 1010 & 1111 1111 . 1111 1111 . 1111 1111 . 0000 0000 1100 0000 . 1010 1000 . 0000 0001 . 0000 0000 2. krok – porovnání vzoru s výsledkem z prvního kroku 1100 0000 . 1010 1000 . 0000 0001 . 0000 0000 != 1100 0000 . 1010 1000 . 0000 0001 . 0000 0000 true V tomto případě došlo ke shodě s pravidlem. 2) Zdrojová adresa procházejícího paketu nepatří do sítě 192.168.1.0 / 24. Jeho zdrojová IP adresa má hodnotu např. 200.20.20.110. 200.20.20.110 ….. 1100 1000 . 0001 0100 . 0001 0100 . 0000 00012. 1. krok (vymaskování) – adresa paketu & maska 1100 1000 . 0001 0100 . 0001 0100 . 0000 0001 & 1111 1111 . 1111 1111 . 1111 1111 . 0000 0000 1100 1000 . 0001 0100 . 0001 0100 . 0000 0000 2. krok – porovnání vzoru s výsledkem z prvního kroku 1100 0000 . 1010 1000 . 0000 0001 . 0000 0000 != 1100 1000 . 0001 0100 . 0001 0100 . 0000 0000 false V tomto případě nedošlo ke shodě s pravidlem.
Formát paketu a příklad datové struktury vhodné pro jeho uložení Každý paket je tvořen informacemi přidanými síťovými protokoly a vlastními uživatelskými daty (uživatelská data nemusí nutně obsahovat). Strukturu paketu znázorňuje následující obrázek.
Obr. 23 – Struktura paketu (obecně a konkrétněji pro Ethernet a protokoly TCP/IP)
- 46 -
Struktura hlaviček každého protokolu je popsána dokumenty RFC popřípadě standardem dané technologie (Ethernet). Protokol IP je popsán v RFC 791, ICMP v RFC 777, TCP v RFC 793, UDP v RFC 768 a protokol SCTP je popsán v RFC 2960. Popis nejen těchto protokolů je možné nalézt například na adrese http://www.networksorcery.com/enp/topic/ipsuite.htm.
Následující obrázky ukazují strukturu jednotlivých hlaviček.
Obr. 24 – IP hlavička (zdroj: http://research.edm.luc.ac.be/jori/thesis/onlinethesis/images/chapter_2/fig_ip_header.png)
Obr. 25 – TCP hlavička (zdroj: http://www.cosc.brocku.ca/~cspress/HelloWorld/members/saskatchewan/1999/02feb/images/tcp_header.gif)
Obr. 26 – UDP hlavička (zdroj: http://research.edm.luc.ac.be/jori/thesis/onlinethesis/images/chapter_2/fig_udp_header.png)
- 47 -
Obr. 27 – Ethernetová hlavička (Ethernet 2 DIX) (zdroj: http://www.microolap.com/products/network/pssdk/help/_images/EthernetHeaderStructure.png)
Pro přístup k jednotlivým položkám paketu je vhodné definovat strukturu, která kopíruje hlavičku daného protokolu. Například pro hlavičku Ethernetu by struktura mohla vypadat následovně (zápis v C): #define ETHER_ADDR_LEN 6 /* MAC adresy jsou 6 bytů dlouhé */ #define ETHERNET_HEADER_LEN 14 /* hlavička má 14 bytů */ typedef struct ethernet_header { u_char ether_dhost[ETHER_ADDR_LEN]; /* cílová MAC adresa */ u_char ether_shost[ETHER_ADDR_LEN]; /* zdrojová MAC adresa */ u_short ether_type; /* typ protokolu síťové vrstvy (IP? ARP? …) */ } ETHERNET_HEADER;
Pro IP hlavičku se může definovat například takováto struktura: typedef struct ip_header { u_char ip_vhl; u_char ip_tos; u_short ip_len; u_short ip_id; u_short ip_off; u_char ip_ttl; u_char ip_p; u_short ip_sum; u_long ip_src; u_long ip_dst; } IP_HEADER;
/* /* /* /* /* /* /* /* /* /*
verze a délka hlavičky */ ToS (Type of Service) */ celková délka */ identifikace */ posunutí fragmentu */ TTL (Time To Live) - životnost */ protokol */ kontrolní součet */ zdrojová adresa */ cílová adresa */
Struktura pro TCP hlavičku: typedef struct tcp_header { u_short th_sport; /* zdrojový port */ u_short th_dport; /* cílový port */ u_long th_seq; /* sequence number */ u_long th_ack; /* acknowledgement number */ u_char th_off; u_char th_flags; u_short th_win; u_short th_sum; u_short th_urp; } TCP_HEADER;
/* /* /* /* /*
data offset a reserved */ příznaky */ window */ kontrolní součet */ urgent pointer */
- 48 -
Struktura pro UDP hlavičku: typedef struct udp_header { u_short uh_sport; u_short uh_dport; u_short uh_len; u_short uh_checksum; } UDP_HEADER;
/* /* /* /*
zdrojový port */ cílový port */ délka */ kontrolní součet */
Funkce, která je volána pro zachycení paketu, vrací ukazatel na začátek (první byte) paketu. Jedná se vlastně o ukazatel na první byte hlavičky Ethernetu (hlavička linkové vrstvy). Délka této hlavičky je známá (14 bytů) takže lze snadno určit i adresu prvního bytu IP hlavičky. Délka IP hlavičky je sice proměnná, ale dá se zjistit z příslušného políčka hlavičky. Z výše definované struktury ji zjistíme příslušným vymaskováním parametru ip_vhl, tj. ip_vhl & 0x0f. Dále je nutné tuto hodnotu vynásobit čtyřmi, protože je délka IP hlavičky udávána ve čtyřbajtových slovech. Tímto se dostaneme k počátku další hlavičky (TCP, UDP, …). Hlavička protokolu (typ protokolu), která následuje za aktuálně zkoumanou hlavičkou, se zjistí opět pomocí příslušného pole aktuální hlavičky. Pro hlavičku Ethernetu je to pole Type (0x0800 = IP protokol), v IP hlavičce je další protokol určen polem Protocol (0x1 = ICMP, 0x6 = TCP, 0x11 = UDP, …).
Shrnutí činnosti systému Každý průchozí paket musí být porovnáván s pravidly a následně musí být vykonána příslušná akce (určená pravidlem nebo implicitní). V případě, že jsou k pravidlům přídruženy čítače (např. čítač počtu shod s daným pravidlem apod.), musí být jejich hodnoty udržovány aktuální. O činnosti systému také mohou být logovány určité informace, které můžou být užitečné při ověřování správného chování či při odhalování příčin případných chyb. Dále by systém mohl automaticky zajišťovat detekci některých typů útoků (například ARP spoofing, DoS – SYN flood; způsoby detekce útoků byly naznačeny v druhé kapitole – Metody útoků na koncovou stanici či lokální síť).
- 49 -
5. Závěr Cílem této práce byl návrh systému síťové filtrace, který je určen pro vestavěné systémy (embedded systems). Odchytávání a případné transformace paketů zajišťuje filtrační vrstva, která se nachází mezi ovladačem síťové karty a TCP/IP stackem. Na tomto místě se rozhoduje o osudu příchozích i odchozích paketů. Příchozí paket může být předán k dalšímu zpracování operačním systémem, může být nějak upraven, zahozen nebo například přechodně uložen do paměti, ze které může být následně vyzvednut při dalším zpracování jinou aplikací. Rozhodnutí o způsobu nakládání s paketem se opírá o pravidla definovaná před zahájením činnosti systému síťové filtrace. Pravidla jsou vytvářena ve formě stromové struktury. Vytváření pravidel tímto způsobem je pro uživatele (tvůrce pravidel) velmi snadné. Navíc podmínky aplikování pravidel umožňují specifikovat hodnoty, intervaly a dokonce i kombinace hodnot a intervalů různých parametrů hlaviček síťových protokolů. Pravidla jsou tedy dostatečně pružná i pro vyjádření složitých podmínek, a to při zachování jejich výborné čitelnosti a srozumitelnosti. Efektivita činnosti systému zavísí na rychlosti zpracování požadavků. V tomto případě se jedná o dosažení co možná nejrychlejšího průchodu pravidly při hledání shody s paketem. Proto musí být vnitřní forma pravidel, vůči níž bodou procházející pakety testovány, co neefektivněji vytvořena. Pro dosažení tohoto stavu je optimální výchozí strukturou pro pravidla opět strom. Jedná se totiž o velmi univerzální datovou strukturu, která se dá snadno upravovat a optimalizovat. Pravidla se dále mohou optimalizovat i s ohledem na kontrétní architekturu, na které bude systém provozován. Systém síťové filtrace navíc může podporovat automatickou detekci některých typů útoků, jako například ARP spoofing či SYN flood. Tyto typy útoků, způsoby jejich detekce a možná protiopatření byly popsány ve druhé kapitole této práce (Metody útoků na koncovou stanici či lokální síť). Navržený systém je efektivní a pro svou oblast nasazení použitelný. Příklad implementace systému síťové filtrace s jeho popisem je dostupný na přiloženém CD.
- 50 -
Seznam literatury a zdrojů [1]
Simson Garfinkel, Gene Spafford, Practical UNIX & Internet Security, O’Reilly & Associates, Inc., Second Edition, 1996, ISBN 1-56592-148-8
[2]
Edward Amoroso, Fundamentals of Computer Security Technology, Prentice-Hall, 1994
[3]
Richard W. Stevens, Programování sítí operačního systému UNIX, Science, první vydání, 1994, ISBN 80-901475-3-4
[4]
Internet FAQ Archives – Linux Network Administrators Guide • Netfilter and IP Tables – http://www.faqs.org/docs/linux_network/x-087-2-firewall.future.html • Configuring IP Masquerade – http://www.faqs.org/docs/linux_network/x-087-2-masq.configuration.html
[5]
Masarykova univerzita – Fakulta informatiky • Paketové filtry, autor: Aleš Zelinka, 2002 – http://www.fi.muni.cz/~kas/p090/referaty/2002-podzim/skupina10/firewall.html • Paketové filtry (ve FreeBSD), autor: Jakub Široký, 2002 – http://www.fi.muni.cz/~kas/p090/referaty/2002-podzim/skupina14/firewall-bsd.html • FreeBSD firewall – IPFW, autor: Petr Bezděk, 2002 – http://www.fi.muni.cz/~kas/p090/referaty/2003-jaro/skupina10/fw-bsd.html
[6]
DoS & DDoS Attacks, autor: Faisal Khan, 2005 • http://www.dos-attacks.com/index.php?option=com_frontpage&Itemid=1
[7]
CERT Coordination Center – Denial of Service Attack, Carnegie Mellon University, 1997 – 1999 • http://www.cert.org/tech_tips/denial_of_service.html
[8]
The netfilter.org project • http://www.netfilter.org/
[9]
Wikipedie (otevřená encyklopedie) • Firewall – http://cs.wikipedia.org/wiki/Firewall • Ethernet – http://en.wikipedia.org/wiki/Ethernet • Address Resolution Protocol – http://en.wikipedia.org/wiki/Address_Resolution_Protocol • Denial-of-service attack – http://en.wikipedia.org/wiki/Denial_of_service
[ 10 ] Cisco Systems (stránky firmy) – Zabezpečení přepínaných sítí • http://www.cisco.cz/index.sub.php?pid=site&typ=sswitch
- 51 -
[ 11 ] reboot.cz : Magazín informačních technologií – Denial of Service Attack, autor: Ing. Josef Muknšnábl • http://reboot.cz/index.phtml?id=18 [ 12 ] Linuxové noviny – Netfilter a iptables, autor: Jarda Cmunt, leden 2000 • http://www.linux.cz/noviny/2000-01/clanek10.html [ 13 ] www.root.cz – seriál: Vše o iptables, autor: Csaba Botoš • http://www.root.cz/serialy/vse-o-iptables/ [ 14 ] iptables – autor: Josef Kufner, 2005 • http://jk.myserver.cz/hack/iptables/ [ 15 ] FreeBSD Handbook – Firewalls, autor: Joseph J. Barbish • http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/firewalls.html [ 16 ] FreeBSD Hypertext Man Pages – IPFW, 2002 • http://www.freebsd.org/cgi/man.cgi?query=ipfw&apropos=0&sektion= 0&manpath=FreeBSD+4.7-RELEASE&format=html [ 17 ] Jiří Kosek, XML pro každého – podrobný průvodce. Grada Publishing, Praha, první vydání, 2000. [ 18 ] www.lupa.cz (server o českém Internetu) – Bezpečnost firewallů - zabezpečení firemních sítí, autor: Jan Dymáček, 21. 10. 2003 • http://www.lupa.cz/clanky/bezpecnost-firewallu-zabezpeceni-firemnichsiti/?SID=3AB3FDD90A6633F4E2430782CBE2D2F0
- 52 -
Příloha A) Příkazy, specifikace pravidel a rozšíření iptables (zdroj: www.faqs.org/docs/linux_network/x-087-2-firewall.future.html)
Commands There are a number of ways we can manipulate rules and rulesets with the iptables command. Those relevant to IP firewalling are: -A chain Append one or more rules to the end of the nominated chain. If a hostname is supplied as either a source or destination and it resolves to more than one IP address, a rule will be added for each address. -I chain rulenum Insert one or more rules to the start of the nominated chain. Again, if a hostname is supplied in the rule specification, a rule will be added for each of the addresses to which it resolves. -D chain Delete one or more rules from the specified chain matching the rule specification. -D chain rulenum Delete the rule residing at position rulenum in the specified chain. Rule positions start at 1 for the first rule in the chain. -R chain rulenum Replace the rule residing at position rulenum in the specific chain with the supplied rule specification. -C chain Check the datagram described by the rule specification against the specific chain. This command will return a message describing how the chain processed the datagram. This is very useful for testing your firewall configuration and we will look at it in detail later. -L [chain] List the rules of the specified chain, or for all chains if no chain is specified.
- 53 -
-F [chain] Flush the rules of the specified chain, or for all chains if no chain is specified. -Z [chain] Zero the datagram and byte counters for all rules of the specified chain, or for all chains if no chain is specified. -N chain Create a new chain with the specified name. A chain of the same name must not already exist. This is how user-defined chains are created. -X [chain] Delete the specified user-defined chain, or all user-defined chains if no chain is specified. For this command to be successful, there must be no references to the specified chain from any other rules chain. -P chain policy Set the default policy of the specified chain to the specified policy. Valid firewalling policies are ACCEPT, DROP, QUEUE, and RETURN. ACCEPT allows the datagram to pass. DROP causes the datagram to be discarded. QUEUE causes the datagram to be passed to userspace for further processing. The RETURN target causes the IP firewall code to return to the Firewall Chain that called the one containing this rule, and continue starting at the rule after the calling rule.
Rule specification parameters There are a number of iptables parameters that constitute a rule specification. Wherever a rule specification is required, each of these parameters must be supplied or their default will be assumed. -p [!]protocol Specifies the protocol of the datagram that will match this rule. Valid protocol names are tcp, udp, icmp, or a number, if you know the IP protocol number.[1] For example, you might use 4 to match the ipip encapsulation protocol. If the ! character is supplied, the rule is negated and the datagram will match any protocol other than the specified protocol. If this parameter isn't supplied, it will default to match all protocols. -s [!]address[/mask] Specifies the source address of the datagram that will match this rule. The address may be supplied as a hostname, a network name, or an IP address. The optional mask is the netmask to use and may be supplied either in the traditional form (e.g., /255.255.255.0) or in the modern form (e.g., /24). - 54 -
-d [!]address[/mask] Specifies the destination address and port of the datagram that will match this rule. The coding of this parameter is the same as that of the -s parameter. -j target Specifies what action to take when this rule matches. You can think of this parameter as meaning “jump to.” Valid targets are ACCEPT, DROP, QUEUE, and RETURN. We described the meanings of each of these previously in the "Commands" section. You may also specify the name of a user-defined chain where processing will continue. You may also supply the name of a target supplied by an extension. We'll talk about extensions shortly. If this parameter is omitted, no action is taken on matching datagrams at all, other than to update the datagram and byte counters of this rule. -i [!]interface-name Specifies the interface on which the datagram was received. Again, the ! inverts the result of the match. If the interface name ends with “+” then any interface that begins with the supplied string will match. For example, -i ppp+ would match any PPP network device and -i ! eth+ would match all interfaces except ethernet devices. -o [!]interface-name Specifies the interface on which the datagram is to be transmitted. This argument has the same coding as the -i argument. [!] -f Specifies that this rule applies only to the second and later fragments of a fragmented datagram, not to the first fragment.
Options The following iptables options are more general in nature. Some of them control rather esoteric features of the netfilter software. -v causes iptables to be verbose in its output; it will supply more information. -n causes iptables to display IP address and ports as numbers without attempting to resolve them to their corresponding names. -x causes any numbers in the iptables output to be expanded to their exact values with no rounding. - 55 -
- -line-numbers causes line numbers to be displayed when listing rulesets. The line number will correspond to the rule's position within the chain.
Extensions We said earlier that the iptables utility is extensible through optional shared library modules. There are some standard extensions that provide some of the features ipchains provided. To make use of an extension, you must specify its name through the -m name argument to iptables. The following list shows the -m and -p options that set up the extension's context, and the options provided by that extension.
TCP Extensions: used with -m
tcp -p tcp
- -sport [!] [port[:port]] Specifies the port that the datagram source must be using to match this rule. Ports may be specified as a range by specifying the upper and lower limits of the range using the colon as a delimiter. For example, 20:25 described all of the ports numbered 20 up to and including 25. Again, the ! character may be used to negate the values. - -dport [!] [port[:port]] Specifies the port that the datagram destination must be using to match this rule. The argument is coded identically to the - -sport option. - -tcp-flags [!] mask comp Specifies that this rule should match when the TCP flags in the datagram match those specified by mask and comp. mask is a comma-separated list of flags that should be examined when making the test. comp is a comma-separated list of flags that must be set for the rule to match. Valid flags are: SYN, ACK, FIN, RST, URG, PSH, ALL or NONE. This is an advanced option: refer to a good description of the TCP protocol, such as RFC-793, for a description of the meaning and implication of each of these flags. The ! character negates the rule. [!] - -syn Specifies the rule to match only datagrams with the SYN bit set and the ACK and FIN bits cleared. Datagrams with these options are used to open TCP connections, and this option can therefore be used to manage connection requests. This option is shorthand for: - -tcp-flags SYN,RST,ACK SYN
When you use the negation operator, the rule will match all datagrams that do not have both the SYN and ACK bits set.
- 56 -
UDP Extensions: used with -m
udp -p udp
- -sport [!] [port[:port]] Specifies the port that the datagram source must be using to match this rule. Ports may be specified as a range by specifying the upper and lower limits of the range using the colon as a delimiter. For example, 20:25 describes all of the ports numbered 20 up to and including 25. Again, the ! character may be used to negate the values. - -dport [!] [port[:port]] Specifies the port that the datagram destination must be using to match this rule. The argument is coded identically to the - -sport option.
ICMP Extensions: used with -m
icmp -p icmp
- -icmp-type [!] typename Specifies the ICMP message type that this rule will match. The type may be specified by number or name. Some valid names are: echo-request, echo-reply, sourcequench, time-exceeded, destination-unreachable, network-unreachable, host-unreachable, protocol-unreachable, and port-unreachable.
MAC Extensions: used with -m mac - -mac-source [!] address Specifies the host's Ethernet address that transmitted the datagram that this rule will match. This only makes sense in a rule in the input or forward chains because we will be transmitting any datagram that passes the output chain.
- 57 -
B) Obsah přiloženého CD readme.txt
- textový soubor s popisem obsahu CD
index.html
- popis obsahu CD ve formátu HTML
index.css
- CSS pro index.html
text/
- adresář obsahující vlastní text práce bp.pdf
src/
- text bakalářské práce ve formátu pdf - adresář se zdrojovým kódem aplikace
src.zip
- zdrojové kódy aplikace zabalené v souboru zip
popis_programu.txt - textový soubor s popisem programu example/
- adresář s ukázkovým příkladem použití aplikace (ukázka pravidel a konkrétního výstupu programu pro tato pravidla)
- 58 -