• No results found

Statefull Firewall for Virtlab System

N/A
N/A
Protected

Academic year: 2021

Share "Statefull Firewall for Virtlab System"

Copied!
41
0
0

Loading.... (view fulltext now)

Full text

(1)

Katedra informatiky

Nasazen´ı stavov ´eho filtru s´ıt’ov ´eho

provozu pro syst ´em Virtlab

Statefull Firewall for Virtlab System

(2)
(3)
(4)

dov´an´ı n´astroje iptables a jeho moˇzn ´ych grafick ´ych a programov ´ych rozˇs´ıˇren´ı. V pr´aci jsou shrnuty poznatky z´ıskann´e pˇri t´eto ˇcinnost a v ´ysledeky z n´ı plynouc´ı.

Kl´ıˇcov ´a slova: Virtlab, paketov ´y filtr, stavov ´y paketov ´y filtr, netfilter, iptables, linux

Abstract

The goal of this thesis is to create a state packet filter for the needs of the Virtlab and also conduct research of the iptables tool and its user intrface and programmatic extensions. In the paper, there are summarized the information gained during the research and its results.

(5)

Obsah

1 Uvod´ 4

2 Vysvˇetlen´ı pojmu firewall 5

3 Typy firewallu 6

3.1 Paketov ´y filtry . . . 6

3.2 Aplikaˇcn´ı br´ana . . . 6

3.3 Stavov ´y paketov ´y filtr . . . 6

3.4 Stavov ´y paketov ´y filtry s kontrolou protokol ˚u a IDS . . . 7

4 Netfilter/iptables 8 4.1 Tabulky iptables . . . 8

4.2 ˇRetˇezce iptables . . . 8

4.3 Tvorba vlastn´ıch ˇretezc ˚u . . . 9

4.4 Typy akc´ı firewallu . . . 9

4.5 Match extension . . . 9

4.6 Network Address Translation . . . 10

5 Ostatn´ı n´astroje pro spr´avu iptables 11 5.1 FwBuilder . . . 11

5.2 Guarddog . . . 13

6 Virtual Network Lab 14 6.1 Obecn´e informace o Virtual Network Lab . . . 14

6.2 Popis server ˚u s´ıtˇe Virtlab . . . 15

6.3 Virtlab - s´ıt’ov´a komunikace . . . 17

7 Stavov ´y firewall pro potˇreby Virtlab 18 7.1 popis jednotliv ´ych pravidel ve scriptu firewallu . . . 18

7.2 Kompletn´ı script pro vytvoˇren´ı firewallu . . . 23

8 Z´avˇer 36

(6)

Seznam obr ´azk ˚u

1 GUI-Firewall builder . . . 11 2 Fwbuilder-z´akladn´ı nastaven´ı . . . 12 3 GUI-Guarddog . . . 13

(7)

Seznam v ´ypis ˚u zdrojov ´eho k ´odu

1 Snytaxe pravidel v ip tables . . . 9

2 Nastaven´ı z´akladn´ıch parametr ˚u . . . 18

3 Nastaven´ı z´akladn´ıch parametr ˚u . . . 18

4 Nastaven´ı politik firewallu . . . 19

5 ˇretˇezec pro zpr´avu logov´an´ı . . . 19

6 ˇretˇezec pro ochranu proti spoofingu . . . 20

7 ˇretˇezec povoluj´ıc´ı porty pro vybran´e protokoly . . . 20

8 ˇretˇezec povoluj´ıc´ı porty pro potˇreby s´ıtˇe Virtlab . . . 20

9 ˇretˇezec povoluj´ıc´ı porty pro IPsec . . . 21

10 ˇretˇezec povoluj´ıc´ı porty pro m´enˇe uˇz´ıvan´e protokoly . . . 21

11 Ochrana proti AUTH protokolu . . . 22

12 Omezen´ı typ ˚u ICMP zpr´av . . . 22

13 Povolen´ı provozu na virtualn´ım rozhran´ı syst´emu . . . 22

14 Povolen´ı broadcastu z vnitˇrn´ı s´ıtˇe . . . 22

15 Povolen´ı broadcastu z vnitˇrn´ı s´ıtˇe . . . 23

16 Zahozen´ı veˇsker´eho nevyhovuj´ıc´ıho provozu . . . 23

(8)

1

Uvod

´

C´ılem t´eto pr´ace bylo vytvoˇren´ı firewallu, pomoc´ı linuxov´eho programu IPTABLES. Teno firewall by mˇel b ´yt nasazen v prostˇred´ı virtu´aln´ı s´ıt’ov´e laboratoˇre, provozovan´e VˇSB-TUO naz ´yvanou VirtLab. V tomto pˇr´ıpadˇe by se mˇelo jednat o stavov ´y firewall na vnˇejˇs´ım rozhran´ı s´ıtˇe VirtLab.

(9)

2

Vysv ˇetlen´ı pojmu firewall

Firewall je s´ıt’ov ´y prvek, kter ´y slouˇz´ı k zabezpeˇcov´an´ı s´ıt’ov´eho provozu mezi s´ıtˇemi a klienty s r ˚uznou ´urovn´ı d ˚uvˇeryhodnosti a zabezpeˇcen´ım. Firewall lze tak´e popsat jako kontroln´ı bod v s´ıti, kter ´ym proch´azej´ı pakety a jsou zde definov´ana pravidla pro komu-nikaci mezi s´ıtˇemi, kter´e jsou j´ım od sebe oddˇeleny. Dˇr´ıve k tvorbˇe tˇechto pravidel plnˇe dostaˇcovala znalost c´ılov´e a zdrojov´e ip adresy a portu, na kter´em se komunikovalo.

V dneˇsn´ı dobˇe se vyuˇz´ıv´a kromˇe tˇechto informac´ı, tak´e informac´ı o stavu spojen´ı, znalost kontrolovan ´ych paket ˚u a pˇr´ıpadnˇe prvky Intrusion Detection System (Syst´em detekce pr ˚uniku)

Typy firewallu: • Paketov ´y filtry • Aplikaˇcn´ı br ´any • Stavov´e paketov´e filtry

(10)

3

Typy firewallu

3.1 Paketov ´y filtry

Jednou z nejjednoduˇsˇs´ıch a nejstarˇs´ıch pouˇz´ıvan ´ych moˇznost´ı nastaven´ı firewallu, je pa-ketov ´y filtr, kde jsou jednotliv´e pakety tˇr´ızeny podle ip adresy a portu zdroje a c´ıle, tato kontrola se prov´ad´ı na tˇret´ı a ˇctvrt´e vrstvˇe ISO-OSI modelu. U tohoto typu firewallu se vˇsak vyskytuje nebezpeˇc´ı, u sloˇzitˇejˇs´ıch protokol ˚u jako napˇr´ıklad FTP. Jelikoˇz v tomto nastaven´ınen´ı v ˚ubec kontrolov´an obsah pˇren´aˇsen ´ych paket ˚u, mohou nekter´e protokoly otevˇr´ıt n´ami nepˇredpokl´adan´e porty a smˇery, kter´e mohou b ´yt vyuˇzity pro n´as neˇz´adan ´ymi protokoly.

Navzdory tˇemto nev ´yhod´am je tento firewall d´ıky sv´e jednoduchosti, dosahovat u tohoto ˇreˇsen´ı vysok´e rychlosti kontroly paket ˚u. Proto je toto ˇreˇsen´ı pouˇz´ıv´ano v m´ıstech, kde nen´ı vyˇzadov´ana dukladn´a kontrola provozu a je kladen d ˚uraz na vysokou rychlost pr ˚uchodu velk´eho objemu dat pˇrez firewall.

Mezi pˇredstavitele paketov ´ych filtr ˚u patˇr´ı access listy d´ale jen ACL, kter´e jsou vyuˇz´ıv´any v syst´emech IOS nebo JunOS, nebo tak´e napˇr´ıklad ipchains.

3.2 Aplika ˇcn´ı br ´ana

Tento typ firewallu oproti pˇredchoz´ımu modelu plnˇe oddˇeluje s´ıtˇe, mezi kter ´ymi je vy-budov´an. Cel ´y tento model funguje na principu klient-server, kde se ze zdrojov´e adresy inici´atora spojen´ı odeˇslou data na aplikaˇcn´ı br´anu, nˇekdy tak´e naz ´yvanou proxy firewall, kter ´ym je spracov´ana a na z´akladˇe poˇzadavku klienta, je vytvoˇreno nov´e spojen´ı na c´ılov ´y server. Data kter´a pak firewall obdrˇz´ı od c´ılov´eho serveru, opˇet stejn ´ym zp ˚usobem pˇred´a zpˇet klientovi. Cel ´y tento proces se prov´ad´ı na sedm´e aplikaˇcn´ı vrstvˇe OSI modelu, odtud tak´e n´azev aplikaˇcn´ı br´ana. Vyuˇz´ıv´an´ı tohoto modelu m´a pak za n´asledek to, ˇze klient nevid´ı pˇr´ımo adresu c´ılov´eho serveru, ale vnˇejˇs´ı adresu aplikaˇcn´ı br´any, z ˇcehoˇz plyne ˇze na aplikaˇcn´ı br´anˇe dochaz´ı k pˇrekladu adres (NAT).

Nev ´yhodou tohoto typu firewallu je jeho vysok´a n´aroˇcnost na hardware, z kter´e se odv´ıj´ı ˇr´adovˇe vyˇsˇs´ı ˇcasov´a n´aroˇcnost na zpracov´an´ı paketu, a taky vyˇsˇs´ı latence neˇz u paketov´eho filtru. Pro kaˇzd ´y pouˇzit ´y protokol je nutn´e naps´an´ı speci´aln´ı proxy, proto je tak´e omezen´ı v poˇctu kontrolovan ´ych protokol ˚u. Mezi v ´yhody naopak patˇr´ı vyˇsˇs´ı za-bezpeˇcen´ı sloˇzitˇejˇs´ıch protokol ˚u, a tak´e kompletn´ı oddˇelen´ı jednotliv ´ych s´ıt’´ı.

3.3 Stavov ´y paketov ´y filtr

Stavov ´y paketov ´y filtr je vylepˇsenou verz´ı bˇeˇzn´eho paketov´eho filtru. Doch´az´ı v nˇem k jednoduch´e kontrole pˇr´ıchoz´ıch paket ˚u, na z´akladˇe pravidel vztahuj´ıc´ıch se na ip adresy a po rty. Na rozd´ıl od klasick´eho paketov´eho filtru, se zde ukl´adaj´ı tak´e informace o povolen ´ych spojen´ıch a ty jsou pak vyuˇz´ıv´any pˇri rozhodovac´ım procesu firewallu. D´ıky tomuto je stavov ´y paketov ´y filter schopen zjiˇst’ovat, zda pr´avˇe proch´azej´ıc´ı paket patˇr´ı do jiˇz otevˇren´eho spojen´ı, nebo zda mus´ı znovu proj´ıt rozhodovac´ım procesem fi-rewallu, t´ımto se velmi zrychluje zpracov´an´ı paketu, a tak´e velmi zjednoduˇsuje

(11)

konfigu-raci paketov´eho filtru, protoˇze jiˇz do pravidel nen´ı nutno nastavovat akci pro odpovˇedn´ı smˇer komunikace, ten je vytvoˇren automaticky. Napˇr´ıklad u protokolu FTP je tˇreba na-stavit pouze povolen´ı odchoz´ıho smˇeru a komunikace na portu 21, kter´a je standartnˇe vyuˇz´ıv´ana pro komunikace u protokolu FTP. Odpovedn´ı smˇer na portu 21 je povolen automaticky, z´arove ˇn je rovnˇeˇz povolena komunikace na portu 22, kter ´y je pouˇz´ıv´an pro odes´ıl´an´ı soubor ˚u pomoc´ı protokolu FTP.

