Úvod do iptables aneb UN*Xové firewally poprvé 1 Slovoúvodem Problematika firewallů je vždy poměrně komplexní a na první pohled neprůhledná záležitost. Jejich konstrukce vždy vyžaduje určité, většinou nemalé množství času věnovaného pochopení nejen principu vytváření pravidel konkrétního firewallu, ale i principů síťování. Dá se prakticky říci, že žádný firewall nepracuje přesně tak jak chceme od první chvíle jeho nasazení(leda by byl OPRAVDU velmi jednoduchý). Jistádrobnávýhodasoučasnosti 1 je,žejižnenítřebanikomuvysvětlovatcototenfirewall vlastně je. V tomto ohledu můžeme poděkovat nejmenované společnosti, jež kvalitou svých produktů postavila slovo firewall na úroveň slova nezbytnost. Tytam jsou časy, kdy slovo firewall bylo obestřeno tajemstvím, vzbuzujícím představu přísně střežených bankovních dat, jaderných zbraní či šéfovy tajné korespondence s milenkou. Mít svůj firewall je dnes móda, nebotakénutnost 2. 2 Začněmeujádrapudla......ehm, totiž Linuxu:o). Jelikož se dnes budeme věnovat iptables, jež jsou jadernou záležitostí (skorobysedalořícizbraní),musímesinatojadérkopřipravit.iptablesmůžememítbuď jako moduly(což s sebou sice nese určité problémy zejména v nutnosti jejich zavádění, ty jsou ovšem v některých případech vyváženy svými výhodami, např. pokud potřebujete předat nějaké parametry), nebo je můžeme staticky zakompilovat do jádra. Kde je v konfiguraci jádra najdete nechám na vás jako malou samostatnou rozcvičku. Při jejich výběru použijte hlavu, pokud se vám vybírat nechce, klidně zkompilujte vše, tak velké to není a pokudvyrábítemoduly,rozhodněneprohloupíte 3.Těmúspornějšímbychprozačátekurčitě doporučil moduly ip tables(což jsou samotné iptables), ip conntrack(udržuje tabulku spojení, díky čemuž poznáte nové spojení od navázaného), ip conntrack ftp(kombinace FTP protokolu s firewallem má svá specifika, viz níže), iptable filter, ipt LOG(abychom mohli logovat), ipt limit, ipt state(umožňuje využívat conntrack tabulku) a ipt REJECT(občas je prima pakety místo prostého zahození zdvořile odmítnout). Co nám dělá modul ip conntrack si můžeme rovnou ukázat na příkladu z jednoho serveru: [root@firewall ~]$ cat /proc/net/ip_conntrack unknown 2 565 src=147.32.127.194 dst=224.0.0.5 packets=45937 bytes=1469984 \ [UNREPLIED] src=224.0.0.5 dst=147.32.127.194 packets=0 bytes=0 mark=0 use=1 udp 17 177 src=147.32.127.194 dst=147.32.127.214 sport=35449 dport=53 \ packets=7 bytes=475 src=147.32.127.214 dst=147.32.127.194 sport=53 \ dport=35449 packets=7 bytes=1321[assured] mark=0 use=1 unknown 89 597 src=147.32.127.233 dst=224.0.0.5 packets=276318 bytes=43910084\ 1 Jdoucírukuvrucesnevýhodousoučasnosti:o)) 2 Jakésitokdoudělá... 3 Cožmipřipomínápřípad,kdyjsemjádrokompilovalasi3x,protožejsempokaždénaněcozapomněl Středisko UN*Xových technologií 1
[UNREPLIED] src=224.0.0.5 dst=147.32.127.233 packets=0 bytes=0 mark=0 use=1 tcp 6 239 ESTABLISHED src=195.113.65.10 dst=147.32.127.194 sport=3269 \ dport=22 packets=939 bytes=85351 src=147.32.127.194 dst=195.113.65.10\ sport=22 dport=3269 packets=678 bytes=310835[assured] mark=0 use=1 tcp 6 431998 ESTABLISHED src=147.32.127.194 dst=64.12.28.96 sport=40473 \ dport=5190 packets=9814 bytes=524619 src=64.12.28.96 dst=147.32.127.194\ sport=5190 dport=40473 packets=9891 bytes=1154800[assured] mark=0 use=1 tcp 6 49 TIME_WAIT src=147.32.124.162 dst=147.32.127.194 sport=1917 \ dport=110 packets=10 bytes=448 src=147.32.127.194 dst=147.32.124.162 \ sport=110 dport=1917 packets=11 bytes=516[assured] mark=0 use=1 Výpis byl pro přehlednost trochu upraven(každý řádek několikrát zalomen). 3 Řetězce aneb chainy Jak pakety procházejí jednotlivými řetězci je patrné z následujícího obrázku půjčeného z tutoriálu pana Andreassona: Velice stručně: INPUT řetězec nám filtruje pakety určené pro lokální stroj, OUTPUT pakety odchozí. FORWARD se aplikuje na pakety, které strojem jen protékají(např. jde orouter).mangleřetězecnámumožňujepracovatsttlatoshodnotamipaketůa paketyoznačovat( markovat ).NATovacířetězceprovádějípřekladadres(NetworkAddress Translation) a prochází jimi pouze první paket, na ostatní se pak aplikují stejná pravidla. V současné době nás zajímají především první dva řetězce- INPUT a OUTPUT. Středisko UN*Xových technologií 2
4 Stavyspojení Tak, jak probíhá připojování klienta k počítači, prochází spojení na obou stranách několika stavy, které si nyní popíšeme: NEW Novéspojení,kterézatímvconntracktabulcenebylo.TotospojeníbyuTCP protokolu mělo být iniciováno paketem SYN(synchronize), ovšem může nastat i jiný případ. A právě ten by náš firewall měl ošetřit. Když někdo navazuje spojení paketem FIN,jeněcovnepořádku(většinoujdeoskenportů).Vnon TCPspojeníchsepaket SYN neuplatňuje. ESTABLISHED Tento termín označuje navázané spojení. V případě TCP protokolu jde o spojení, u něhož proběhly 2/3 z procesu 3 way handshake, neboli klient vyslal SYN, druhá strana odpověděla paketem SYN ACK(ACK = acknowledge)(po jehož přijetí je konexe z hlediska klienta považována za navázanou), načež klient odeslal ACK(po jehož přijetí je konexe i na straně serveru prohlášena za navázanou). Tento mechanizmus se nevztahuje na protokoly, které nenavazují spojení(udp, ICMP). Tam to funguje trochu jinak stačí přijatý a odeslaný paket. RELATED zvláštní typ konexe, který se vztahuje k jiné konexi(která je ESTAB- LISHED).PříkladembudižprotokolFTP,kterýnaportu21přenáší řídící (control) dataanaportu20potomvyžádanádata(soubory).jinýmpřípademjeirc.tyto konexe s sebou nesou problém v podobě nutnosti odhalit iniciaci RELATED konexe a otevřít tak příslušný port. V praxi to dělají helper moduly(např. ip conntrack ftp), jež sledují komunikaci na daném portu a pakliže zaregistrují iniciaci spojení na jiném portu, otevřou jej. V případě FTP protokolu když modul zaregistruje příkaz PASV nebo PORT,otevřezmíněnýportakomunikacemůževeseleprobíhat. 4 INVALID stav, kdy paket nelze identifikovat nebo přiřadit k žádnému jinému stavu, např. ICMP error, který se ovšem nevztahuje k žádné jiné konexi. 5 Cospaketem? Paket patřící některému z našich pravidel můžeme buď tiše zahodit(drop), přijmout(ac- CEPT), zalogovat(log) nebo zdvořile odmítnout(reject). Většina pravidel buď zahazuje nebo přijímá. Často je ale výhodné paket odmítnout REJECTem, neboť pak nevchází v platnost čekání druhé strany na timeout(např. při připojování na port AUTH), což může být často legitimní požadavek. Zapamatujme si také, že první platné pravidlo, které paket přijme, zahodí, nebo odmítne je zároveň pravidlem pro daný paket posledním. Neuplatňuje se zde defaultní přístup BSD pf, kde poslední platné pravidlo rozhoduje. 4 Zadomácíúkolsipromyslete,cosestanevpřípaděšifrovanéhopřenosuřídícíchdat,jaktomujeuprotokolu FTPS(FTPsSSL/TLS)ajaktoobejít. Středisko UN*Xových technologií 3
6 Jak psát firewall Pravidlaiptablessenarozdílodpravidel jiných firewallůnedajínaklikat 5,alezapisujíse ve formě příkazů. Zde vedou dvě cesty, jak iptables nakonfigurovat buď můžeme pravidla zadávat v konzoli a v okamžiku, kdy se zdá, že fungují, je uložit příkazem iptables save. Takto se dají ale konstruovat jen jednoduché firewally, navíc si v případě modulů musíte zajistit jejich natažení jinou cestou. Rovněž tak musíte konfiguraci v/proc upravit jinde. Druhá možnost je napsat si skript, ve kterém si nadefinujete nejen pravidla, ale i natáhnete moduly a upravíte konfiguraci v/proc. Třetí cestou je napsat si skript, kde definujete pouze pravidla, která po spuštění skriptu uložíte pomocí iptables save a/proc a moduly si opět ošéfujete jinak. 6 Jelikožautortotohotextuosobněupřednostňujecestuskriptu,budetese s ní muset smířit(alespoň pro účely vysvětlení). Čtenáři ale jistě vědí, kde upravit/proc a natáhnout moduly a mohou si tedy jít cestou vlastní. 7 Základní příkazy iptables Uveďme si zde opravdu jen základní příkazy iptables: iptables[ t tabulka] A chain pravidlo přidá na konec daného řetězce(chainu) pravidlo. Je li uvedena tabulka, bude pravidlo přidáno do této konkrétní tabulky. iptables[ ttabulka] Ichainřádekpravidlo vložídodanéhochainunadanýřádek pravidlo. Je li uvedena tabulka, bude pravidlo přidáno do ní. Tento příkaz má využití přizadávánípravidelvkonzoli,veskriptupronějneníuplatnění. 7 iptables[ t tabulka] D chain řádek pravidlo smaže pravidlo zadané číslem řádku nebo definicí. iptables[ t tabulka] L[chain][parametry] vypíše pravidla, tabulka a chain jsou nepovinné. Parametry jsou: v verbose, ukecaný výpis n nepřekládáipadresyaporty line-numbers vypíšeipořadípravidla(hodísepromazánípravidelzkonzole) iptables[ t tabulka] F chain úplné vymazání(flush). Je li zadán chain, jsou smazána pouze jeho pravidla. iptables[ t tabulka] N chain založí nový chain. iptables[ t tabulka] X chain smaže zadaný uživatelem vytvořený chain. iptables[ t tabulka] P chain politika definuje danému chainu výchozí politiku(pravidlo) DROP, ACCEPT, REJECT. 5 Tonenítakdocelapravda,nicméněslušnílinuxácitonedělajíaklikáníradějipřenechajízvláštnímdruhům pokémona zvaným Klikaču. 6 Proč vlastněvůbecvzniklypříkazyiptables saveaiptables-restore?inu,sjejichpoužitímjenatažení pravidel dílem okamžiku, skriptu to trvá několikanásobně déle. 7 Tedypokudsinechcetenapsatguláš. Středisko UN*Xových technologií 4
8 Vzorovékonfigurace Vzorové konfigurace tu úmyslně nebudou uvedeny, neboť iptables se dají psát mnoha různými způsobyajávásnechciučitzrovnatenmůjaochuditvástakospecifikajinýchvariant. Napřednášcebylprobránjedenzmýchskriptů,aletospíšejennaosvětleníaprorychlé pochopení problému. Není v mých možnostech zde nějaký konkrétní příklad vysvětlovat, proto bych zájemce odkázal na vzorové skripty jichž se na internetu válí hromady(doporučuji http://iptables-tutorial.frozentux.net). 9 Doporučenáliteratura man 8 iptables man 8 iptables-save man 8 iptables-restore http://www.netfilter.org http://iptables-tutorial.frozentux.net/ Jednoznačně nejznámější a nejlepší materiál kiptables /etc/services /etc/protocols 10 O tomto dokumentu Tento dokument byl vysázen v systému LATEX. Autor se omlouvá za(tentokrát velmi) nedokonalou sazbu. Věcné chyby reportujte na k.dedecius@sh.cvut.cz nebo na webových stránkách projektu SUT http://sut.sh.cvut.cz. Tento dokument byl připraven jako pomůcka k přednášce Úvod do UN*Xových firewallů. Můžete jej volně šířit v nezměněné podobě pod stejným názvem. Středisko UN*Xových technologií 5