Mezi v ´yhody tohoto typu firewallu patˇr´ı kromˇe vysok´e rychlosti zpracov´an´ı paketu, coˇz je d´ano jednak relativn´ı jednoduchost´ı paketov´eho filtru a taky vyuˇzit´ım uloˇzen ´ych informac´ı o otevˇren ´ych spojen´ıch. Dalˇs´ı v ´yhodou je snadnˇejˇs´ı konfigurace oproti pˇredeˇsl ´ym firewall ˚um, z d ˚uvodu odpadaj´ıc´ı nutnosti konfigurace pravidel pro odpovˇedn´ı smˇery, t´ım p´adem i niˇzˇs´ı n´achylnost k chybˇem pˇri pravideln´e ´udrˇzbˇe.

Pˇr´ıkladem puˇzit´ı stavov ´ych paketov ´ych filtr ˚u je napˇr´ıklad Cisco IOS firewall nebo v prostˇred´ı linuxu program iptables.

3.4 Stavov ´y paketov ´y filtry s kontrolou protokol ˚u a IDS

[?] U tˇechto typ ˚u firewallu doch´az´ı kromˇe kontroly paketu na z´akladˇe uˇzivatelem vy-tvoˇren ´ych pravidel a d´ıky conection trackingu tak´e kontrole sloˇzitˇejˇs´ıch dobˇre zn´am ´ych protolo ˚u, jako napˇr´ıklad FTP, tak predevˇs´ım pˇrin´aˇs´ı oproti pˇredchoz ´ym variant´am IDS (Deep Inspection nebo Application Intelligence podle v ´yrobce firewallu), kter´e umoˇzouje kontrolovat proch´azej´ıc´ı spojen´ı aˇz na ´urove ˇn korektnosti proch´azej´ıc´ıch dat zn´am ´ych protokol ˚u i aplikac´ı. Mohou tak napˇr´ıklad zak´azat pr ˚uchod http spojen´ı, v nˇemˇz ob-jev´ı indik´atory, ˇze se nejedn´a o poˇzadavek na WWW server, ale tunelov´an´ı jin´eho pro-tokolu, coˇz ˇcasto vyuˇz´ıvaj´ı klienti P2P s´ıt´ı (ICQ, gnutella, napster, apod.), nebo kdyˇz data v hlaviˇcce e-mailu nespl ˇnuj´ı poˇzadavky RFC apod.

Nejnovˇeji se do firewall ˚u integruj´ı tzv. in-line IDS (Intrusion Detection Systems – syst´emy pro detekci ´utok ˚u). Tyto syst´emy pracuj´ı podobnˇe jako antiviry a pomoc´ı da-tab´aze signatur a heuristick´e anal ´yzy jsou schopny odhalit vzorce ´utok ˚u i ve zd´anlivˇe nesouvisej´ıc´ıch pokusech o spojen´ı, napˇr. skenov´an´ı adresn´ıho rozsahu, rozsahu port ˚u, zn´am´e signatury ´utok ˚u uvnitˇr povolen ´ych spojen´ı apod.

V ´yhodou tˇechto syst´em ˚u je vysok´a ´urove ˇn bezpeˇcnosti kontroly proch´azej´ıc´ıch pro-tokol ˚u pˇri zachov´an´ı relativnˇe snadn´e konfigurace, pomˇernˇe vysok´a rychlost kontroly ve srovn´an´ı s aplikaˇcn´ımi branami, nicm´enˇe je zn´at v ´yznamn´e zpomalen´ı (zhruba o tˇretinu aˇz polovinu) proti stavov ´ym paketov ´ym filtr ˚um.

Nev ´yhodou je zejm´ena to, ˇze z hlediska bezpeˇcnosti designu je z´akladn´ım pravidlem bezpeˇcnosti udrˇzovat bezpeˇcnostn´ı syst´emy co nejjednoduˇsˇs´ı a nejmenˇs´ı. Tyto typy fi-rewall ˚u integruj´ı obrovsk´e mnoˇzstv´ı funkcionality a zvyˇsuj´ı tak pravdˇepodobnost, ˇze v nˇekter´e ˇc´asti jejich k ´odu bude zneuˇziteln´a chyba, kter´a povede ke kompromitov´an´ı cel´eho syst´emu.

(12)

4

Netfilter/iptables

Iptables je linuxov ´y program, kter ´y slouˇz´ı v pˇr´ıkazov´em ˇr´adku pro ovl´ad´an´ı ˇc´asti li-nuxov´eho j´adra Netfilter, kter ´y se star´a o vˇsechna pˇr´ıchoz´ı, odchoz´ı i proch´azej´ıc´ı spo-jen´ı, jin ´ymi slovy se pomoc´ı iptables se tvoˇr´ı pravidla pro stavov ´y firewall, obsaˇzen ´y ve vˇetˇsinˇe syst´em ˚u zaloˇzen ´ych na linuxu. N´astroj iptables je pouˇz´ıv´an od verze j´adra 2.4, kde nahradil v predchoz´ıch verz´ıch obsaˇzen ´y ipchains a ipfwadm. Iptables manipuluje s Xtables, kter´e n´aslednˇe obsahuj´ı ˇretˇezce v nichˇz jsou jednotliv´a pravidla pro paketov ´y filtr.

4.1 Tabulky iptables

Iptables se skl´adaj´ı ze 4 z´akladn´ıch tabulek, kter´e n´aslednˇe obsahuj´ı jednotliv´e ˇretˇezce. Typy tabulek firewallu

• FILTER Implicitnˇe je nastavena tato tabulka. Tabulka obsahuje ˇretˇezce INPUT, OUT-PUT a FORWARD

• NAT Tabulka obsahuje ˇretˇezce POSTROUTING a PREROUTING. V t´eto tabulce doch´az´ı k modifikaci paketu neboli NAT, kter´e jiˇz proˇsli routovac´ı tabulkou. • MANGLE Obsahuje tyto tabulky INPUT, OUTPUT, FORWARD, PREROUTING

a POSTROUTING. Nach´azej´ı se v n´ı sady pravidel pro ´upravu hlaviˇcky paketu, napˇr´ıklad manipulace s TTL, TOS flagy.

• RAW ˇretˇezce PREROUTING, OUTPUT. Tato tabulka pˇrev´aˇznˇe obsahuje pravidla aplikovan´a na spojen´ı, kteˇr´e nechceme zan´aˇset do seznamu conntrack, tato tabulka je vol´ana jeˇstˇe pˇred z´apisem spojen´ı do tohoto seznamu.

4.2 Ret ˇezce iptablesˇ

ˇretˇezce v iptables jsou uspoˇr´adan´e soubory jednotliv ´ych pravidel. U z´akladn´ıch pˇredem definovan ´ych ˇretˇezc ˚u, napˇr´ıklad v tabulce FILTER jsou to OUTPUT, INPUT a FORWARD se nav´ıc definuj´ı jeˇstˇe politiky, coˇz jsou pravidla plat´ıc´ı obecnˇe pro cel ´y ˇretˇezec a pouˇz´ıvaj´ı se jako v ´ychoz´ı pravidlo pokud paket nevyhovuje ˇz´adn´emu pravidlu v ˇretˇezci.

ˇretˇezec INPUT - t´ımto ˇretˇezcem proch´azej´ı vˇsechny pakety, kter´e maj´ı v hlaviˇcce pa-ketu jako c´ılovou adresu zaps´anu ip adresu serveru na kter´em je firewall spuˇstˇen a nen´ı t´ımto strojem routov´an d´ale.

ˇretˇezec OUTPUT - do tohoto ˇretˇezce spadaj´ı pravidla ovliv ˇnuj´ıc´ı pakety v jejichˇz hlaviˇcce je zdrojov´a adresa shodn´a s adresou n´ami provozovan´eho stroje, takˇze t´ımto ˇretˇezcem proch´azej´ı vˇsechny odchoz´ı spojen´ı.

ˇretˇezec FORWARD - v tomot ˇretˇezci jsou obsaˇzena pravidla zab´ıvaj´ıc´ı se pakety, kter´e pˇrez prvek na nˇemˇz je paketov ´y filtr provozov´an pouze proch´azej´ı, neboli je t´ımto s´ıt’ov ´ym prvkem pouze routov´an d´ale do s´ıtˇe, takˇze je o nˇem z´aznam v routovac´ı tabulce.

(13)

4.3 Tvorba vlastn´ıch ˇretezc ˚u

Iptables poskytuje i moˇznost vytv´aˇren´ı vlastn´ıch ˇretˇezc ˚u. Tato moˇznost napom´ah´a k lepˇs´ı ˇsk´alovatelnosti a pˇrehlednosti navrhovan´eho firewallu. Mimo tyto v ´yhody tak´e velmi ulehˇcuje hardwaru firewallu, to z toho d ˚uvodu ˇze pravidla v jednotliv´ıch ˇretˇezc´ıch jsou kontrolov´ana sekvenˇcnˇe, proto ˇc´ım m´enˇe pravidel je v ˇretˇezci, tim je zpracov´an´ı to-hoto ˇretˇezce rychlejˇs´ı. U vetˇs´ıho moˇzstv´ı pravidel v jednom ˇretˇezci, pˇr´ıpadn´em ˇspatn´em uspoˇr´ad´an´ı pravidel v ˇretˇezci ( velmi frekventovan´a pravidla jsou uvedena mezi po-sledn´ımi a proto je nutn´e proj´ıt i mˇenˇe pouˇz´ıvan´a pravidla, kter´a jsou uvedena pˇred nimi) zatˇeˇzuje ne ˚umˇern ´ym zp ˚usobem hardware a m ˚uˇze m´ıt za n´asledek sn´ıˇzen´ı propustnosti datov´eho toku. S vyuˇzit´ım vlastn´ıch ˇretˇezc ˚u lze tuto vlastnost omezit, t´ım ˇze s´erie pravi-del pro jednotliv´e situace um´ıst’´ıme do samostatn ´ych ˇretˇezc ˚u, na kter´e se pak odkazujeme pravidly z jednoho z defaultn´ıch ˇretˇezc ˚u jako INPUT, OUTPU, FORWARD atd., ˇc´ımˇz se rapidnˇe sn´ıˇz´ı poˇcet kontrolovan ´ych pravidel.

4.4 Typy akc´ı firewallu

Snytaxe pravidel v ip tables:

iptables [tabulka] [akce] [retezec] [ ip cst ] [match] [ cl ] [ cl info ]

V ´ypis 1: Snytaxe pravidel v ip tables

Pokud tedy paket vyhovuje pravidlu ve spr´avn´e tabulce a ˇretˇezci, je moˇzno zjiˇst’ovat zda paket vyhovuje dalˇs´ım informac´ım obsaˇzen ´ym v hlaviˇcce kaˇzd´eho paketu, jako jsou napˇr´ıklad zdrojov´a,c´ıov´a adresa nebo zdrojov ´y,c´ılov ´y port pˇr´ıpadnˇe s´ıt’ov´e rozhran´ı zaˇr´ızen´ı.

Pokud tˇemto parametr ˚um paket nevyhovuje postupuje tento paket k dalˇs´ımu pravi-dlu v ˇretˇezci, pˇripadnˇe pokud jiˇz ˇz´adn´e dalˇs´ı pravidlo nen´ı je na nˇej aplikov´ana politika dan´eho ˇretˇezce, v opaˇcn´em pˇr´ıpadˇe je toto pravidla na paket aplikov´ano a vykon´a akci zadanou tv ˚urcem firewallu. Tˇechto akc´ı je nˇekolik:

• ACCEPT Paket je propuˇstˇen skrze firewall. • DROP Prost´e zahozen´ı paketu.

• REJECT Zahozen´ı paketu, s t´ım rozd´ılem, ˇze zpˇet na zdrojovou adresu, ze kter´e paket priˇsel, je odesl´ana ICMP zpr´ava o zahozen´ı tohoto paketu.

• LOG Pˇri t´eto akci dochaz´ı k tomu, ˇze paket po vykon´an´ı tohoto pravidla neopust´ı fi-rewall jako u pˇredchoz´ıch akc´ı, ale pokraˇcuje d´ale v proch´azen´ı ˇretˇezce. Toto pravi-dlo bylo dod´ano do pozdˇejˇs´ı verze kernelu. Pˇri t´eto akci je do bˇeˇzn´eho logu syst´emu zaps´ana hlaviˇcka kontrolovan´eho paketu.

4.5 Match extension

Pro lepˇs´ı specifikaci jednotliv ´ych pravidel se vyuˇz´ıv´a rozˇs´ıˇren ´ych moˇznost´ı iptables, kter´e je moˇzno zapnou v j´adru syst´emu. Tˇechto modul ˚u je pomˇernˇe velk´e mnoˇzstv´ı, mezi ˇcasto

(14)

pouˇz´ıvan´e patˇr´ı napˇr´ıklad rozˇs´ıˇren´ı limity, kter´e lze pouˇz´ıt k omezen´ı poˇctu vytvoˇren ´ych spojen´ı, nebo napˇr´ıklad poˇcetu z´apis ˚u do logu za urˇcit ´y ˇcasov ´y ´usek. V tomto pˇr´ıpadˇe pokud je shodn ´ych z´apis ˚u v´ıce, lze i urˇcit poˇcet z´apis ˚u z vytvoˇren´eho spojen´ı.

Mezi dalˇs´ı rozˇs´ıˇren´ı patˇr´ı platnost pravidla pouze po urˇcit ´y ˇcasov ´y ´usek. Dalˇs´ım pod-statn ´ym modulem, kter ´y pˇrev´aˇznˇe odliˇsuje iptables od jeho pˇredch ˚udce ipchain, je mo-dul tvoˇr´ıc´ı z iptables stavov ´y firewall, kde m ˚uˇzeme urˇcit stav paket ˚u, jako NEW, REA-LETED, FIN, INVALID, kter´e bude pravidlo vyuˇz´ıvat pˇri rozhodov´an´ı aplikaˇcn´ıho filtru.

Jako dalˇs´ı pˇr´ıklad rozˇs´ıˇren´ı lze uv´est modul accont, kter ´y n´am umoˇzouje zaznamen´av´an´ı trafficu na s´ıt’ov´em rozhran´ı firewallu, d´ıky n´asledn ´ym ´uprav´am lze z´ıskan´a data pouˇz´ıt k vytvoˇren´ı grufu z´atˇeˇze firewallu.

4.6 Network Address Translation

Network Address Translation neboli NAT se pouˇz´ıv´a pˇri potˇrebˇe routru upravovat hlaviˇcky paket ˚u, kter´e j´ım proch´az´ı. Tento proces se v iptables odehr´av´a v tabulce NAT v ˇretˇezc´ıch PREROUTING kde se prov´ad´ı DNAT neboli zmˇeny c´ılov´e adresy ˇci portu pˇr´ıpadnˇe pˇresmˇerov´an´ı na jinn ´y port.

Obdobnˇe je tomu u SNAT, kter ´y je provozov´an v tabulce NAT v ˇretˇezci POSTROU-TING a podobnˇe jako v pˇredchoz´ım pˇr´ıpadˇe zde doch´az´ı k modifikaci zdrojov´e ipadres a port ˚u paketu.

Technika NAT se v dneˇsn´ı dobˇe zaˇc´ınaj´ıc´ıho nedostatku voln ´ych, veˇrejn ´ych ip adres pouˇz´ıv´a k takzvan´e maˇskar´adˇe, kde je za routrem v´ıce adres a pomoc´ı NAT jsou pak hlaviˇcky paket ˚u upravov´any tak, aby se vˇsechny adresy navenek z internetu jevily jako jedna veˇrejn´a adresa. Toto nastaven´ı pˇrin´aˇs´ı v ´yznamnou ´usporu ip adres, avˇsak nese se-bou jak zv ´yˇsen´e n´aroky na hardware routru, tak tak´e probl´emy urˇcit ´ych aplikac´ı pˇri ko-munikaci s vnˇejˇs´ı s´ıt´ı.

(15)

5

Ostatn´ı n ´astroje pro spr ´avu iptables

5.1 FwBuilder

FwBuilder je graficko uˇzivatelsk´e rozhran´ı generuj´ıc´ı skripty pro tvorbu firewallu nad iptables. Kromˇe pravidel pro firewall m´a tento program ve sv´e funkcionalitˇe tak´e obsaˇzenu spr´avu routovac´ıch a NATovac´ıch pravidel. Tento software je ˇs´ıˇren pod licenc´ı GNU/-GPL, takˇze je k dost´an´ı zdarma.

Je obsaˇzen v bal´ıˇckovac´ıch syst´emech vˇetˇsiny bˇeˇzn ´ych distribuc´ı syst´emu Linux. Kromˇe Linuxu lze toto GUI provozovat jak na syst´emu, Windows tak tak´e na OS X, OpenBSD, FreeBSD d´ıky t´eto univerz´alnosti je hojnˇe vyuˇz´ıv´an a usnad ˇnuje pˇren´aˇsen´ı nastaven´ı mezi tˇemito syst´emy, pomoc´ı funkce import/export.

V ´yhodou Firewall Builderu je relativn´ı pˇrehlednost jednotliv ´ych pravidel firewallu. Kromˇe t´eto v ´yhody poskytuje tento program tak´e automatick´e dopl ˇnov´an´ı reverzn´ıch pravidel v paketov´em filtru, tato schopnost se hod´ı hlavnˇe v pˇr´ıpadech, kdy je z nˇejak´eho d ˚uvodu vypnut connection tracking.

Tak´e odpad´a nutn´a znalost jednotliv ´ych, dobˇre zn´am ´ych port ˚u pro pouˇzit´e protokoly, tyto porty jsou jiˇz v programu obsaˇzeny a slovnˇe pops´any, z ˇcehoˇz plyne zjednoduˇsˇsen´ı konfigurace a pravideln´e ˚udrˇzby firewallu a tud´ıˇz niˇzˇs´ı n´achylnost ke vzniku chyby v d ˚usledku lidsk´eho faktoru.

(16)

5.1.1 Postup tvorby firewallu ve fwbuildru

Jednou z prvn´ıch vˇec´ı pˇri tvorbˇe nov´eho firewallu v prostˇred´ı fwbuildru, je nutnost v ´ybˇeru softwaru na kter´em firewall pobˇeˇz´ı, na v ´ybˇer je velk´e mnoˇzstv´ı softwaru od Cisco IOS ACL, pˇrez starˇs´ı ipfilter aˇz po novˇejˇs´ı iptables. Dalˇs´ım krokem je v ´ybˇer operaˇcn´ıho syst´emu na kter´em firewall bˇeˇz´ı. Na v ´ybˇer jsou nejr ˚uznˇejˇs´ı OS jako tˇreba klasick´e Win-dows pak tak´e Linux, ale i m´enˇe zn´am´e jako HP ProCurve nebo Sveasoft.

N´asleduj´ıc´ım krokem a z´arove ˇn velk ´y ulehˇcen´ım pro zaˇc´ınaj´ıc´ı administratory je moˇznost v ´ybˇeru templatu, kde je na v ´ybˇer z nˇekolika nejˇcastˇeji se vyskytuj´ıc´ıch konfigurac´ı, pro kter´e jsou pˇripravena jednotliv´a z´akladn´ı pravidla jako napˇr´ıklad antispoof pravidla atd.

Obr´azek 2: Fwbuilder-z´akladn´ı nastaven´ı

Po nastaven´ı z´akladn´ıch hodnot se jiˇz m ˚uˇzeme pˇrej´ıt k tvorbˇe jednoliv ´ych pravidel fi-rewallu. K pomoci pˇri tvorbˇe pravidel slouˇz´ı syst´em knihoven ve kter ´ych jsou uspoˇr´ad´any jednotliv´e sluˇzby funguj´ıc´ı na dobˇrezn´am ´ych portech, tak tak´e rozsahy ip adress zaregis-trovan´e spoleˇcenstv´ım IANA pro v ´yhradn´ı pouˇzit´ı jako dom´ac´ı s´ıtˇe a jin´e. Sami uˇzivatel´e si mohou tvoˇrit vlastn´ı knihovny, kter´e se daj´ı pˇren´aˇset mezi jednotlivimy syst´emy. Po vy-tvoˇren´ı sady pravidel firewallu se m ˚uˇze pˇrej´ıt ke kompilaci pravidel a vyvy-tvoˇren´ı skriptu, kter ´y se podle zvolen´eho softwaru a operaˇcn´ıho syst´emu m ˚uˇze pouˇz´ıt na dan´em stroji. U kompilace lze v nastaven´ı tak´e zapnout debuging ke snadnˇejˇs´ımu odhalov´an´ı chyb. FWbuilder obsahuje i n´astroj k automatick´emu zaveden´ı zkompilovan´eho souboru na zvolen ´y server, kter ´y je pˇripojen ´y k s´ıti.

(17)

5.2 Guarddog

Software 2.4 a 2.6 j´adru a je ˇs´ıˇreno pod licenc´ı GNU/GPL a tud´ıˇz zdarma. V ´yhodou to-hoto GUI je velk´e mnoˇzstv´ı pˇrednastaven ´ych vzor ˚u, kter´e pak m ˚uˇze i m´enˇe zkuˇsen ´y uˇzivatel upravit a vytvoˇrit dobˇre funguj´ıc´ı firewall. Dalˇs´ı v ´yhodou tohoto softwaru je moˇznost importu/exportu vytvoˇren´eho nastaven´ı a mezi dalˇs´ı v ´yhody patˇr´ı kvalitn´ı technick´a dokumentace od tv ˚urc ˚u aplikace.

(18)

6

Virtual Network Lab

6.1 Obecn ´e informace o Virtual Network Lab

[?] Smyslem projektu Virtlab je zpˇr´ıstupnit laboratorn´ı prvky pro praktickou v ´yuku poˇc´ıtaˇcov ´ych s´ıt´ı vzd´alenˇe prostˇrednictv´ım Internetu. Studenti si mohou pomoc´ı WWW rozhran´ı

re-zervovat laboratorn´ı prvky na urˇcit ´y ˇcasov ´y interval a n´aslednˇe k nim pˇristupovat po-moc´ı bˇeˇzn´eho WWW prohl´ıˇzeˇce s podporou Java applet ˚u. Propojen´ı laboratorn´ıch prvk ˚u se uskuteˇcn´ı automaticky podle v ´ybˇeru konkr´etn´ı ´ulohy ze souboru nab´ızen ´ych labora-torn´ıch ´uloh, nebo si student m ˚uˇze zadat svou vlastn´ı topologii. Syst´em nyn´ı dovoluje spolupr´aci v´ıce lokalit vz´ajemnˇe sd´ılej´ıc´ıch s´ıt’ov´e prvky a realizaci virtu´aln´ıch s´ıt’ov ´ych topologi´ı pˇres Internet. Fyzick´e s´ıt’ov´e prvky nutn´e pro vytvoˇren´ı studentem vybran´e topologie jsou v dobˇe rezervace vyhled´av´any dynamicky ve vˇsech lokalit´ach.

6.1.1 Historie vzniku Virtlab

[?] Myˇslenka virtu´aln´ı laboratoˇre se vyvinula z potˇreby poskytnout moˇznost ˇreˇsen´ı prak-tick ´ych laboratorn´ıch ´uloh student ˚um kombinovan´eho studia a tak´e zpˇr´ıstupnit jinak m´enˇe vyuˇzit´e a ˇcasto n´akladn´e laboratorn´ı s´ıt’ov´e prvky pro samostatnou pr´aci v ˇcasech mimo v ´yuku.

Jej´ı vznik inicioval Petr Gryg´arek a postupnˇe ji realizuje s pomoc´ı diplomant ˚u, zejm´ena inˇzen ´yrsk´eho studia, na katedˇre informatiky. Z´akladn´ı koncepce syst´emu byla definov´ana v roce 2005 v diplomov´e pr´aci Pavla Nˇemce, kter ´y implementoval i z´akladn´ı prototyp aplikace. O rok pozdˇeji prototyp rozˇs´ıˇril formou diplomov´e pr´ace Roman Kub´ın, kter ´y implementoval bezpeˇcnostn´ı prvky, podporu pr´ace student ˚u s tutorem a v n´avaznosti na Automatizovan ´y syst´em spr´avy s´ıt’ov ´ych konfigurac´ı (ASSSK a.k.a. Tatabazmek) vyvi-nut ´y v r´amci diplomov´e pr´ace Davida Seidla moˇznost definice vlastn´ı topologie propo-jen´ı s´ıt’ov ´ych prvk ˚u podle pˇr´an´ı studenta.

Koncepci automatizovan´eho syst´emu pro spojov´an´ı topologi´ı pot´e Petr Gryg´arek zo-becnil, aby bylo moˇzn´e propojovat nejen s´eriov´e porty, ale i Ethernet porty vˇcetnˇe trunk spoj ˚u. Pˇr´ısluˇsn´e konfiguraˇcn´ı skripty implementoval Jiˇr´ı Dvoˇr´ak, ˇc´ımˇz vzniklo tzv. virtu´aln´ı spojovac´ı pole. Pozdˇeji byla s pomoc´ı Tom´aˇse Kuˇcery do syst´emu implementov´any pra-covn´ı stanice simulovan´e s pouˇzit´ım instanc´ı User Mode Linux a za podpory Jiˇr´ıho Dvoˇr´aka tak´e virtu´aln´ı smˇerovaˇce Cisco 7200 realizovan´e s pouˇzit´ım projektu DynaMIPS/Dy-naGen. Martin Milata n´aslednˇe nahradil simulaci stanic pomoc´ı UML pouˇzit´ım XEN, kter ´y se uk´azal se syst´emem Virtlab l´epe integrovateln ´y (pˇr´ıstup na konzole pomoc´ı ˇcist´eho TCP spojen´ı).

Diplomant Ing. Davida Seidla Petr Sedl´aˇr v roce 2007 reimplementoval ASSSK-1 s pouˇzit´ım FPGA (nov´e zaˇr´ızen´ı je naz ´yv´ano ASSSK-2), coˇz zjednoduˇsilo opakovanou rea-lizaci a ˇreˇsen´ı v ´yraznˇe zlevnilo. Ve stejn´e dobˇe dokonˇcili diplomanti Jan Vavˇr´ıˇcek a Tom´aˇs Hrab´alek na distribuovan´e verzi Virtlabu, kter´a umoˇzouje vytv´aˇret rozs´ahlejˇs´ı topologie z laboratorn´ıch prvk ˚u um´ıstˇen ´ych v nˇekolika lokalit´ach pˇripojen ´ych k Internetu a op-tim´alnˇe mapovat fyzick´e laboratorn´ı prvky pro topologie ´uloh paralelnˇe poˇzadovan ´ych r ˚uzn ´ymi studenty. Jiˇr´ı Dvoˇr´ak reimplementoval podle n´avrhu Petra Gryg´arka konfiguraˇcn´ı

(19)

skripty spojovac´ıho pole pro podporu v´ıce lokalit, coˇz umoˇznilo vytv´aˇren´ı virtu´aln´ıch topologi´ı pˇres Internet pomoc´ı tunelovac´ıho serveru Tom´aˇse Hrab´alka. Spojovac´ı syst´em je nyn´ı naz ´yv´an distribuovan ´ym virtu´aln´ım spojovac´ım polem, kter´e dovoluje tunelo-vat provoz mezi segmenty virtu´aln´ıho spojovac´ıho pole um´ıstˇen ´ymi v jednotliv ´ych loka-lit´ach.

6.2 Popis server ˚u s´ıt ˇe Virtlab 6.2.1 Virtlab - Rezerva ˇcn´ı server

[?] Rezervaˇcn´ı server je d´emon, kter ´y bˇeˇz´ı vˇzdy na jednom serveru v kaˇzd´e lokalitˇe dis-tribuovan´eho syst´emu a tedy v cel´em syst´emu bˇeˇz´ı tolik instanc´ı, kolik je definov´ano lokalit. Tento server m´a vˇzdy urˇceno jm´eno sv´e lokality, jm´ena vzd´alen ´ych lokalit a IP adresy jejich rezervaˇcn´ıch server ˚u. D´ale m´a ke kaˇzd´e lokalitˇe uveden seznam s´ıt’ov ´ych prvk ˚u m´ıstn´ı lokality, kter´e m ˚uˇze vzd´alen ´ym lokalit´am poskytnout k zarezervov´an´ı a to podle dan´eho t ´ydenn´ıho rozvrhu.

Kdyˇz ovl´adac´ı software chce zarezervovat urˇcit´e prvky, poˇsle rezervaˇcn´ımu serveru dotaz, kter´e prvky jsou glob´alnˇe v cel´em distribuovan´em syst´emu pro nˇej v urˇcen´em ˇcase k dispozici. Rezervaˇcn´ı server ˇz´adost zpracuje a odeˇsle i do vzd´alen ´ych lokalit. Kaˇzd´a lo-kalita m´a definov´an XML soubor s popisem vybaven´ı m´ıstn´ı laboratoˇre. Z nˇej rezervaˇcn´ı server vybere nezarezervovan´e a povolen´e prvky a odeˇsle v ´ysledn ´y XML soubor tazateli. Rezervaˇcn´ı server, kter ´y rozdistribuov´aval dotaz ovl´adac´ıho software, poskl´ad´a vˇsechny pˇrijat´e XML popisy dostupn´eho vybaven´ı do jedin´eho souboru, kter ´y vr´at´ı tazateli. Nen´ı-li k dispozici ˇz´adn ´y s´ıt’ov ´y prvek, je vr´acen platn ´y soubor, ovˇsem bez zaˇr´ızen´ı.

Ovl´adac´ı software XML soubor od Rezervaˇcn´ıho serveru zpracuje, vybere z nˇej vhodn´e prvky, a m ˚uˇze d´ale ˇz´adat o zarezervov´an´ı seznamu s´ıt’ov ´ych prvk ˚u v dan´em ˇcasov´em rozmez´ı. K tomu vygeneruje glob´alnˇe unik´atn´ı rezervaˇcn´ı id ve tvaru ’cel´e ˇc´ıslo @ n´azev lokality’. Rezervaˇcn´ı server ˇz´adost rozdˇel´ı a poˇsle kaˇzd´e vzd´alen´e lokalitˇe v ˇz´adosti jen ty prvky, kter´e j´ı patˇr´ı. Aby se eliminovaly konflikty, ˇrekne m´ıstn´ı rezervaˇcn´ı server vzd´alen ´ym koleg ˚um, aby onu rezervaci povaˇzovali za doˇcasnou. Povede-li se doˇcasn´a rezervace u vˇsech ˇz´adan ´ych lokalit, je vˇsem rezervace potvrzena trvale. M ˚uˇze ovˇsem doj´ıt k tomu, ˇze si nˇekdo pˇred n´ami jiˇz dan ´y s´ıt’ov ´y prvek zarezervoval a nen´ı moˇzn´e rezervaci u nˇekter ´ych z rezervaˇcn´ıch server ˚u prov´est. Pak k potvrzen´ı samozˇrejmˇe nedojde, po dan´e ˇcasov´e prodlevˇe doˇcasn´e rezervace vyprˇs´ı a ˇz´adost o rezervaci selˇze.

6.2.2 Virtlab - Mazac´ı server

[?] Uˇzivatel´e, bˇehem rezervovan´e ´ulohy, maj´ı moˇznost postupn ´ymi kroky modifikovat poˇc´ateˇcn´ı konfiguraci poskytnut ´ych laboratorn´ıch zaˇr´ızen´ı. Vytv´aˇren´a konfigurace je bˇehem ˇreˇsen´ı ´ulohy souˇc´ast´ı celku, kter ´y vˇsak v okamˇziku ukonˇcen´ı rezervace zanik´a. Automa-ticky generovan´a topologie, nad kterou uˇzivatel svou ´ulohu ˇreˇsil, je rozpojena a labora-torn´ı prvky jsou poskytov´any v budouc´ıch rezervac´ıch, kde je modifikovan´a konfigurace neˇz´adouc´ı.

(20)

Konfiguraci, kterou uˇzivatel pr´avˇe ukonˇcen´e rezervace nemusel korektnˇe odstranit, je zapotˇreb´ı, pˇred znova zapojen´ım dan´eho s´ıt’ov´eho prvku do nov´e topologie, vymazat. Prvek je potˇreba pˇred jeho znovu pouˇzit´ım uv´est do definovan´eho poˇc´ateˇcn´ıho stavu, kter ´y bude dalˇs´ımu uˇzivateli nejv´ıce vyhovovat.

Mazac´ı server je zastoupen ve vˇsech lokalit´ach a jeho prim´arn´ım ´ukolem je odstra ˇnov´an´ı konfigurac´ı, kter´e vznikly na zaˇr´ızen´ıch dan´e lokality bˇehem ˇreˇsen´ı rezervovan ´ych ´uloh. Mazac´ı server vˇzdy po skonˇcen´ı uˇzivatelem zarezervovan´eho ˇcasu uvede konfiguraci pouˇz´ıvan ´ych zaˇr´ızen´ı do dˇr´ıve definovan´eho, poˇc´ateˇcn´ıho stavu.

6.2.3 Virtlab - Konzolov ´y server

[?] Jeho ´ukolem je zprostˇredkovat pˇr´ıstup k s´eriov ´ym nebo telnetov ´ym konzol´ım s´ıt’ov ´ych zaˇr´ızen´ı prostˇrednictv´ım jednoduch´eho protokolu nad TCP/IP. Je vyuˇz´ıv´an Java Apple-tem, kter ´y bˇeˇz´ı ve webov´em ovl´adac´ım rozhran´ı, coˇz umoˇz ˇnuje uˇzivateli jednoduch ´y pˇr´ıstup k s´ıt’ov ´ym zaˇr´ızen´ım. Z´arove ˇn slouˇz´ı i jako proxy server, kter ´y zprostˇredkov´av´a pˇr´ıstup k zaˇr´ızen´ım, kter´a jsou pˇripojena ke vzd´alen ´ym konzolov ´ym server ˚um, kam nem´a m´ıstn´ı uˇzivatel pˇr´ım ´y pˇr´ıstup. Tak´e prostˇrednictv´ım speci´aln´ıho PHP skriptu ovˇeˇruje, jsou-li poˇzadavky uˇzivatele opr´avnˇen´e a t´ım konzoly prvk ˚u zabezpeˇcuje od neautorizo-van´eho pˇr´ıstupu.

Zdrojov ´y soubor server.c obsahuje hlavn´ı funkci (main), kter´a po ´uvodn´ı inicializaci

vol´a v nekoneˇcn´em cyklu funkci obsluhujklienta().V ef unkciobsluhujklienta()jsoupaknaˇcteny4ˇr´adkyparametr

V pˇr´ıpadˇe ´uspˇechu se nastav´ı alarm() a hned potom se dostane ke slovu funkce open-devfd(), kter´a ovˇeˇr´ı, jestli zaˇr´ızen´ı jiˇz nen´ı pouˇz´ıv´ano jin ´ym apletem. Nen´ı-li, zamkne jej pro v ´yluˇcn ´y pˇr´ıstup a vr´at´ı na nˇej deskriptor.

6.2.4 Virtlab - Tunelovac´ı server

[?] Tunelovac´ı server je d´emon bˇeˇz´ıc´ı na zvl´aˇstn´ım serveru, jeˇz je souˇc´ast´ı Distribuovan´e virtu´aln´ı laboratoˇre a jeho ´ukolem je zajistit propojen´ı (bridge) r ˚uzn ´ych VLAN mezi jed-notliv ´ymi lok´aln´ımi virtu´aln´ımi laboratoˇremi a tak´e r ˚uzn ´ych VLAN v r´amci jednoho ethernetov´eho segmentu.

Dan´e ethernetov´e rozhran´ı serveru je pˇripojeno trunk linkou k pˇr´ısluˇsn´emu pˇrep´ınaˇci (Cisco 3550) nebo i jin´emu zaˇr´ızen´ı, kter´e podporuje standard IEEE 802.1q. Tunelovac´ımu serveru je nakonfigurov´ana tabulka (tabulka pˇresmˇerov´an´ı), ve kter´e je uvedeno vˇzdy VLAN ID r´amce z lok´an´ı s´ıtˇe, nov´e VLAN ID kam bude r´amec posl´an a ip adresa vzd´alen´eho (nebo i lok´aln´ıho) tunelovac´ıho serveru. Tunelovac´ı server pˇrepne rozhran´ı s trunk linkou do promiskuitn´ıho m ´odu, coˇz umoˇzn´ı pˇrij´ımat veˇsker ´y provoz na trunk lince. N´aslednˇe odchyt´av´a VLAN tagovan´e ethernetov´e r´amce a kontroluje, jestli jsou definov´any v ta-bulce pˇresmˇerov´an´ı. Pokud ano, je VLAN ID pˇreˇc´ıslov´ano podle t´eto tabulky a cel ´y r´amec je prostˇrednictv´ım UDP paketu odesl´an na danou ip adresu. Zde jej tunelovac´ı server pˇr´ıjme, vybal´ı a opˇet v syrov´e formˇe ethernetov´eho r´amce a odeˇsle ven trunk lin-kou. T´ımto zp ˚usobem doch´az´ı k virtu´aln´ımu propojen´ı ethernetu definovan ´ych VLAN a to i vzd´alenˇe (pˇres Internet), tedy vznikne ethernetov ´y tunel.

(21)

6.3 Virtlab - s´ıt’ov ´a komunikace

Virtlab z hlediskka s´ıt’ov´e komunikace vyuˇz´ıv´a pˇri komunikaci s ”vnˇejˇs´ım svˇetem”bezpeˇcnostn´ı protokol IPSec. IPSec protokol poskytuje vysok´e zabezpeˇcen´ı, kter´e je aplikov´ano z po-hledu OSI modelu jiˇz na s´ıt’ov´e vrstvˇe spojen´ı.

IPsec tvoˇr´ı logick ´y tunel, kter ´y se navazuje mezi c´ılovou a zdrojovou ip, pro ostatn´ı je tento tunel ˇsifrov´an. V prostˇred´ı Virtlab je vyuˇz´ıv´an jak protokol SA (Security Associ-ations), tak protokol HA (Authentication Header),kter ´y zajiˇst’uje autentizace odesilatele a pˇr´ıjemce, integritu dat v hlaviˇcce, ale vlastn´ı data nejsou ˇsifrov´ana, o ˇsifrov´an´ı dat se star´a protokol ESP.

Mezi dalˇs´ı pouˇz´ıvan´e prtokoly v prostˇred´ı Virtlab, patˇr´ı klasick´e s´ı´tov´e prtokoly:

• HTTP Hypertext Transfer Protocol bˇeˇzn ´y internetov ´y protokol komunikuj´ıc´ı v pro-tokolu TCP na portu 80

• HTTPS Hypertext Transfer Protocol Secure je zabezpeˇcen ´a verze HTTP protokolu. Prob´ıhaj´ıc´ı data jsou ˇsifrov´ana pomoc´ı algroritmu TTL/TLS na stranˇe serveru a ko-munikace prob´ıh´a na portu 443

• SSH Secure Shell je zabezpeˇcen ´y komunikaˇcn´ı protokol, jedn´a se o n´ahradu ptozo-kolu telnet, kter ´y je z d ˚uvodu n´ızke bezpeˇsnosti a snadn´eho odposlouch´av´an´ı ko-munikace, v prostˇred´ı virtlab neˇz´adouc´ı. Jeho vysok´a nebezpeˇcnost je zp ˚usobena neˇsifrov´an´ım datov´e komunikace v tomto protokolu ( pˇri odposlouch´av´an´ı proto-kolu lze komunikace bezprobl´emu zobrazit v plain textu). Z tˇechto d ˚uvod ˚u je telnet nahrazen protokolem SSH komunikuj´ıc´ı na TCP portu 22.

• (NTP [?] NTP (Network Time Protocol) je protokol pro synchronizaci vnitˇrn´ıch ho-din poˇc´ıtaˇc ˚u po paketov´e s´ıti s promˇenn ´ym zpoˇzdˇen´ım. Tento protokol zajiˇst’uje, aby vˇsechny poˇc´ıtaˇce v s´ıti mˇely stejn ´y a pˇresn ´y ˇcas.

• SNMP Simple Network Management Protocol Slou ˇz´ı potˇreb´am spr´avy s´ıtˇe. Umoˇzouje pr ˚ubˇeˇzn ´y sbˇer nejr ˚uznˇejˇs´ıch dat pro potˇreby spr´avy s´ıtˇe, a jejich nesledn´e vyhod-nocov´an´ı. Protokol je provozov´ana UDP portu 161

• Dalˇs´ı vyu ˇz´ıvan´e protokoly pro vnitˇrn´ı komunikaci v prostˇred´ı Virtlab Mezi dalˇs´ı pouˇzit´e protokoly patˇr´ı port 5666, a porty vyuˇzit´e pro komunikaci s dalˇs´ımi ser-vervy v s´ıti virtlab: port 10000, 10001, 40001, 50001, 50002, 60002.

(22)

7

Stavov ´y firewall pro potˇreby Virtlab

7.1 popis jednotliv ´ych pravidel ve scriptu firewallu

configure interfaces () { :

# Configure interfaces

update addresses of interface ”eth1 192.168.1.1/24” ”” update addresses of interface ”lo 127.0.0.1/8” ” ” getaddr eth0 i eth0

getaddr6 eth0 i eth0 v6 }

V ´ypis 2: Nastaven´ı z´akladn´ıch parametr ˚u

Nastaven´ı ipadres a n´azv ˚u jednotliv ´ych s´ıt’ov ´ych rozhran´ı na servru s firewallem, loo-pback je nastaven na defaultn´ı adresu.

PATH=”/sbin:/usr/sbin :/ bin :/ usr/bin:${PATH}” export PATH LSMOD=”/sbin/lsmod” MODPROBE=”/sbin/modprobe” IPTABLES=”/sbin/iptables” IP6TABLES=”/sbin/ip6tables” IPTABLES RESTORE=”/sbin/iptables−restore” IP6TABLES RESTORE=”/sbin/ip6tables−restore” IP=”/sbin/ ip ” IFCONFIG=”/sbin/ifconfig” VCONFIG=”/sbin/vconfig” BRCTL=”/sbin/brctl” IFENSLAVE=”/sbin/ifenslave” IPSET=”/usr/sbin/ipset” LOGGER=”/usr/bin/logger”

V ´ypis 3: Nastaven´ı z´akladn´ıch parametr ˚u

Naˇcten´ı kernel modul ˚u pro rozˇs´ıˇren´e funkce iptables. A nastaven´ı cesty k programu iptables. Jednotliv´e moduly pro zapnut´ı finkce logov´an´ı v iptables, d´ale pak k zapnut´ı funkce REJECT - zahozen´ı paketu s odesl´an´ım icmp zpr´avy na p ˚uvodn´ı zdrojovou ad-resu. Zaveden´ı modulu pro zapnut´ı connection tracking, sluˇz´ıc´ı k vytvoˇren´ı stavov´eho paketov´eho filtru.

Zapnut´ı rp filtru u d ˚uvodu ochrany proti ip spoofingu. IP spoofing znamen´a falˇsov´an´ı zdrojov´e IP adresy, ˇc´ımˇz se ´utoˇcn´ık snaˇz´ı pˇredst´ırat, ˇze je nˇekdo jin ´y, nebo se snaˇz´ı za-maskovat svoji pravou IP adresu. Proto je ˇz´adouc´ı, aby se na vstupu firewallu filtro-valy pakety, kter´e jsou evidentnˇe podvrˇzen´e a jejich p ˚uvodce nem ˚uˇze m´ıt ˇcist´e ´umysly. Nejz´akladnˇejˇs´ı ochranu pˇred IP spoofingem pˇredstavuje rpfilter. Jde o jednoduchou ochranu, kter´a je v´az´ana na konkr´etn´ı s´ıt’ov´e rozhran´ı. Funguje tak, ˇze j´adro zablokuje pakety se zdrojovou adresou, kter´a by podle routovac´ı tabulky mˇela pˇrij´ıt z jin´eho dostupn´eho roz-hran´ı.

(23)

$IPTABLES −P INPUT ACCEPT $IPTABLES −P OUTPUT ACCEPT $IPTABLES −P FORWARD ACCEPT

V ´ypis 4: Nastaven´ı politik firewallu

Nastaven´ı politik u jednotliv ´ych ˇretˇezc ˚u. Politika je pravidlo nastavuj´ıc´ı se u defaultn´ıch ˇretˇezc ˚u INPUT, OUTPUT, FORWARD, kter ´ym se tyto ˇretˇezce ˇr´ıd´ı pokud ˇz´adn´e pravidlo v ˇretˇezci nevyhovuje ˇz´adan´e specifikaci.

# Rule 0 (eth0) #

echo ”Rule 0 (eth0)” #

# anti spoofing log rule $IPTABLES −N In RULE 0

for i eth0 in $i eth0 list do

test −n ”$i eth0” && $IPTABLES −A INPUT −i eth0 −s $i eth0 −m limit −−limit 5/hour −− limit−burst 3 −j In RULE 0

done

$IPTABLES −A INPUT −i eth0 −s 192.168.1.1 −m limit −−limit 5/hour −−limit−burst 3 −j In RULE 0

$IPTABLES −A INPUT −i eth0 −s 10.0.0.0/8 −m limit −−limit 5/hour −−limit−burst 3 −j In RULE 0

$IPTABLES −A INPUT −i eth0 −s 172.16.0.0/12 −m limit −−limit 5/hour −−limit−burst 3 −j In RULE 0

$IPTABLES −A INPUT −i eth0 −s 192.168.0.0/16 −m limit −−limit 5/hour −−limit−burst 3 −j In RULE 0

for i eth0 in $i eth0 list do

test −n ”$i eth0” && $IPTABLES −A FORWARD −i eth0 −s $i eth0 −m limit −−limit 5/hour −−limit−burst 3 −j In RULE 0

done

$IPTABLES −A FORWARD −i eth0 −s 192.168.1.1 −m limit −−limit 5/hour −−limit−burst 3 −j In RULE 0

$IPTABLES −A FORWARD −i eth0 −s 10.0.0.0/8 −m limit −−limit 5/hour −−limit−burst 3 −j In RULE 0

$IPTABLES −A FORWARD −i eth0 −s 172.16.0.0/12 −m limit −−limit 5/hour −−limit−burst 3 −j In RULE 0

$IPTABLES −A FORWARD −i eth0 −s 192.168.0.0/16 −m limit −−limit 5/hour −−limit−burst 3 −j In RULE 0

$IPTABLES −A In RULE 0 −j LOG −−log−level warning −−log−prefix ”spoof”

V ´ypis 5: ˇretˇezec pro zpr´avu logov´an´ı

Tento ˇretˇezec je ve firewalu obsaˇzen z d ˚uvodu nutnosti logov´an´ı pr ˚uchodu jednotliv ´ych paket ˚u, avˇsak z d ˚uvodu velk´eho mnoˇzstv´ı pˇr´ıchz´ıch paket ˚u se m ˚uˇze log soubor zvˇetˇsit, aˇz na neˇz´adouc´ı velikost, proto d´ıky rozˇs´ıˇren´ı limit jsme omezily na zaps´an´ı prvn´ıch tˇr´ı paket ˚u do logu maxim´alnˇe pˇetkr´at do hodiny.

D´ale je zde vidˇet vytvoˇren´ı uˇzivatelsk´eho ˇretˇezce, kter ´y se od defaultn´ıho liˇs´ı t´ım, ˇze se u nich nepouˇz´ıvaj´ı polityky a spˇrehledouj´ı a zlepˇsuj´ı ˇskalovatelnost cel´eho firewallu.

(24)

# Rule 1 (eth0) #

echo ”Rule 1 (eth0)” #

# anti spoofing rule

for i eth0 in $i eth0 list do

test −n ”$i eth0” && $IPTABLES −A INPUT −i eth0 −s $i eth0 −j DROP done

$IPTABLES −A INPUT −i eth0 −s 192.168.1.1 −j DROP $IPTABLES −A INPUT −i eth0 −s 10.0.0.0/8 −j DROP $IPTABLES −A INPUT −i eth0 −s 172.16.0.0/12 −j DROP $IPTABLES −A INPUT −i eth0 −s 192.168.0.0/16 −j DROP

for i eth0 in $i eth0 list do

test −n ”$i eth0” && $IPTABLES −A FORWARD −i eth0 −s $i eth0 −j DROP done

$IPTABLES −A FORWARD −i eth0 −s 192.168.1.1 −j DROP $IPTABLES −A FORWARD −i eth0 −s 10.0.0.0/8 −j DROP $IPTABLES −A FORWARD −i eth0 −s 172.16.0.0/12 −j DROP $IPTABLES −A FORWARD −i eth0 −s 192.168.0.0/16 −j DROP

V ´ypis 6: ˇretˇezec pro ochranu proti spoofingu

V tomto ˇretˇezci pokraˇcuje ochrana proti jiˇz v ´yˇse zmi ˇnovan´eho spoofingu, zde jsou zak´az´any adresy, kter´e josu v internetu jiˇz registrov´any pro jin´e uˇcely spoleˇcnost´ı IANA a proto se v internetu rozshy tˇechto ip adres volnˇe nepohybuj´ı a proto pokud se na s´ıt’ov´em rozhran´ı nekter´a z tˇechto adres objev´ı lze tuˇsit ˇze se jedn´a o ´utok na naˇsi s´ıt’. Vˇsechny tyto adresy jsou logov´any z d ˚uvodu pozdˇejˇs´ıho dohled´an´ı.

# Povolen´ı z ´akladn´ıch protokol ˚u

$IPTABLES −A INPUT −i eth0 −p tcp −m tcp −m multiport −−dports 22,53,80,443 −m state −−state NEW −m connlimit \! −−connlimit−above 50 −j ACCEPT

$IPTABLES −A INPUT −i eth0 −p udp −m udp −m multiport −−dports 53,161,162 −m state −−state NEW −m connlimit \! −−connlimit−above 50 −j ACCEPT

$IPTABLES −A FORWARD −i eth0 −p tcp −m tcp −m multiport −−dports 22,53,80,443 −m state −−state NEW −m connlimit \! −−connlimit−above 50 −j ACCEPT

$IPTABLES −A FORWARD −i eth0 −p udp −m udp −m multiport −−dports 53,161,162 −m state −−state NEW −m connlimit \! −−connlimit−above 50 −j ACCEPT

V ´ypis 7: ˇretˇezec povoluj´ıc´ı porty pro vybran´e protokoly

Zde jsou shrnuty pravidla pro povlen´ı vybran ´ych port ˚u pro jednotliv´e protokoly, v tomto pˇr´ıpadˇe se jedn´a o porty pro protokoly SSH, HTTP, HTTPS,kter´e jsou pouˇz´ıv´any a tak´e SNMP slouˇz´ıc´ı pro sbˇer informac´ı o dan´em s´ıt’ov´em prvku. pro komunikaci s prvky uv-nitˇr s´ıtˇe Virtlab.

# Povolen´ı komunikace s jenotliv´ımy servery v prostˇred´ı virtlab $IPTABLES −A INPUT −i eth0 −p tcp −m tcp −m multiport −−dports

10000,10001,60002,40001,50001,50002,60001,1000,60003,40002,5666 −m state −− state NEW −m connlimit \! −−connlimit−above 45 −j ACCEPT

(25)

$IPTABLES −A INPUT −i eth1 −p tcp −m tcp −m multiport −−dports

10000,10001,60002,40001,50001,50002,60001,1000,60003,40002,5666 −m state −− state NEW −m connlimit \! −−connlimit−above 45 −j ACCEPT

$IPTABLES −A FORWARD −i eth0 −p tcp −m tcp −m multiport −−dports

10000,10001,60002,40001,50001,50002,60001,1000,60003,40002,5666 −m state −− state NEW −m connlimit \! −−connlimit−above 45 −j ACCEPT

$IPTABLES −A FORWARD −i eth1 −p tcp −m tcp −m multiport −−dports

10000,10001,60002,40001,50001,50002,60001,1000,60003,40002,5666 −m state −− state NEW −m connlimit \! −−connlimit−above 45 −j ACCEPT

$IPTABLES −A OUTPUT −o eth0 −p tcp −m tcp −m multiport −−dports

10000,10001,60002,40001,50001,50002,60001,1000,60003,40002,5666 −m state −− state NEW −m connlimit \! −−connlimit−above 45 −j ACCEPT

$IPTABLES −A OUTPUT −o eth1 −p tcp −m tcp −m multiport −−dports

10000,10001,60002,40001,50001,50002,60001,1000,60003,40002,5666 −m state −− state NEW −m connlimit \! −−connlimit−above 45 −j ACCEPT

$IPTABLES −A FORWARD −o eth0 −p tcp −m tcp −m multiport −−dports

10000,10001,60002,40001,50001,50002,60001,1000,60003,40002,5666 −m state −− state NEW −m connlimit \! −−connlimit−above 45 −j ACCEPT

$IPTABLES −A FORWARD −o eth1 −p tcp −m tcp −m multiport −−dports

10000,10001,60002,40001,50001,50002,60001,1000,60003,40002,5666 −m state −− state NEW −m connlimit \! −−connlimit−above 45 −j ACCEPT

V ´ypis 8: ˇretˇezec povoluj´ıc´ı porty pro potˇreby s´ıtˇe Virtlab

Tento ˇretˇezec obsahuje povolovac´ı pravidla pro porty vyuˇz´ıvan´e pˇri komunikaci s prvky virtlabu.

echo ”Rule 4 (eth0)” #

# Povolen´ı ˇsifrovan ´eho provozu

$IPTABLES −A INPUT −i eth0 −p 50 −m state −−state NEW −m connlimit \! −−connlimit− above 60 −j ACCEPT

$IPTABLES −A INPUT −i eth0 −p ah −m state −−state NEW −m connlimit \! −−connlimit− above 60 −j ACCEPT

$IPTABLES −A FORWARD −i eth0 −p 50 −m state −−state NEW −m connlimit \! −− connlimit−above 60 −j ACCEPT

$IPTABLES −A FORWARD −i eth0 −p ah −m state −−state NEW −m connlimit \! −− connlimit−above 60 −j ACCEPT

V ´ypis 9: ˇretˇezec povoluj´ıc´ı porty pro IPsec

Tyto pravidla povoluj´ı jednotliv´e protokoly zabezpeˇcen´ı aby bylo moˇzno vytvoˇrit IPsec spojen´ı kde protokol AH zajiˇst’uje zabezpeˇcen´ı hlaviˇcky paketu a protokol ESP se star´a o ˇsifrov´an´ı dat v tomto paketu.

echo ”Rule 5 (eth0)” #

# Povolen´ı protokol ˚u potˇrebn´ych pro chod server ˚u

$IPTABLES −A INPUT −i eth0 −p icmp −m icmp −−icmp−type 0/0 −m state −−state NEW − m connlimit \! −−connlimit−above 10 −j ACCEPT

$IPTABLES −A INPUT −i eth0 −p icmp −m icmp −−icmp−type 8/0 −m state −−state NEW − m connlimit \! −−connlimit−above 10 −j ACCEPT

$IPTABLES −A INPUT −i eth0 −p udp −m udp −−dport 123 −m state −−state NEW −m connlimit \! −−connlimit−above 10 −j ACCEPT

(26)

$IPTABLES −A FORWARD −i eth0 −p icmp −m icmp −−icmp−type 0/0 −m state −−state NEW −m connlimit \! −−connlimit−above 10 −j ACCEPT

$IPTABLES −A FORWARD −i eth0 −p icmp −m icmp −−icmp−type 8/0 −m state −−state NEW −m connlimit \! −−connlimit−above 10 −j ACCEPT

$IPTABLES −A FORWARD −i eth0 −p udp −m udp −−dport 123 −m state −−state NEW −m connlimit \! −−connlimit−above 10 −j ACCEPT

V ´ypis 10: ˇretˇezec povoluj´ıc´ı porty pro m´enˇe uˇz´ıvan´e protokoly

V tomto ˇretˇezci jsou povoleny porty, kter´e nesjou tak ˇcasto vol´any jako napˇr´ıklad ntp protokol pro synchronizaci ˇcasu.

echo ”Rule 8 (eth0)” #

# Ochrana pˇred auth pakety

$IPTABLES −A INPUT −i eth0 −p tcp −m tcp −−dport 113 −j REJECT $IPTABLES −A FORWARD −i eth0 −p tcp −m tcp −−dport 113 −j REJECT

V ´ypis 11: Ochrana proti AUTH protokolu

Nˇekter´e programy pouˇz´ıvaj´ı protokol AUTH ke zjiˇstˇen´ı neˇz´adouc´ıch informac´ı o firewallu, avˇsak pˇri klasick´em zahozen´ı paketu (DROP) se mus´ı ˇcekat na vyprˇsen´ı ˇcasov´eho limitu a t´ım se spomaluje komunikace. K odstranˇen´ı tohoto probl´emu je tˇreba vyuˇz´ıt akci RE-JECT, k odesl´an´ı icmp zpr´avy zpˇet na c´ılovou adresu. Samozˇrejmˇe vˇsechny pokusi o zjiˇstˇen´ı slabin s´ıtˇe jsou logov´any.

$IPTABLES −A INPUT −i eth0 −p icmp −m icmp −−icmp−type 0/0 −m state −−state NEW −m connlimit \! −−connlimit−above 10 −j ACCEPT

$IPTABLES −A INPUT −i eth0 −p icmp −m icmp −−icmp−type 8/0 −m state −−state NEW − m connlimit \! −−connlimit−above 10 −j ACCEPT

$IPTABLES −A FORWARD −i eth0 −p icmp −m icmp −−icmp−type 0/0 −m state −−state NEW −m connlimit \! −−connlimit−above 10 −j ACCEPT

$IPTABLES −A FORWARD −i eth0 −p icmp −m icmp −−icmp−type 8/0 −m state −−state NEW −m connlimit \! −−connlimit−above 10 −j ACCEPT

V ´ypis 12: Omezen´ı typ ˚u ICMP zpr´av

Zde je omezen´ı ICMP zpr´av pouze na zpr´avu ping, pomoc´ı kter´e se mˇeˇr´ı doba odezvy od vzd´alen´eho s´ıt’ov´eho rozhran´ı.

echo ”Rule 2 (lo)” #

# Povolen´ı pˇr´ıstupu na loopback

$IPTABLES −A INPUT −i lo −m state −−state NEW −j ACCEPT $IPTABLES −A OUTPUT −o lo −m state −−state NEW −j ACCEPT

V ´ypis 13: Povolen´ı provozu na virtualn´ım rozhran´ı syst´emu Povolen´ı provozu na vnitˇrn´ım virtu´aln´ım s´ıt’ov´em rozhran´ı syst´emu.

echo ”Rule 9 (eth1)” #

# Povolen´ı broadcast ˚u z vnitˇrn´ı s´ıt ˇe

$IPTABLES −A OUTPUT −o eth1 −d 255.255.255.255 −m state −−state NEW −j ACCEPT

(27)

V tomto pˇr´ıpadˇe jsou povoleny broadcasty z vnitˇrn´ı s´ıtˇe virtlabu, kter´e je zabezpeˇcen´a a proto m ˚uˇzeme broadcast pakety povolit.

$IPTABLES −A INPUT −d −m state −−state ESTABLISHED,RELATED −j ACCEPT

V ´ypis 15: Povolen´ı broadcastu z vnitˇrn´ı s´ıtˇe

U jiˇz vytvoˇren ´ych a provozovan ´ych spojen´ı v´ımˇze, ˇze jiˇz proˇsli pˇrez paketov ´y filter a je proto bezpeˇcn´e tato spojen´ı pomoc´ı stavov´eho paketov´eho filtru povolit.

# Logovac´ı pravidlo zahozen´ych paket ˚u $IPTABLES −N RULE 10

$IPTABLES −A OUTPUT −m limit −−limit 12/hour −−limit−burst 5 −j RULE 10 $IPTABLES −A INPUT −m limit −−limit 12/hour −−limit−burst 5 −j RULE 10 $IPTABLES −A FORWARD −m limit −−limit 12/hour −−limit−burst 5 −j RULE 10

$IPTABLES −A RULE 10 −j LOG −−log−level info −−log−prefix ”RULE 10 −− CONTINUE ”

#

# Rule 11 (global) #

echo ”Rule 11 (global)” #

# Obecn ´e pravidlo pro zahozen´ı nevyhovuj´ıc´ıch paket ˚u $IPTABLES −A OUTPUT −j DROP

$IPTABLES −A INPUT −j DROP $IPTABLES −A FORWARD −j DROP }

V ´ypis 16: Zahozen´ı veˇsker´eho nevyhovuj´ıc´ıho provozu

Zde je posledn´ı pravidlo ve firewallu, kter´e vzhledem k nastaven´ı politiky v ˇretˇezci IN-PUT na ACCEPT je nutn´e veˇsker ´y ostatn´ı s´ıt’ov ´y provoz nepropusti skrze firewall. Sa-mozˇrejmˇe se tyto zahozen´e pakety budou logovat, spˇr´ısloˇsn ´ym pˇr´ıznakem. Vzhledek k zajiˇstˇen´ı urˇcit´eho poˇctu log ˚u je pravidlo nastaveno pro vytvoˇren´ı maxim´alnˇe dvan´acti log ˚u za hodinu.

7.2 Kompletn´ı script pro vytvoˇren´ı firewallu

#!/ bin/sh #

# This is automatically generated file . DO NOT MODIFY ! #

# Firewall Builder fwb ipt v4.2.0.3530 #

# Generated Fri Jul 22 12:45:50 2011 St?edn? Evropa (letn? ?as) by Admin #

# files : ∗ Virtlab .fw /etc/ Virtlab .fw #

# Compiled for iptables (any version) #

# This firewall has two interfaces . Eth0 faces outside and has a dynamic address; eth1 faces inside.

(28)

# Policy includes basic rules to permit unrestricted outbound access and anti−spoofing rules. Access to the firewall is permitted only from internal network and only using SSH. The firewall uses one of the machines on internal network for DNS. Internal network is configured with address 192.168.1.0/255.255.255.0

set −x

FWBDEBUG=””

PATH=”/sbin:/usr/sbin :/ bin :/ usr/bin:${PATH}” export PATH LSMOD=”lsmod” MODPROBE=”modprobe” IPTABLES=”iptables” IP6TABLES=”ip6tables” IPTABLES RESTORE=”iptables−restore” IP6TABLES RESTORE=”ip6tables−restore” IP=”ip” IFCONFIG=”ifconfig” VCONFIG=”vconfig” BRCTL=”brctl” IFENSLAVE=”ifenslave” IPSET=”ipset” LOGGER=”logger” log () { echo ”$1”

command −v ”$LOGGER” >/dev/null 2>&1 && $LOGGER −p info ”$1” } getInterfaceVarName() { echo $1 | sed ’s /\./ /’ } getaddr internal () { dev=$1 name=$2 af=$3

L=$($IP $af addr show dev $dev | sed −n ’/ inet /{s !.∗ inet6∗ !!; s !/.∗!! p}’ | sed ’s/peer.∗ // ’) test −z ”$L” && {

eval ”$name=’’”

return

}

eval ”${name} list=\”$L\”” }

getaddr() {

getaddr internal $1 $2 ”−4” }

(29)

getaddr6() {

getaddr internal $1 $2 ”−6” }

# function getinterfaces is used to process wildcard interfaces getinterfaces () {

NAME=$1

$IP link show | grep ” : $NAME” | while read L; do OIFS=$IFS IFS=” :” set $L IFS=$OIFS echo $2 done } diff intf () { func=$1 list1 =$2 list2 =$3 cmd=$4

for intf in $list1 do

echo $list2 | grep −q $intf || { # $vlan is absent in list 2

$func $intf $cmd } done } find program() { PGM=$1

command −v $PGM >/dev/null 2>&1 || { echo ”$PGM not found”

exit 1 } }

check tools() {

find program $IPTABLES find program $MODPROBE

find program $IP }

reset iptables v4 () {

$IPTABLES −P OUTPUT DROP $IPTABLES −P INPUT DROP $IPTABLES −P FORWARD DROP

cat /proc/net/ip tables names | while read table; do $IPTABLES −t $table −L −n | while read c chain rest; do

if test ”X$c” = ”XChain” ; then

$IPTABLES −t $table −F $chain fi

done

(30)

done }

reset iptables v6 () {

$IP6TABLES −P OUTPUT DROP $IP6TABLES −P INPUT DROP $IP6TABLES −P FORWARD DROP

cat /proc/net/ip6 tables names | while read table; do $IP6TABLES −t $table −L −n | while read c chain rest; do

if test ”X$c” = ”XChain” ; then

$IP6TABLES −t $table −F $chain fi done $IP6TABLES −t $table −X done } P2P INTERFACE WARNING=”” missing address() { address=$1 cmd=$2 oldIFS=$IFS IFS=”@” set $address addr=$1 interface=$2 IFS=$oldIFS

$IP addr show dev $interface | grep −q POINTOPOINT && {

test −z ”$P2P INTERFACE WARNING” && echo ”Warning: Can not update address of interface $interface. fwbuilder can not manage addresses of point−to−point interfaces yet”

P2P INTERFACE WARNING=”yes”

return

}

test ”$cmd” = ”add” && {

echo ”# Adding ip address: $interface $addr” echo $addr | grep −q ’:’ && {

$FWBDEBUG $IP addr $cmd $addr dev $interface } || {

$FWBDEBUG $IP addr $cmd $addr broadcast + dev $interface }

}

test ”$cmd” = ”del” && {

echo ”# Removing ip address: $interface $addr”

(31)

}

$FWBDEBUG $IP link set $interface up }

list addresses by scope() {

interface=$1

scope=$2 ignore list =$3

$IP addr ls dev $interface | \

awk −v IGNORED=”$ignore list” −v SCOPE=”$scope” \ ’ BEGIN {

split (IGNORED,ignored arr);

for (a in ignored arr) {ignored dict [ ignored arr [a]]=1;}

}

(/ inet | inet6 / && $0 ˜ SCOPE && !($2 in ignored dict)) {print $2;}’ | \

while read addr; do

echo ”${addr}@$interface” done | sort

}

update addresses of interface() { ignore list =$2 set $1 interface=$1 shift FWB ADDRS=$( for addr in $∗; do echo ”${addr}@$interface” done | sort )

CURRENT ADDRS ALL SCOPES=”” CURRENT ADDRS GLOBAL SCOPE=””

$IP link show dev $interface >/dev/null 2>&1 && {

CURRENT ADDRS ALL SCOPES=$(list addresses by scope $interface ’scope .∗’ ” $ignore list”)

CURRENT ADDRS GLOBAL SCOPE=$(list addresses by scope $interface ’scope global’ ” $ignore list”)

} || {

echo ”# Interface $interface does not exist” # Stop the script if we are not in test mode test −z ”$FWBDEBUG” && exit 1

}

diff intf missing address ”$FWB ADDRS” ”$CURRENT ADDRS ALL SCOPES” add diff intf missing address ”$CURRENT ADDRS GLOBAL SCOPE” ”$FWB ADDRS” del }

clear addresses except known interfaces() {

(32)

’ BEGIN {

split (IGNORED,ignored arr);

for (a in ignored arr) {ignored dict [ignored arr [a]]=1;}

}

(/ state / && !($2 in ignored dict ) ) { print $2;}’ | \

while read intf ; do

echo ”# Removing addresses not configured in fwbuilder from interface $intf” $FWBDEBUG $IP addr flush dev $intf scope global

$FWBDEBUG $IP link set $intf down done

}

check file () { test −r ”$2” || {

echo ”Can not find file $2 referenced by address table object $1” exit 1

} }

check run time address table files () { :

}

load modules() { :

OPTS=$1

MODULES DIR=”/lib/modules/‘uname −r‘/kernel/net/”

MODULES=$(find $MODULES DIR −name ’∗conntrack∗’ \! −name ’∗ipv6∗’|sed −e ’s/ˆ.∗\///’ − e ’s/\([ˆ\.]\)\..∗/\1/’)

echo $OPTS | grep −q nat && {

MODULES=”$MODULES $(find $MODULES DIR −name ’∗nat∗’|sed −e ’s/ˆ.∗\///’ −e ’s /\([ˆ\.]\)\..∗/\1/’)”

}

echo $OPTS | grep −q ipv6 && {

MODULES=”$MODULES $(find $MODULES DIR −name nf conntrack ipv6|sed −e ’s /ˆ.∗\///’ −e ’s/\([ˆ\.]\)\..∗/\1/’)”

}

for module in $MODULES; do

if $LSMOD | grep ${module} >/dev/null; then continue; fi

$MODPROBE ${module} || exit 1 done

}

verify interfaces () { :

echo ”Verifying interfaces : eth0 eth1 lo”

for i in eth0 eth1 lo ; do

$IP link show ”$i” > /dev/null 2>&1 || { log ” Interface $i does not exist”

exit 1 }

done }

(33)

prolog commands() {

echo ”Running prolog script”

}

epilog commands() {

echo ”Running epilog script”

}

run epilog and exit () { epilog commands exit $1 } configure interfaces () { : # Configure interfaces

update addresses of interface ”eth1 192.168.1.1/24” ”” update addresses of interface ”lo 127.0.0.1/8” ” ” getaddr eth0 i eth0

getaddr6 eth0 i eth0 v6 }

script body () {

# ================ IPv4

# ================ Table ’filter’, automatic rules # accept established sessions

$IPTABLES −A INPUT −m state −−state ESTABLISHED,RELATED −j ACCEPT $IPTABLES −A OUTPUT −m state −−state ESTABLISHED,RELATED −j ACCEPT $IPTABLES −A FORWARD −m state −−state ESTABLISHED,RELATED −j ACCEPT

# ================ Table ’nat’, rule set NAT #

# Rule 0 (NAT) #

echo ”Rule 0 (NAT)” #

$IPTABLES −t nat −A POSTROUTING −o eth0 −s 192.168.1.0/24 −j MASQUERADE

# ================ Table ’filter’, rule set Policy #

# Rule 0 ( lo ) #

echo ”Rule 0 (lo)” #

# Povolen´ı pˇr´ıstupu na loopback

(34)

$IPTABLES −A OUTPUT −o lo −m state −−state NEW −j ACCEPT #

# Rule 1 (eth0) #

echo ”Rule 1 (eth0)” #

# Povolen´ı ˇsifrovan ´eho provozu

$IPTABLES −A INPUT −i eth0 −p 50 −m state −−state NEW −m connlimit \! −−connlimit− above 60 −j ACCEPT

$IPTABLES −A INPUT −i eth0 −p ah −m state −−state NEW −m connlimit \! −−connlimit− above 60 −j ACCEPT

$IPTABLES −A FORWARD −i eth0 −p 50 −m state −−state NEW −m connlimit \! −− connlimit−above 60 −j ACCEPT

$IPTABLES −A FORWARD −i eth0 −p ah −m state −−state NEW −m connlimit \! −− connlimit−above 60 −j ACCEPT

#

# Rule 2 (eth0) #

echo ”Rule 2 (eth0)” #

# Povolen´ı z ´akladn´ıch protokol ˚u

$IPTABLES −A INPUT −i eth0 −p tcp −m tcp −m multiport −−dports 53,80,443,22 −m state −−state NEW −m connlimit \! −−connlimit−above 50 −j ACCEPT

$IPTABLES −A INPUT −i eth0 −p udp −m udp −m multiport −−dports 53,161,162 −m state −−state NEW −m connlimit \! −−connlimit−above 50 −j ACCEPT

$IPTABLES −A FORWARD −i eth0 −p tcp −m tcp −m multiport −−dports 53,80,443,22 −m state −−state NEW −m connlimit \! −−connlimit−above 50 −j ACCEPT

$IPTABLES −A FORWARD −i eth0 −p udp −m udp −m multiport −−dports 53,161,162 −m state −−state NEW −m connlimit \! −−connlimit−above 50 −j ACCEPT

#

# Rule 3 (eth0,eth1) #

echo ”Rule 3 (eth0,eth1)” #

# Povolen´ı komunikace s jenotliv´ımy servery v prostˇred´ı virtlab $IPTABLES −A INPUT −i eth0 −p tcp −m tcp −m multiport −−dports

10001,60001,1000,60002,60003,50001,40001,40002,50002,5666,10000 −m state −− state NEW −m connlimit \! −−connlimit−above 45 −j ACCEPT

$IPTABLES −A INPUT −i eth1 −p tcp −m tcp −m multiport −−dports

10001,60001,1000,60002,60003,50001,40001,40002,50002,5666,10000 −m state −− state NEW −m connlimit \! −−connlimit−above 45 −j ACCEPT

$IPTABLES −A FORWARD −i eth0 −p tcp −m tcp −m multiport −−dports

10001,60001,1000,60002,60003,50001,40001,40002,50002,5666,10000 −m state −− state NEW −m connlimit \! −−connlimit−above 45 −j ACCEPT

$IPTABLES −A FORWARD −i eth1 −p tcp −m tcp −m multiport −−dports

10001,60001,1000,60002,60003,50001,40001,40002,50002,5666,10000 −m state −− state NEW −m connlimit \! −−connlimit−above 45 −j ACCEPT

$IPTABLES −A OUTPUT −o eth0 −p tcp −m tcp −m multiport −−dports

10001,60001,1000,60002,60003,50001,40001,40002,50002,5666,10000 −m state −− state NEW −m connlimit \! −−connlimit−above 45 −j ACCEPT

$IPTABLES −A OUTPUT −o eth1 −p tcp −m tcp −m multiport −−dports

10001,60001,1000,60002,60003,50001,40001,40002,50002,5666,10000 −m state −− state NEW −m connlimit \! −−connlimit−above 45 −j ACCEPT

(35)

$IPTABLES −A FORWARD −o eth0 −p tcp −m tcp −m multiport −−dports

10001,60001,1000,60002,60003,50001,40001,40002,50002,5666,10000 −m state −− state NEW −m connlimit \! −−connlimit−above 45 −j ACCEPT

$IPTABLES −A FORWARD −o eth1 −p tcp −m tcp −m multiport −−dports

10001,60001,1000,60002,60003,50001,40001,40002,50002,5666,10000 −m state −− state NEW −m connlimit \! −−connlimit−above 45 −j ACCEPT

#

# Rule 4 (eth0) #

echo ”Rule 4 (eth0)” #

# Povolen´ı protokol ˚u potˇrebn´ych pro chod server ˚u

$IPTABLES −A INPUT −i eth0 −p icmp −m icmp −−icmp−type 0/0 −m state −−state NEW − m connlimit \! −−connlimit−above 10 −j ACCEPT

$IPTABLES −A INPUT −i eth0 −p icmp −m icmp −−icmp−type 8/0 −m state −−state NEW − m connlimit \! −−connlimit−above 10 −j ACCEPT

$IPTABLES −A INPUT −i eth0 −p udp −m udp −−dport 123 −m state −−state NEW −m connlimit \! −−connlimit−above 10 −j ACCEPT

$IPTABLES −A FORWARD −i eth0 −p icmp −m icmp −−icmp−type 0/0 −m state −−state NEW −m connlimit \! −−connlimit−above 10 −j ACCEPT

$IPTABLES −A FORWARD −i eth0 −p icmp −m icmp −−icmp−type 8/0 −m state −−state NEW −m connlimit \! −−connlimit−above 10 −j ACCEPT

$IPTABLES −A FORWARD −i eth0 −p udp −m udp −−dport 123 −m state −−state NEW −m connlimit \! −−connlimit−above 10 −j ACCEPT

#

# Rule 5 (eth1) #

echo ”Rule 5 (eth1)” #

# Povolen´ı broadcast ˚u z vnitˇrn´ı s´ıt ˇe

$IPTABLES −A OUTPUT −o eth1 −d 255.255.255.255 −m state −−state NEW −j ACCEPT #

# Rule 6 (eth0) #

echo ”Rule 6 (eth0)” #

# Logovac´ı pravidlo pro ochranu pˇred AUTH pakety

$IPTABLES −A INPUT −i eth0 −p tcp −m tcp −−dport 113 −j LOG −−log−level info −−log− prefix ”RULE 6 −− CONTINUE ”

$IPTABLES −A FORWARD −i eth0 −p tcp −m tcp −−dport 113 −j LOG −−log−level info −− log−prefix ”RULE 6 −− CONTINUE ”

#

# Rule 7 (eth0) #

echo ”Rule 7 (eth0)” #

# Ochrana pˇred auth pakety

$IPTABLES −A INPUT −i eth0 −p tcp −m tcp −−dport 113 −j REJECT $IPTABLES −A FORWARD −i eth0 −p tcp −m tcp −−dport 113 −j REJECT #

# Rule 8 (eth0) #

echo ”Rule 8 (eth0)” #

(36)

# anti spoofing log rule

for i eth0 in $i eth0 list do

test −n ”$i eth0” && $IPTABLES −A INPUT −i eth0 −s $i eth0 −j LOG −−log−level warning −−log−prefix ”spoof”

done

$IPTABLES −A INPUT −i eth0 −s 192.168.1.1 −j LOG −−log−level warning −−log−prefix ” spoof”

$IPTABLES −A INPUT −i eth0 −s 10.0.0.0/8 −j LOG −−log−level warning −−log−prefix ” spoof”

$IPTABLES −A INPUT −i eth0 −s 172.16.0.0/12 −j LOG −−log−level warning −−log−prefix ” spoof”

$IPTABLES −A INPUT −i eth0 −s 192.168.0.0/16 −j LOG −−log−level warning −−log−prefix ”spoof”

for i eth0 in $i eth0 list do

test −n ”$i eth0” && $IPTABLES −A FORWARD −i eth0 −s $i eth0 −j LOG −−log−level warning −−log−prefix ”spoof”

done

$IPTABLES −A FORWARD −i eth0 −s 192.168.1.1 −j LOG −−log−level warning −−log− prefix ”spoof”

$IPTABLES −A FORWARD −i eth0 −s 10.0.0.0/8 −j LOG −−log−level warning −−log−prefix ”spoof”

$IPTABLES −A FORWARD −i eth0 −s 172.16.0.0/12 −j LOG −−log−level warning −−log− prefix ”spoof”

$IPTABLES −A FORWARD −i eth0 −s 192.168.0.0/16 −j LOG −−log−level warning −−log− prefix ”spoof”

#

# Rule 9 (eth0) #

echo ”Rule 9 (eth0)” #

# anti spoofing rule

for i eth0 in $i eth0 list do

test −n ”$i eth0” && $IPTABLES −A INPUT −i eth0 −s $i eth0 −j DROP done

$IPTABLES −A INPUT −i eth0 −s 192.168.1.1 −j DROP $IPTABLES −A INPUT −i eth0 −s 10.0.0.0/8 −j DROP $IPTABLES −A INPUT −i eth0 −s 172.16.0.0/12 −j DROP $IPTABLES −A INPUT −i eth0 −s 192.168.0.0/16 −j DROP

for i eth0 in $i eth0 list do

test −n ”$i eth0” && $IPTABLES −A FORWARD −i eth0 −s $i eth0 −j DROP done

$IPTABLES −A FORWARD −i eth0 −s 192.168.1.1 −j DROP $IPTABLES −A FORWARD −i eth0 −s 10.0.0.0/8 −j DROP $IPTABLES −A FORWARD −i eth0 −s 172.16.0.0/12 −j DROP $IPTABLES −A FORWARD −i eth0 −s 192.168.0.0/16 −j DROP #

# Rule 10 (global) #

echo ”Rule 10 (global)” #

(37)

# Logovac´ı pravidlo zahozen´ych paket ˚u

$IPTABLES −A OUTPUT −j LOG −−log−level info −−log−prefix ”RULE 10 −− CONTINUE ”

$IPTABLES −A INPUT −j LOG −−log−level info −−log−prefix ”RULE 10 −− CONTINUE ” $IPTABLES −A FORWARD −j LOG −−log−level info −−log−prefix ”RULE 10 −−

CONTINUE ” #

# Rule 11 (global) #

echo ”Rule 11 (global)” #

# Obecn ´e pravidlo pro zahozen´ı nevyhovuj´ıc´ıch paket ˚u $IPTABLES −A OUTPUT −j DROP

$IPTABLES −A INPUT −j DROP $IPTABLES −A FORWARD −j DROP }

ip forward () { :

echo 1 > /proc/sys/net/ipv4/ ip forward } reset all () { : reset iptables v4 } block action () { reset all } stop action () { reset all

$IPTABLES −P OUTPUT ACCEPT $IPTABLES −P INPUT ACCEPT $IPTABLES −P FORWARD ACCEPT }

check iptables() { IP TABLES=”$1”

[ ! −e $IP TABLES ] && return 151 NF TABLES=$(cat $IP TABLES 2>/dev/null) [ −z ”$NF TABLES” ] && return 152

return 0

}

status action () {

check iptables ” /proc/net/ip tables names” ret ipv4 =$?

check iptables ” /proc/net/ip6 tables names” ret ipv6 =$?

[ $ret ipv4 −eq 0 −o $ret ipv6 −eq 0 ] && return 0 [ $ret ipv4 −eq 151 −o $ret ipv6 −eq 151 ] && {

echo ”iptables modules are not loaded” }

(38)

[ $ret ipv4 −eq 152 −o $ret ipv6 −eq 152 ] && { echo ”Firewall is not configured”

} exit 3 }

# See how we were called.

# For backwards compatibility missing argument is equivalent to ’ start ’

cmd=$1 test −z ”$cmd” && { cmd=”start” } case ”$cmd” in start )

log ” Activating firewall script generated Fri Jul 22 12:45:50 2011 by Admin” check tools

prolog commands

check run time address table files

load modules ”nat ” configure interfaces verify interfaces reset all script body ip forward epilog commands RETVAL=$? ;; stop) stop action RETVAL=$? ;; status) status action RETVAL=$? ;; block) block action RETVAL=$? ;; reload) $0 stop $0 start RETVAL=$? ;;

(39)

interfaces ) configure interfaces RETVAL=$? ;; test interfaces ) FWBDEBUG=”echo” configure interfaces RETVAL=$? ;; ∗)

echo ”Usage $0 [start|stop|status|block|reload| interfaces | test interfaces ] ” ;;

esac

exit $RETVAL

References

Related documents