Univerzita Karlova v Praze Matematicko-fyzik´aln´ı fakulta
´ RSK ˇ ´ PRACE ´ BAKALA A
Jiˇr´ı Hork´y Monitor s´ıt’ov´ e aktivity pro vˇ etˇ s´ı datov´ e toky Stˇredisko informatick´e s´ıtˇe a laboratoˇr´ı Vedouc´ı bakal´aˇrsk´e pr´ace: RNDr. Libor Forst Studijn´ı program: Informatika, spr´ava poˇc´ıtaˇcov´ ych syst´em˚ u
2008
Na tomto m´ıstˇe bych chtˇel podˇekovat vedouc´ımu pr´ace RNDr. Liborovi Forstovi za jeho cenn´e pˇripom´ınky k textu pr´ace. M´e podˇekov´an´ı tak´e patˇr´ı Mgr. Jiˇr´ımu Caldovi a Danu Lukeˇsovi za umoˇznˇen´ı testov´an´ı aplikace v budovˇe MFF na Mal´e Stranˇe a na kolej´ıch UK v Troji. Slova ˇ ıpov´a za podporu d´ıky si zaslouˇz´ı tak´e m´a pˇr´ıtelkynˇe Bc. Magdal´ena C´ a pomoc se stylizac´ı a u ´pravou textu.
Prohlaˇsuji, ˇze jsem svou bakal´aˇrskou pr´aci napsal samostatnˇe a v´ yhradnˇe s pouˇzit´ım citovan´ ych pramen˚ u. Souhlas´ım se zap˚ ujˇcov´an´ım pr´ace a jej´ım zveˇrejˇ nov´an´ım. V Praze dne 29. kvˇetna 2008
N´azev pr´ace: Monitor s´ıt’ov´e aktivity Autor: Jiˇr´ı Hork´ y Katedra (´ ustav): Katedra softwarov´eho inˇzen´ ystv´ı Vedouc´ı bakal´aˇrsk´e pr´ace: RNDr. Libor Forst e-mail vedouc´ıho: [email protected] Abstrakt: C´ılem pr´ace je n´avrh a implementace aplikace pro sledov´an´ı s´ıt’ov´eho provozu v re´aln´em ˇcase zamˇeˇren´a na vˇetˇs´ı toky dat. Aplikace bude urˇcena pro spr´avce s´ıtˇe, kteˇr´ı nemaj´ı moˇznost ˇci nechtˇej´ı nasadit ˇreˇsen´ı monitoringu pˇr´ımo v aktivn´ıch prvc´ıch s´ıtˇe. Snahou t´eto pr´ace je minimalizovat mnoˇzstv´ı syst´emov´ ych prostˇredk˚ u potˇrebn´ ych k bˇehu aplikace - aplikace by mˇela b´ yt nasaditeln´a na bˇeˇzn´ y serverov´ y hardware. Aplikace bude umoˇzn ˇovat konfiguraci mnoˇzstv´ı zachyt´avan´ ych dat (rozliˇsov´an´ı port˚ u, MAC adres, nastaven´ı agregace) a tak sniˇzovat objem statistick´ ych dat. Ned´ılnou souˇca´st´ı pr´ace bude i grafick´e rozhran´ı programu umoˇzn ˇuj´ıc´ı efektivn´ı zobrazen´ı zachycen´ ych statistik ve formˇe uˇzivatelem definovanov´ ych graf˚ u a tabulek. Aplikace bude naprogramov´ana v jazyce C a bude urˇcena pro UNIXov´e syst´emy Kl´ıˇcov´a slova: monitoring, s´ıt’, paket, zachyt´av´an´ı
Title: Network activity monitor Author: Jiˇr´ı Hork´ y Department: Department of Software Engineering Supervisor: RNDr. Libor Forst Supervisor’s e-mail address: [email protected] Abstract: Aim of this work is to design and implement real-time network monitoring application for higher traffic. Application will be intended for network administrators, who can’t or don’t want to monitor network directly, using active network equipment such as routers or switches. One of main effort would be to minimalize system resource requirements - application should be usable on common server hardware. Application will allow to configure amount of captured data (ports, MAC addresses) and thus lower the statistic data size. Integral part of this work will be graphical frontend enabling to effectively observe captured data and statistics in the form of user-defined charts and tables. Application will be programmed in C language and it will be aimed to UNIX systems. Keywords: monitoring, network, packet, capture
6
C´ıl pr´ ace C´ılem pr´ace je n´avrh a implementace aplikace pro sledov´an´ı s´ıt’ov´eho provozu se zamˇeˇren´ım na vˇetˇs´ı toky dat. Z´akladn´ım poˇzadavkem je navrhnout aplikaci, kter´a bude nasaditeln´a na bˇeˇzn´em hardware, tedy bez nutnosti speci´aln´ıch s´ıt’ov´ ych karet s hardwarovou podporou ˇci super v´ ykonn´ ych procesor˚ u. Je zˇrejm´e, ˇze tento poˇzadavek klade i urˇcit´e omezen´ı v mnoˇzstv´ı datov´ ych tok˚ u, kter´e by mˇela aplikace zvl´adat. Rozumn´ ym odhadem se zdaj´ı b´ yt datov´e toky okolo 1 Gbit. Z v´ yˇse uveden´eho d˚ uvodu tak´e nen´ı u ´kolem pr´ace detailn´ı zkoum´an´ı paket˚ u, tj. inspekce na u ´rovni aplikaˇcn´ı vrstvy. Z´aroveˇ n aplikace mus´ı umoˇzn ˇovat vizualizovat zachycen´a data ve formˇe uˇzivatelem definovan´ ych graf˚ u a tabulek. Uˇzivatel si tedy bude moci zvolit r˚ uzn´a omezen´ı a ˇcasov´e obdob´ı tak, aby mohl sledovat pr´avˇe jen ty u ´daje, kter´e ho zaj´ımaj´ı. To vˇse bude moˇzn´e jiˇz z jednou zachycen´ ych dat. Nebude tedy nutn´e nejprve definovat statistiky, kter´e konkr´etn´ıho uˇzivatele zaj´ımaj´ı, a aˇz pot´e zaˇc´ıt monitorovat. I to vˇsak bude moˇzn´e, ˇc´ımˇz lze efektivnˇe minimalizovat mnoˇzstv´ı zachyt´avan´ ych dat. Vzhledem k pˇredpokl´adan´emu obrovsk´emu mnoˇzstv´ı zachycen´ ych dat je u ´kolem pr´ace tak´e navrhnout kompromis mezi objemem statistick´ ych dat, stupˇ nem poˇzadadov´ ych informac´ı a rychlost´ı vlastn´ıho vyhodnocov´an´ı. Souˇc´ast´ı pr´ace je i ovˇeˇren´ı nasaditelnosti t´eto aplikace v re´aln´em prostˇred´ı a u ´vod do problematiky monitorov´an´ı s´ıtˇe.
7
Kapitola 1 Monitorov´ an´ı s´ıt´ı Kl´ıˇcem pro u ´spˇeˇsn´e fungov´an´ı kaˇzd´e organizace je spolehliv´a a dobˇre zabezpeˇcen´a poˇc´ıtaˇcov´a s´ıt’. Kaˇzd´ y v´ ypadek, sn´ıˇzen´a dostupnost s´ıt’ov´ ych aplikac´ı ˇci zv´ yˇsen´ı odezvy m´a za n´asledek nespokojenost klient˚ u, ztr´atu potenci´aln´ıch z´akazn´ık˚ u a v neposledn´ı ˇradˇe tak´e ztr´atu finanˇcn´ı. S pomoc´ı pravideln´eho sledov´an´ı s´ıtˇe lze v´ yˇse uveden´ ym n´asledk˚ um a situac´ım u ´spˇeˇsnˇe pˇredch´azet. V z´avislosti na pouˇzit´em monitorovac´ım mechanismu lze sledovat z´atˇeˇz jednotliv´ ych ˇc´ast´ı s´ıt´ı i jednotliv´ ych klient˚ u a m´ıt tak re´alnou pˇredstavu o vyuˇzit´ı s´ıtˇe, zahlcen´ı jednotliv´ ych 1 linek, existenci kritick´ ych m´ıst v s´ıti apod. Monitoring tedy pom´ah´a spr´avc˚ um s´ıtˇe vˇcas odhalit pˇr´ıˇcinu probl´emu, zjiˇst’ovat p˚ uvodce pˇret´ıˇzen´ı linek ˇci zpˇetnˇe analyzovat pˇr´ıpadn´e probl´emy. N´asleduj´ıc´ı seznam shrnuje v´ yˇse popsan´e d˚ uvody a pˇrid´av´a dalˇs´ı, nem´enˇe podstatn´e: • Prevence probl´em˚ u v s´ıti (a hlavnˇe pˇr´ıpadn´ ych n´asledk˚ u) • Efektivn´ı dohl´ıˇzen´ı na s´ıt’ a zjednoduˇsen´ı spr´avy s´ıtˇe pro administr´atory • Zv´ yˇsen´ı bezpeˇcnosti s´ıtˇe odhalen´ım vnˇejˇs´ıch i vnitˇrn´ıch u ´tok˚ u • Urˇcen´ı kritick´ ych m´ıst v s´ıti za u ´ˇcelem optimalizace jej´ı infrastruktury • Sledov´an´ı dostupnosti a vyuˇzit´ı sluˇzeb • Sledov´an´ı aktivity jednotliv´ ych uˇzivatel˚ u ´ • Uˇctov´an´ı sluˇzeb na z´akladˇe pˇrenesen´ ych dat 2 • Dodrˇzov´an´ı vyhl´aˇsky ˇc. 485/2005[1] o elektronick´e komunikaci[1] 1
sp´ıˇse znam´ ych jako bottleneck˚ u Dne 23. 4. 2008 byl poslaneckou snˇemovnou schv´alen pozmˇen ˇovac´ı n´avrh z´akona ˇc. 127/2005 Sb. o elektronick´ ych komunikac´ıch[2]. Pokud tento n´avrh schv´al´ı sen´at a 2
8
Je zˇrejm´e, ˇze k naplnˇen´ı pˇredchoz´ıch bod˚ u je tˇreba r˚ uzn´a hloubka zkoum´an´ı datov´ ych tok˚ u. Napˇr´ıklad ke zjiˇstˇen´ı celkov´eho vyuˇzit´ı s´ıtˇe staˇc´ı zkoumat celkov´ y poˇcet pˇrenesen´ ych dat a paket˚ u v ˇcase. K u ´ˇctov´an´ı jiˇz bude nutn´e umˇet rozliˇsit jednotliv´e uˇzivatele (IP adresy), k sledov´an´ı vyuˇzit´ı sluˇzeb pak i jednotliv´e porty. Ne kaˇzd´ y program a zp˚ usob monitorov´an´ı s´ıtˇe dok´aˇze splnit vˇsechny tyto body. Monitoring s´ıtˇe lze rozdˇelit dle zp˚ usobu, jak´ ym je prov´adˇen, na tˇri stˇeˇzejn´ı kategorie.
1.1
Aktivn´ı monitoring
Aktivn´ı monitorov´an´ı s´ıtˇe spoˇc´ıv´a v generov´an´ı paket˚ u na jednom m´ıstˇe v s´ıti a jejich zachyt´av´an´ı na m´ıstˇe druh´em. M˚ uˇzeme takto mˇeˇrit napˇr´ıklad zpoˇzdˇen´ı pˇri pr˚ uchodu s´ıt´ı, ztr´atovost nebo celkovou dosaˇzenou propustnost. Tento provoz je vˇsak umˇel´ y, od skuteˇcn´eho provozu uˇzivatel˚ u se zpravidla v´ yraznˇe liˇs´ı. Dalˇs´ı nev´ yhodou je moˇzn´e ovlivnˇen´ı samotn´eho provozu uˇzivatel˚ u. Mezi typick´e aplikace v t´eto kategorii patˇr´ı pˇredevˇs´ım: ping, traceroute, kter´e jsou souˇca´st´ı snad kaˇzd´eho operaˇcn´ıho syst´emu. Na tˇechto programech jsou pak postaveny cel´e projekty jako jsou pingplotter [3], NeoTrace[4], traceping, a mnoho dalˇs´ıch 3 .
1.2
Pasivn´ı monitoring
Pˇri pasivn´ım monitorov´an´ı se do s´ıtˇe nepos´ılaj´ı ˇz´adn´e pakety, pakety jsou pouze zachyt´av´any. Tento pˇr´ıstup m´a v´ yhodu v naprost´e transparentnosti pro uˇzivatele s´ıtˇe a v re´alnosti monitorovan´ ych dat. Pomoc´ı t´eto metody vˇetˇsinou prob´ıh´a mˇeˇren´ı objemov´ ych a ˇcasov´ ych parametr˚ u provozu, kter´e m˚ uˇzou b´ yt pˇr´ıpadnˇe vztaˇzen´e k jednotliv´ ym uˇzivatel˚ um. Monitov´an´ı zpravidla zahrnuje: 1. Zachycen´ı cel´eho paketu 2. Naˇcten´ı hlaviˇcky paketu 3. Uloˇzen´ı dat z hlaviˇcky do datab´aze pro pozdˇejˇs´ı zpracov´an´ı ˇ bude mj. moˇznost postihnout ISP sankc´ı aˇz 10 mil. Kˇc pˇri nedodrˇzov´an´ı prezident CR, vyhl´ aˇsky [1]. 3 Rozs´ ahl´ y seznam aplikac´ı zab´ yvaj´ıc´ı se aktivn´ım monitoringem je k nalezen´ı na http://www.caida.org/tools/taxonomy/measurement/
9
Existuje nespoˇcetn´e mnoˇzstv´ı program˚ u a utilit pro pasivn´ı monitorov´an´ı. Vzhledem k zamˇeˇren´ı t´eto pr´ace pr´avˇe na pasivn´ı monitoring, je nˇekolik v´ yznam´ ych program˚ u bl´ıˇze pops´ano v sekci 1.4.
1.3
SNMP-like monitorov´ an´ı
Zvl´aˇstn´ı postaven´ı mezi monitory s´ıtˇe m´a protokol SNMP4 . Jde o urˇcit´ y kompromis mezi pasivn´ım a aktivn´ım monitorov´an´ım. Jedn´a se o aplikaˇcn´ı protokol zaloˇzen´ y na modelu klient/server. Statistick´a data se zpracov´avaj´ı na serveru, v SNMP terminologii oznaˇcovan´emu jako SNMP agent. Ten monitoruje stav zaˇr´ızen´ı, na kter´em bˇeˇz´ı, a ukl´ad´a aktu´aln´ı sledovan´e hodnoty do MIB5 (pasivn´ı ˇca´st). Tato data jsou do MIB zapisov´ana periodicky, ˇc´ımˇz dojde k pˇreps´an´ı star´ ych hodnot. Server je pak na tato data dotazov´an klientem, neboli tzv. network managerem (aktivn´ı ˇc´ast). Sledovan´e hodnoty maj´ı vˇetˇsinou aktu´aln´ı (vyt´ıˇzen´ı CPU, pouˇzit´a pamˇet’, uptime), ˇci kumulativn´ı charakter (poˇcet pˇr´ıchoz´ıch, odchoz´ıch ˇci chybov´ ych paket˚ u). Z logiky ukl´ad´an´ı dat do MIB je zˇrejm´e, ˇze k vytvoˇren´ı ˇcasov´ ych statistik je nutn´e se periodicky dotazovat SNMP agent˚ u na zkouman´a data a tato data zan´aˇset do intern´ı datab´aze ˇci rovnou graficky zpracov´avat. Tento proces se naz´ yv´a SNMP polling. Jednou z hlavn´ıch v´ yhod pouˇz´ıt´ı protokolu SNMP je jeho znaˇcn´a rozˇs´ıˇrenost, v dneˇsn´ı dobˇe je implementov´an t´emˇeˇr na kaˇzd´em lepˇs´ım s´ıt’ov´em zaˇr´ızen´ı. To vˇsak nese i nev´ yhodu v podobˇe r˚ uznorodosti rozˇs´ıˇren´ı MIB r˚ uzn´ ymi v´ yrobci. Mezi dalˇs´ı ˇcasto diskutovan´e nev´ yhody patˇr´ı bez-peˇcnost (viz [6]), pˇridan´a z´atˇeˇz monitorovan´ ym zaˇr´ızen´ım a z hlediska monitorov´an´ı s´ıtˇe pak mal´a ˇsk´alovatelnost sledov´an´ı, tj. nemoˇznost monitov´an´ı jednotliv´ ych uˇzivatel˚ u apod. Existuje cel´a ˇrada program˚ u vyuˇz´ıvaj´ıc´ı protokol SNMP. Pominu-li programy jednotliv´ ych v´ yrobc˚ u s´ıt’ov´ ych zaˇr´ızen´ı, kter´e jsou zpravidla kompatibiln´ı jen s dan´ ymi prvky, a zamˇeˇr´ım se na volnˇe dostupn´e programy pouˇz´ıvan´e pr´avˇe k monitorov´an´ı s´ıtˇe, je nutn´e mj. zm´ınit programy Cacti [8], MRTG[8] ˇci projekt net-snmp[9]. 4
Simple Network Management Protocol, v´ıce informac´ı k nalezen´ı na [5] Management Information Base. Jedn´a se o datab´azi, kter´a definuje, jak´a data dan´ y agent udrˇzuje a jak´e operace jsou nad tˇemito daty povoleny. Z´akladn´ı podoba MIB je definov´ ana standardem, jednotliv´ı v´ yrobci zaˇr´ızen´ı ji vˇsak zpravidla rozˇsiˇruj´ı. Viz [5] 5
10
1.4
Existuj´ıc´ı ˇ reˇ sen´ı pro pasivn´ı monitorov´ an´ı
1.4.1
NetFlow
Netflow je otevˇren´ y protokol pro sledov´an´ı s´ıtˇe vytvoˇren´ y firmou Cisco Systems, Inc.[10]. Zaˇr´ızen´ı, na kter´ ych je povolen (obvykle switche a routery), generuj´ı statistiky pro kaˇzd´ y s´ıt’ov´y proud. Ten je definov´an sedmi unik´atn´ımi kl´ıˇci: • • • • • • •
Zdrojovou IP adresou C´ılovou IP adresou Zdrojov´ ym portem C´ılov´ ym portem Pouˇzit´ ym protokolem na s´ıt’ov´e vrstvˇe (IP) TOS6 Vstupn´ım rozhran´ım
O kaˇzd´em proudu pak existuj´ı typicky7 n´asleduj´ıc´ı informace: • • • • • • • •
Zdrojov´a a c´ılov´a IP adresa Zdrojov´ y a c´ılov´ y TCP/UDP port Poˇcet pˇrenesen´ ych dat a paket˚ u TOS ˇ zaˇca´tku a konec toku Cas ˇ ısla vstupn´ıch a v´ C´ ystupn´ıch s´ıt’ov´ ych rozhran´ıch Flagy protokolu TCP Routovac´ı informace (next-hop adresa, ˇc´ıslo autonomn´ıho syst´emu zdroje a c´ıle, s´ıt’ov´e masky zdroje a c´ıle)
Pr´avˇe tato data si ˇz´ad´a i vyhl´aˇska o elektronick´ ych komunikac´ıch[1]. Statistiky o jednotliv´ ych toc´ıch jsou pot´e exportov´any do netflow kolektor˚ u, z nichˇz jsou pak pouˇz´ıv´any tzv. analyz´atory. Netflow analyz´ator i kolektor m˚ uˇze b´ yt um´ıstˇen na stejn´em serveru. Jak lze vidˇet ze z´aznamu pro kaˇzd´ y tok, NetFlow n´am dovol´ı pouˇz´ıt monitorov´an´ı pro vˇsechny body uveden´e v kapitole 1. 6
Type Of Service, nepˇr´ıliˇs ˇcasto vyuˇz´ıvan´ y parametr IP hlaviˇcky Kompletn´ı seznam pro jednotliv´e verze je k nalezen´ı v dokumentaci NetFlow, viz [10][11][12][13] 7
11
Obr´azek 1.1: Architektura Netflow. Obr´azek byl z´ısk´an z [11].
Vzhledem k zat´ıˇzen´ı na monitorovac´ım zaˇr´ızen´ı se m´ısto zpracov´av´an´ı vˇsech paket˚ u ˇcasto vyuˇz´ıv´a tzv. vzorkovan´e zachyt´av´an´ı, tj. zkoum´an´ı kaˇzd´eho n-t´eho paketu. Protokol NetFlow nemus´ı b´ yt nutnˇe provozov´an pouze na aktivn´ıch ’ s´ıt ov´ ych prvc´ıch. Existuje i moˇznost nasadit tzv. neflow sondy (servery pasivnˇe zachyt´av´aj´ıc´ı veˇsker´ y provoz), kter´e generuj´ı data m´ısto router˚ u ˇci switch˚ u (viz [14]).
1.4.2
nTop
Program nTop[22] patˇr´ı asi k nejzn´amˇejˇs´ım open-source pasivn´ım monitor˚ um s´ıt’ˇe. Jedn´a se o multiplatformn´ı program, kter´ y pomoc´ı r˚ uzn´ ych plugin˚ u nab´ız´ı rozˇs´ıˇren´ı funkc´ı aplikace. Program s´am o sobˇe obsahuje webov´ y server a vyuˇz´ıv´a datab´azovou knihovnu gdbm. Ke sv´emu chodu tedy nepotˇrebuje aktivnˇe spuˇstˇenou ˇz´adnou jinou aplikaci. Webov´e rozhran´ı programu umoˇzn ˇuje prohl´ıˇzen´ı provozu dle nˇekolika krit´eri´ı. V z´avislosti na nastaven´ı program umoˇzn ˇuje sledovat aktu´aln´ı, pr˚ umˇern´ y a celkov´ y provoz na zvolen´ ych ip adres´ach, portech a protokolech spolu s pomˇernˇe detailn´ımi informacemi (operaˇcn´ı syst´em stroj˚ u, hop-count, pr˚ umˇern´a velikost paket˚ u, atd). D´ale mj. umoˇzn ˇuje vyuˇzit´ı NetFlow, ˇci SNMP protokolu. Naopak bez jin´ ych rozˇs´ıˇren´ı neumoˇzn ˇuje generov´an´ı graf˚ u celkov´e z´atˇeˇze, jednotliv´ ych stroj˚ u ˇci aplikac´ı v ˇcase (v z´akladn´ım nastaven´ı podporuje jen celkov´e grafy). Ty je moˇzn´e za12
pnout pomoc´ı podpory RRD8 graf˚ u, je vˇsak nutn´e grafy, kter´e se budou generovat, definovat pˇredem. Nelze tedy z jiˇz jednou zachycen´ ych dat generovat nov´e grafy. Bˇehem testov´an´ı programu v provozu na Mal´e Stranˇe (viz kapitola 4.4), bylo zat´ıˇzen´ı syst´emu pˇri pouˇz´ıt´ı nTop se zapnutou podporou RRD graf˚ u cca 8-10x vˇetˇs´ı neˇz s aplikac´ı, kter´a je pˇredmˇetem t´eto pr´ace. Kv˚ uli t´eto z´atˇeˇzi jiˇz doch´azelo k zahazov´an´ı paket˚ u. Na druhou stranu je vˇsak nutno poznamenat, ˇze vzhledem ke zp˚ usobu generov´an´ı graf˚ u, bylo jejich zobrazovan´ı okamˇzit´e. Nav´ıc program nTop poskytoval mnohem detailnˇejˇs´ı informace provozu.
8
Round Robin Database, popul´arn´ı zp˚ usob vykreslov´an´ı graf˚ u z´atˇeˇze apod. Viz
[25]
13
Kapitola 2 NAMon - Network Activity Monitor Hlavn´ı ˇca´st´ı t´eto pr´ace je n´avrh a implementace vlastn´ıho programu, nazvan´eho NAMon. Detailnˇejˇs´ı informace o samotn´e implementaci jsou k nalezen´ı v program´atorsk´e dokumentaci(viz pˇr´ıloha B), informace o pouˇz´ıv´an´ı aplikace pak v dokumentaci uˇzivatelsk´e (viz pˇr´ıloha A).
2.1
Model aplikace
Obr´azek 2.1: S´ıt’ov´ y model programu NAMon.
14
S´ıt’ov´ y model aplikace zobrazuje obr´azek 2.1. Monitorovac´ı server je pˇripojen k switchi um´ıstˇen´emu v dan´e, monitorovan´e s´ıti. Na switchi (lze pouˇz´ıt tak´e hub) je pot´e nastaven port mirroring1 . V z´avislosti na nastaven´ı switche lze monitorovat jen urˇcit´e segmenty s´ıtˇe. Tyto pakety jsou zpracov´any monitorovac´ım serverem, kter´ y sv´e z´aznamy ukl´ad´a na server, jeˇz slouˇz´ı jako u ´loˇziˇstˇe. Klientsk´e stanice, kter´e mohou b´ yt um´ıstˇeny kdekoliv, se pak dotazuj´ı serveru s daty na jednotliv´e statistiky provozu. Storage server m˚ uˇze b´ yt provozov´an i na stejn´em stroji, kde prob´ıh´a monitorov´an´ı, t´ım se vˇsak zv´ yˇs´ı jeho zat´ıˇzen´ı.
2.2
N´ avrh aplikace
Bˇehem n´avrhu aplikace bylo tˇreba prov´est nˇekolik z´asadn´ıch rozhodnut´ı ovlivˇ nuj´ıc´ıch chod programu. Jednalo se pˇredevˇs´ım o: • • • •
Zp˚ usob zachyt´an´ı paket˚ u Zp˚ usob uchov´av´an´ı zachycen´ ych dat Zp˚ usob agregace a cachov´an´ı paket˚ u v aplikaci Volba prostˇred´ı klientsk´e aplikace
2.2.1
Zachyt´ av´ an´ı
Zp˚ usob a tedy i rychlost zachyt´av´an´ı paket˚ u je pro bˇeh aplikace zcela z´asadn´ı. Existuj´ı v podstatˇe dvˇe cesty, kter´ ymi se d´a ub´ırat. Prvn´ı je napsan´ı vlastn´ıho low-level rozhran´ı k zachyt´av´an´ı - tedy m´ıt plnou kontrolu nad pakety, coˇz d´av´a prostor k r˚ uzn´ ym optimalizac´ım uˇsit´ ym na m´ıru programu apod. Druhou moˇznost´ı je pouˇz´ıt´ı jiˇz existuj´ıc´ıho API, kter´e k zachyt´av´an´ı slouˇz´ı. V´ yhodou je ulehˇcen´ı pr´ace, ovˇeˇren´a funkˇcnost a v neposledn´ı ˇradˇe tak´e pˇrenositelnost k´odu mezi r˚ uzn´ ymi Unixov´ ymi syst´emy. Tato cesta byla nakonec zvolena. Zachyt´av´an´ı dat prob´ıh´a pomoc´ı knihovny libpcap. Jedn´a se v´ ysledek pr´ace autor˚ u programu tcpdump[15]. Tato knihovna pˇredstavuje osvˇedˇcen´e a pˇrenositeln´e2 API slouˇz´ıc´ı k zachyt´av´an´ı paket˚ u. Tuto knihovnu mj. vyuˇz´ıvaj´ı programy jako ntop[22], tcpdump, ethereal apod. Knihovna rovnˇeˇz umoˇzn ˇuje pomˇernˇe komplexn´ı a efektivn´ı filtrov´an´ı vstupn´ıch paket˚ u. 1
Technologie pouˇz´ıvan´ a na switch´ıch. Switch pos´ıl´a kopii veˇsker´ ych paket˚ u z dan´ ych fyzick´ ych port˚ u na jeden dalˇs´ı port, kde je zpravidla pˇripojen monitor s´ıtˇe. 2 Existuje i verze pro Windows nazvan´a Winpcap. Autor se vˇsak pˇrenositelnost´ı na tuto platformu nezab´ yval.
15
2.2.2
Zp˚ usob uchov´ av´ an´ı zachycen´ ych dat
Pˇri rozhodov´an´ı o zp˚ usobu ukl´ad´an´ı dat bylo nutn´e vz´ıt v potaz n´asleduj´ıc´ı body: Rychlost ukl´ ad´ an´ı - ukl´ad´an´ı mus´ı b´ yt dostateˇcnˇe rychl´e, aby zvl´adalo ukl´ad´an´ı v ˇr´adu deseti tis´ıc˚ u paket˚ u za vteˇrinu. Rychlost dotazov´ an´ı - je tˇreba m´ıt na pamˇeti, ˇze z tˇechto dat se d´ale vytv´aˇrej´ı statistiky. Je proto nutn´e vybrat takovou reprezentaci, nad kterou je pˇrirozen´e a rychl´e dotazov´an´ı. Vzd´ alen´ y pˇ r´ıstup k dat˚ um - je nutn´e, aby se k dat˚ um dalo pˇristupovat vzd´alenˇe, tedy ne jen ze stanice, kde jsou fyzicky uloˇzen´e (kter´a typicky nebude na zcela pˇr´ıstupn´em m´ıstˇe - napˇr. v serverovnˇe). V´ıcen´ asobn´ y pˇ r´ıstup - k dat˚ um m˚ uˇze v jeden okamˇzik pˇristupovat v´ıce uˇzivatel˚ u vzhledem k poˇzadavku statistik v re´aln´em ˇcase. Kupˇr´ıkladu bude monitorovac´ı server ukl´adat data, na kter´a se ve stejn´e dobˇe bude klient cht´ıt dotazovat. Je tedy nutn´e zajistit konzistenci i v tomto pˇr´ıpadˇe. Dostupnost - nejedn´a se o nejd˚ uleˇzitˇejˇs´ı bod, ale pˇr´ıjemnou vlastnost´ı ukl´ad´an´ı by mohla b´ yt dostupnost k dalˇs´ımu zpracov´av´an´ı dat extern´ımi programy. V praxi by to znamenalo nevytv´aˇren´ı vlastn´ıho form´atu datov´ ych soubor˚ u, ale pouˇz´ıv´an´ı jiˇz zn´am´eho a osvˇedˇcen´eho ˇreˇsen´ı. Vzhledem k v´ yˇse uveden´ ym bod˚ um bylo rohodnuto pouˇz´ıt datab´azov´ y server. Ten umoˇzn´ı skladov´an´ı velk´eho mnoˇzstv´ı zachycen´ ych dat a efektivn´ı a rychl´e dotazov´an´ı. M´a tak´e prostˇredky k ˇr´ızen´ı v´ıcen´asobn´eho pˇr´ıstupu. Lze jej provozovat na monitorovac´ım i na vlastn´ım stroji. Jako doplˇ nkovou sluˇzbu dost´av´ame tak´e moˇznost replikace dat ˇci automatick´eho z´alohov´an´ı. Hlavn´ı ot´azkou vˇsak z˚ ust´av´a rychlost. Zˇrejmˇe nebude moˇzn´e ukl´adat informace o kaˇzd´em paketu do vlastn´ıho z´aznamu (pr˚ umˇern´ y provoz 17 Mbit generoval bˇehem testovac´ıho provozu cca 50 milion˚ u paket˚ u za hodinu), ale bude nutn´e tyto informace vhodn´ ym zp˚ usobem agregovat a cachovat pˇr´ımo v programu, ˇc´ımˇz se nˇekolikan´asobnˇe sn´ıˇz´ı objem dat a tedy i poˇcet vkl´ad´an´ı do datab´aze. Testovac´ı provoz uk´azal (viz kapitola 4), ˇze takto zvolen´ y zp˚ usob ukl´ad´an´ı je dostateˇcnˇe rychl´ y. V souˇcasnosti je na trhu spousta r˚ uzn´ ych datab´azov´ ych server˚ u. Sv˚ uj produkt nab´ız´ı velk´e spoleˇcnosti jako Oracle, IBM nebo Microsoft, ale k dispozici je i cel´a ˇrada dalˇs´ıch produkt˚ u, kter´e jsou urˇcen´e pro voln´e pouˇzit´ı – MySQL, PostgreSQL, Firebird a dalˇs´ı. Vzhledem k c´ılov´e platformˇe Unix a snaze vyhnout se z´avislosti na komerˇcn´ıch produktech bylo 16
zvoleno MySQL3 . Samotn´a datab´aze je strukturovan´a do tabulek dle jednotliv´ ych dn˚ u. To m´a za v´ yhodu zmenˇsen´ı poˇctu z´aznam˚ u v tabulce, ˇcili zrychlen´ı jednotliv´ ych dotaz˚ u do datab´aze. V pˇr´ıpadˇe dotazu na delˇs´ı ˇcasov´e obdob´ı neˇz jeden den nen´ı probl´em pˇr´ısluˇsn´e tabulky spojit. Kaˇzd´a tabulka obsahuje n´asleduj´ıc´ı sloupce: • • • • • • • •
Zdrojov´a a c´ılov´a IP adresa Zdrojov´a a c´ılov´a MAC adres (volitelnˇe) Zdrojov´ y a c´ılov´ y port (volitelnˇe) Transportn´ı protokol Poˇcet paket˚ u Poˇcet pˇrenesen´ ych dat Zaˇc´atek ˇcasov´eho intervalu s pˇresnost´ı na sekundy Hodina pˇri zaˇca´tku ˇcasov´eho intervalu4 ,
pˇriˇcemˇz prim´arn´ım kl´ıˇcem jsou poloˇzky zdrojov´a a c´ılov´a IP a MAC (volitelnˇe) adresy, porty (volitelnˇe), protokol a ˇcasov´ y interval. Tento form´at dovoluje i aplikac´ım tˇret´ıch stran pomˇernˇe jednoduch´ y pˇr´ıstup k zachycen´ ym informac´ım.
2.2.3
Agregace a cachov´ an´ı paket˚ u v aplikaci
Jak jiˇz bylo zm´ınˇeno v´ yˇse, obrovsk´e mnoˇzstv´ı paket˚ u si vyˇzaduje urˇcit´e shlukov´an´ı a n´asledn´e cachov´an´ı podobn´ ych paket˚ u pˇred jejich uloˇzen´ım do datab´aze. Podobn´e pakety jsou, v z´avislosti na nastaven´ı (viz ˇca´st 2.4), takov´e pakety, kde se shoduj´ı n´asleduj´ıc´ı poloˇzky(kl´ıˇce): • • • • •
Zdrojov´a a c´ılov´a MAC adresa (volitelnˇe) Zdrojov´a a c´ılov´a IP adresa Zdrojov´ y a c´ılov´ y port (volitelnˇe) Pouˇzit´ y transportn´ı prokol (podporov´any jsou TCP, UDP a ICMP) ˇ Casov´ y interval
3
Nemˇel by vˇsak b´ yt probl´em pouˇz´ıt libovoln´ y jin´ y produkt. Tato hodnota se d´ a z´ıskat i z pˇredchoz´ıho sloupce, v praxi se ale uk´azalo, ˇze je pot´e dotazov´ an´ı na konkr´etn´ı hodinu aˇz 5x pomalejˇs´ı. 4
17
ˇ Casov´ y interval popisuje nejmenˇs´ı rozliˇsitelnou jednotku ˇcasu bˇehem zachyt´av´an´ı. Bˇehem jednoho intervalu jsou vˇsechny podobn´e pakety shlukov´any k sobˇe, ˇc´ımˇz doch´az´ı k redukci objemu dat, ale i k urˇcit´e ztr´atˇe pˇresnosti mˇeˇren´ı. Je-li napˇr´ıklad tento interval nastaven na 5 minut, nelze se dotazovat na toky bˇehem prvn´ı ˇci posledn´ı minuty, ale jen na cel´ y tento interval. V´ ysledn´a hodnota je tedy zpr˚ umˇerovan´a hodnota bˇehem ˇcasov´eho intervalu. Tento interval je plnˇe konfigurovateln´ y, pˇri kr´atk´ ych intervalech je vˇsak nutn´e poˇc´ıtat s velk´ ym n´arustem objemu dat. Vliv t´eto hodnoty na pˇresnost mˇeˇren´ı a velikost v´ ysledn´e datab´aze byl pˇredmˇetem zkoum´an´ı re´aln´eho provozu v kapitole 4. Prov´adˇen´ı t´eto agregace je moˇzno nechat pˇr´ımo na datab´azov´em serveru (pomoc´ı konstrukce ON DUPLICATE KEY UPDATE), coˇz znamen´a dotaz do datab´aze pro kaˇzd´ y paket. Druhou moˇznost´ı je pˇred samotn´ ym vloˇzen´ım do datab´aze pakety v programu cachovat. Vzhledem k zamˇeˇren´ı na vysok´e toky a tedy k potenci´aln´ımu obrovsk´emu mnoˇzstv´ı dotaz˚ u byla zvolena druh´a moˇznost5 . Cachov´an´ı znamen´a nutnost ukl´adat informace o paketech ve vhodn´e datov´e struktuˇre tak, aby bylo umoˇznˇeno rychl´e vyhled´av´an´ı potenci´aln´ıho podobn´eho paketu a zmˇena poˇctu pˇrenesen´ ych paket˚ u a velikosti dat k takov´emu z´aznamu. Z t´eto struktury by mˇelo j´ıt tak´e efektivnˇe mazat, k ˇcemuˇz doch´az´ı v pˇr´ıpadˇe vkl´ad´an´ı do samotn´e datab´aze. Pˇrevl´adat vˇsak jistˇe bude vyhled´av´an´ı a n´asledn´a zmˇena z´aznamu nad vkl´ad´an´ım nov´eho ˇci uvolˇ nov´an´ım star´eho z´aznamu6 . Je dobr´e si uvˇedomit, ˇze kaˇzd´e vloˇzen´ı nov´eho z´aznamu do t´eto datov´e ´ eˇsnost´ı struktury znamen´a vlastnˇe samostatn´ y dotaz do datab´aze. Uspˇ t´eto cache, tzv. cache-hitu se zab´ yv´a sekce 4.3 o re´aln´em provozu. Z tˇechto hledisek se jako nejv´ yhodnˇejˇs´ı jev´ı pouˇzit´ı hashovac´ı tabulky. Ta umoˇzn´ı (pˇri vhodn´e velikosti) vyhled´av´an´ı, vkl´ad´an´ı i maz´an´ı v konstantn´ım ˇcase (amortizovanˇe). Jako jedin´ y z´avaˇzn´ y probl´em se jev´ı nalezen´ı optim´aln´ı velikosti hashovac´ı tabulky. Ta ale m˚ uˇze b´ yt na z´akladˇe pozorov´an´ı provozu v dan´e s´ıti pomˇernˇe efektivnˇe odhadnuta. Druhou moˇznost´ı je velikost hashovac´ı tabulky dynamicky mˇenit za cenu jist´e ztr´aty v´ ykonu pˇri jej´ı zmˇenˇe, ale s minim´aln´ım zaruˇcen´ ym v´ ykonem pˇri vkl´ad´an´ı. 5 Ve skuteˇcnosti jsou data do datab´aze i v pˇr´ıpadˇe cachov´an´ı vkl´ad´any pomoc´ı konstrukce ON DUPLICATE KEY. Tˇechto dotaz˚ u je vˇsak s pouˇzit´ım cachov´an´ı podstatnˇe m´enˇe. 6 Obvykl´e pos´ıl´ an´ı dat mezi dvˇemi stanicemi prob´ıh´a na stejn´ ych portech, generuje tud´ıˇz podobn´e pakety.
18
V aplikaci byla pouˇzita kombinace obou pˇr´ıstup˚ u. Na z´akladˇe pozorov´an´ı bˇehem testovac´ıho provozu je nastavena minim´aln´ı velikost tabulky s pomˇernˇe velkou rezervou. Ta vˇsak m˚ uˇze b´ yt za chodu dle konkr´etn´ı situace zvˇetˇsov´ana (detaily viz pˇr´ıloha B). K tomuto byla pouˇzita ˇca´steˇcnˇe pozmˇenˇen´a implementace hashovac´ı tabulky z knihovny GLiB [16].
2.2.4
Prostˇ red´ı klientsk´ e aplikace
Dalˇs´ım z´asadn´ım rozhodnut´ım, kter´e bylo potˇreba uˇcinit, je volba prostˇred´ı, ve kter´em bude fungovat klientsk´a ˇca´st aplikace. Rozhodov´an´ı prob´ıhalo mezi desktopovou aplikac´ı a webov´ ym rozhran´ım. V pˇr´ıpadˇe volby desktopov´e aplikace by bylo nutn´e zvolit mezi konkr´etn´ı platformou, tedy Unix nebo Windows. Naproti tomu je webov´e rozhran´ı nez´avisl´e na platformˇe a odpad´a i nutnost instalace klientsk´eho programu. Vzledem k uveden´ ym v´ yhod´am bylo rozhodnuto pro webov´e rozhran´ı. Detailnˇeji o t´eto ˇca´sti bakal´aˇrsk´e pr´ace pojedn´av´a kapitola 3.
2.3
Architektura programu Start Aplikace Rozdělení do vláken
pakety Síťová karta
Zachytávací vlákno
Ukládací vlákno
Informační vlákno
Časovací vlákno
hlavičky paketů
Hashovací tabulka
Obr´azek 2.2: Architektura NAMon Architekturu programu zobrazuje obr´azek 2.2. Program se po spuˇstˇen´ı rozdˇel´ı na 4 vl´akna.
19
Zachyt´avac´ı vl´akno prov´ad´ı vlastn´ı pˇr´ıjem paket˚ u a jejich filtrov´an´ı. N´aslednˇe je pak ukl´ad´a do hashovac´ı tabulky, respektive aktualizuje jej´ı z´aznamy v pˇr´ıpadˇe podobn´ych paket˚ u. Toto vl´akno je spuˇstˇeno s maxim´aln´ı prioritou. Ukl´adac´ı vl´akno je spuˇstˇeno s minim´aln´ı prioritou. Pokud nen´ı hashovac´ı tabulka pr´azdn´a, zaˇcne vl´akno data ukl´adat z tabulky do samotn´e datab´aze. Pokud je hashovac´ı tabulka pr´azdn´a, usp´ı se na nastavenou dobu. Tato doba v´ yznamnˇe ovlivˇ nuje v´ ysledn´ y cache-hit, ale z´aroveˇ n zp˚ usobuje zpoˇzdˇen´ı v zobrazov´an´ı - data se do datab´aze v nejhorˇs´ım pˇr´ıpadˇe dostanou aˇz po t´eto dobˇe. V re´aln´em provozu (viz kapitola 4) se uk´azalo, ˇze konkr´etnˇe tento pˇr´ıstup nen´ı dostateˇcnˇe v´ ykonn´ y. Nakonec existuj´ı v programu dvˇe instance hashovac´ı tabulky, mezi kter´ ymi se vˇzdy pˇrepne v pˇr´ıpadˇe ukl´ad´an´ı. Nedoch´az´ı tedy k souˇcasn´emu pˇr´ıstupu zachyt´avac´ıho a ukl´adac´ıho vl´akna do hashovac´ı tabulky. Informaˇcn´ı vl´akno slouˇz´ı k zobrazov´an´ı v´ ystupu programu (pˇrev´aˇznˇe lad´ıc´ı informace), k zachyt´av´an´ı uˇzivatelsk´ ych vstup˚ u a n´asledn´emu vypisov´an´ı aktu´aln´ıho provozn´ıho stavu. ˇ Casovac´ ı vl´akno. Jeho u ´kolem je nastavov´an´ı aktu´aln´ıho ˇcasov´eho intervalu, slouˇz´ı tak´e k pˇrep´ın´an´ı datab´azov´ ych tabulek pˇri pˇrechodu do n´asleduj´ıc´ıho dne.
2.4
Moˇ znosti nastaven´ı
Chod programu, velikost datab´aze, stupeˇ n z´ıskan´ ych informac´ı i vzhled webov´e aplikace znaˇcnˇe ovlivˇ nuje nastaven´ı programu. Program umoˇzn ˇuje dva zp˚ usoby nastavov´an´ı. Pro volbu v´ ykon z´asadnˇe ovlivˇ nuj´ıc´ıch atribut˚ u slouˇz´ı hlaviˇckov´ y soubor. Tento zp˚ usob byl zvolen hlavnˇe kv˚ uli zrychlen´ı samotn´e aplikace - pˇr´ıpadn´ y nepotˇrebn´ y k´od se do v´ ysledn´e aplikace v˚ ubec nedostane. Ostatn´ı, pro v´ ykon m´enˇe v´ yznamn´e atributy, je moˇzn´e zad´avat pˇr´ımo z pˇr´ıkazov´e ˇra´dky bˇehem spuˇstˇen´ı ˇci pomoc´ı konfiguraˇcn´ıho souboru.
20
2.4.1
Nastaven´ı pomoc´ı hlaviˇ ckov´ eho souboru
Toto nastavov´an´ı prob´ıh´a pomoc´ı souboru namon config.h. Pˇri kaˇzd´e zmˇenˇe je potˇreba aplikaci znovu zkompilovat, nˇekter´e zmˇeny si pak dokonce ˇz´adaj´ı u ´pravu pomocn´ ych struktur v datab´azi. Tyto u ´pravy automaticky provede instalaˇcn´ı skript. Po zmˇenˇe v tomto souboru je tedy nutn´e spustit instalaˇcn´ı skript, kter´ y se postar´a o vˇsechny nutn´e kroky. Nastavit lze tyto poloˇzky: MAC ENABLED - Zap´ın´a podporu rozliˇsov´an´ı MAC adres. Znamen´a to tedy dalˇs´ı dva sloupce v datab´azi, zvˇetˇsen´ı kl´ıˇce a jistou reˇzii nav´ıc. Vzhledem k podstatn´emu n´arustu velikosti datab´aze (cca dvakr´at), bude ˇcasto tato volba v re´aln´em nasazen´ı vypnut´a. nuje podporu rozliˇsov´an´ı port˚ u. Pro kaˇzd´ y PORT ENABLED - Ovlivˇ z´aznam se tedy uchov´av´a i c´ılov´ y a zdrojov´ y port. To potom znamen´a zvˇetˇsen´ı datab´aze o tyto poloˇzky, ale tak´e n´arust poˇctu z´aznam˚ u. Dojde totiˇz ke sn´ıˇzen´ı agregaˇcn´ıho pomˇeru pˇrid´an´ım dalˇs´ı kl´ıˇcov´e poloˇzky. V praxi se uk´azalo, ˇze pˇribude cca 30% z´aznam˚ u a samotn´a velikost datab´aze se zvˇetˇs´ı o asi 80%. V re´aln´em provozu je tedy nutn´e zv´aˇzit, jestli je nutn´e monitorovat i pouˇzit´e s´ıt’ov´e sluˇzby (na z´akladˇe port˚ u), nebo staˇc´ı informace o c´ılov´e a zdrojov´e stanici. STATS ENABLED - Zap´ın´a podporu provozn´ıch statistik samotn´eho programu. Jedn´a se o poˇcty pˇrijat´ ych a zahozen´ ych paket˚ u, u ´spˇeˇsnost cache, poˇctu SQL dotaz˚ u. To vˇse bˇehem ˇcasov´eho intervalu. y interval popsan´ y AGGREGATE INTERVAL - Jedn´a se o ˇcasov´ v sekci 2.2.2. Z´asadnˇe ovlivˇ nuje pˇresnost mˇeˇren´ı, velikost celkov´e datab´aze a tak´e cache-hit. Napˇr´ıklad pˇrechod z jednominutov´eho intervalu na pˇetiminutov´ y znamenal pˇri stejn´em provozu zmenˇsen´ı datab´aze cca dvakr´at. Lze nastavit od jedn´e sekundy (m´a smysl jen v pomal´ ych s´ıt´ıch) aˇz po jednu hodinu. SLEEP INTERVAL - Ud´av´a hodnotu v sekund´ach, na kterou se usp´ı vl´akno ukl´adaj´ıc´ı z´aznamy z hashovac´ı tabulky do samotn´e datab´aze. Ovlivˇ nuje v´ ysledn´ y cache-hit, tedy i poˇcet nutn´ ych dotaz˚ u do datab´aze. Z´aroveˇ n vˇsak zp˚ usobuje zpoˇzdˇen´ı v zobrazovan´ı statistik. HASH TABLE MIN SIZE - Ud´av´a poˇca´teˇcn´ı a z´aroveˇ n minim´aln´ı velikost hashtabulky. Tato hodnota je urˇcena pˇri instalaci. Vzhledem k velk´e rezervˇe a k vcelku mal´emu poklesu v´ ykonu pˇri nespr´avn´em nastaven´ı se nedoporuˇcuje mˇenit.
21
2.4.2
Ostatn´ı nastaven´ı
Tato nastaven´ı jsou zad´av´ana pomoc´ı pˇr´ıkazov´eho ˇra´dku a konfiguraˇcn´ıho souboru. Jedn´a se hlavnˇe o u ´daje t´ ykaj´ıc´ı se datab´aze (adresa datab´azov´eho serveru, jm´eno datab´aze a tabulky, pˇrihlaˇsovac´ı jm´eno a heslo). D´ale je pak moˇzn´e nastavov´an´ı filtru paket˚ u a zap´ın´an´ı lad´ıc´ıho v´ ystupu.
22
Kapitola 3 Webov´ e rozhran´ı Webov´e rohran´ı slouˇz´ı k zobrazov´an´ı statistik ve formˇe graf˚ u a tabulek. Je naprogramovan´e pomoc´ı PHP 5.0, zobrazov´an´ı graf˚ u je pak ˇreˇseno pomoc´ı javascriptu - pouˇzita byla upraven´a verze knihovny WebFx CHart [17]. Pro nastavov´an´ı vzhledu webov´eho rozhran´ı slouˇz´ı technologie CSS. Veˇsker´e grafy a tabulky se generuj´ı z re´aln´ ych dat (nejsou tedy pˇredpˇripraveny) a jsou definovan´e uˇzivatelem. V´ yhodou pouˇzit´ı javascriptu je pˇrenesen´ı v´ ypoˇcetn´ıho v´ ykonu k uˇzivateli. K zobrazen´ı kalend´aˇre slouˇz´ı javacsriptov´e funkce nazvan´e JS Calendar [18].
3.1
´ Uvodn´ ı obrazovka
Na u ´vodn´ı obrazovce prob´ıh´a pˇrihl´aˇsov´an´ı ke konkr´etn´ı datab´azi. Pˇri u ´spˇeˇsn´em pˇrihl´aˇsen´ı dojde k vytvoˇren´ı spojen´ı a inicializuj´ı se datov´e struktury pouˇz´ıvan´e v cel´e aplikaci. Mimo jin´e se z datab´aze naˇcte konkr´etn´ı nastaven´ı dan´e tabulky, tj. jestli je podporov´ano rozliˇsov´an´ı port˚ u, MAC adres a zda je zapnut modul kontroluj´ıc´ı provozn´ı stav aplikace. Pot´e dojde k naˇcten´ı dalˇs´ı str´anky umoˇzn ˇuj´ıc´ı samotn´e dotazov´an´ı.
3.2
Hlavn´ı str´ anka
Na hlavn´ı str´ance (obr´azek 3.1) prob´ıh´a veˇsker´e dotazov´an´ı. Dle typu dotazu je str´anka rozˇclenˇena na tˇri hlavn´ı ˇca´sti zobrazuj´ıc´ı grafy, ˇctvrtou ˇca´st´ı je pak n´apovˇeda. Vzhled jednotliv´ ych str´anek z´avis´ı na nastaven´ı zachyt´av´an´ı. Pokud nen´ı povoleno rozliˇsov´an´ı port˚ u ˇci MAC adres, pˇr´ısluˇsn´e moˇznosti se nezobrazuj´ı. 23
V t´eto z´aloˇzce prob´ıhaj´ı dotazy na celkov´ y provoz s´ıtˇe v ˇcase. Lze definovat nˇekolik omezen´ı na zobrazovan´a data (konkr´etn´ı IP adresa, port, rozsahy IP adres a port˚ u apod.), zvolit ˇcasov´e obdob´ı, jednotku zobrazov´an´ı a poˇzadovanou ˇcasovou pˇresnost. Zobrazovat lze nˇekolik graf˚ u v jednom, rozhran´ı umoˇzn ˇuje poˇc´ıtat procentu´aln´ı hodnoty vybran´ ych statistik. Zobrazit tak lze napˇr´ıklad pod´ıl webov´eho provozu vzhledem k celkov´emu, ˇci jen provoz zvolen´ ych poˇc´ıtaˇc˚ u bˇehem dne. D´ale lze vypsat konkr´etn´ı hodnoty v jednotliv´ ych ˇcasov´ ych intervalech. Uk´azka grafu a v´ ysledn´e tabulky je na obr´azc´ıch 3.2 a 3.3. Veˇsker´e moˇznosti nastaven´ı jsou detailnˇe pops´any v uˇzivatelsk´e dokumentaci (viz pˇr´ıloha A).
24
Obr´azek 3.2: Celkov´ y graf. Pr˚ umˇern´ y pˇetiminutov´ y provoz na Mal´e Stranˇe v MB dne 14.5.2008 (6:00-9:00).
Obr´azek 3.3: Celkov´ a tabulka. Pr˚ umˇern´ y pˇetiminutov´ y provoz na Mal´e Stranˇe v MB dne 14.5.2008(6:00-9:00).
3.2.2
Top statistiky
V t´eto z´aloˇzce se lze dotazovat na nejaktivnˇejˇs´ı IP adresy (uˇzivatele), porty (aplikace) ˇci pomˇer pouˇzit´ ych protokol˚ u bˇehem zvolen´eho obdob´ı. Rovnˇeˇz lze definovat nˇekolik omezen´ı na zobrazovan´a data, podobnˇe jako u celkov´ ych statistik. Zobrazovat lze nˇekolik graf˚ u najednou (za sebou). Konkr´etn´ı hodnoty se pak vypisuj´ı do tabulky, kde doch´az´ı k pˇr´ıpadn´emu pˇrekladu IP adres na dom´enov´a jm´ena. Uk´azku grafu a v´ ysledn´e tabulky lze vidˇet na obr´azc´ıch 3.4 a 3.5.
25
Obr´azek 3.4: Top graf. Top 7 zdrojov´ych IP adres bˇehem provozu na Mal´e Stranˇe v MB dne 14.5.2008 (6:00-9:00).
Obr´azek 3.5: Top tabulka. Top 7 zdrojov´ych IP adres bˇehem provozu na Mal´e Stranˇe v MB dne 14.5.2008 (6:00-9:00).
3.2.3
Statistiky provozu
Tato z´aloˇzka slouˇz´ı, jak jiˇz n´azev napov´ıd´a, ke sledov´an´ı provozn´ıch statistik. Jedn´a se pˇredevˇs´ım o sledov´an´ı poˇctu pˇrijat´ ych a zahozen´ ych paket˚ u, cache-hit hashtabulky a poˇctu dotaz˚ u do datab´aze ve zvolen´em ˇcasov´em obdob´ı. Jedn´a se vˇzdy o pr˚ umˇern´e hodnoty bˇehem nastaven´eho ˇcasov´eho intervalu. Souˇca´st´ı v´ ystupu je tak´e tabulka hodnot ve vˇsech ˇcasov´ ych intervalech ve zvolen´em obdob´ı. Uk´azky graf˚ u zobrazuj´ı obr´azky 3.6, 3.7 a 3.8.
26
Obr´azek 3.6: Graf provozu. Poˇcet pˇrijat´ych paket˚ u bˇehem pˇetiminutov´ ych interval˚ u dne 14.5.2008 (6:00-9:00).
Obr´azek 3.7: Souhrn´ y v´ ypis provozu. Data z´ısk´ana bˇehem provozu na Mal´e Stranˇe dne 14.5.2008 (6:00-9:00).
Obr´azek 3.8: Detailn´ı v´ ypis provozu. Data z´ısk´ana bˇehem provozu na Mal´e Stranˇe dne 14.5.2008 (6:00-9:00).
27
3.2.4
N´ apovˇ eda
Ve vˇsech pˇredchoz´ıch ˇc´astech webov´eho rozhran´ı obsahuj´ı d˚ uleˇzit´e ovl´adac´ı prvky popis sv´ ych funkc´ı, form´atu vstupu apod. N´apovˇeda se vyvol´a automaticky po najet´ı kurzoru na obr´azek ˇza´rovky u pˇr´ısluˇsn´eho prvku. Kromˇe v´ yˇse zm´ınˇen´e pomoci je souˇca´st´ı webov´eho rozhran´ı i samotn´a sekce obsahuj´ıc´ı n´apovˇedu. Ta popisuje a na konkr´etn´ıch pˇr´ıkladech ukazuje pouˇzit´ı webov´eho rozhran´ı.
28
Kapitola 4 Re´ aln´ e nasazen´ı Hlavn´ım u ´kolem re´aln´eho nasazen´ı programu bylo ovˇeˇren´ı provozuschopnosti aplikace, tedy dok´azat, ˇze aplikace je dostateˇcnˇe rychl´a pro velk´e datov´e toky. Jako krit´erium rychlosti zachyt´av´an´ı byla zvolena pr˚ umˇern´a procentu´aln´ı ztr´ata paket˚ u. Ta nesmˇela za den pˇrekroˇcit hodnotu 0,05%, za jeden ˇcasov´ y interval (obvykle 5 minut) pak 0,5%. Bˇehem testov´an´ı bylo, kromˇe r˚ uzn´ ych logick´ ych chyb v programu, objeveno nˇekolik v´ ykon negativnˇe ovlivˇ nuj´ıc´ıch m´ıst v aplikaci. Ta byla n´aslednˇe pˇrepracov´ana, o ˇcemˇz v´ıce pojedn´av´a ˇca´st 4.1. Dalˇs´ım d˚ uleˇzit´ ym d˚ uvodem pro nasazen´ı v praxi bylo zjiˇstˇen´ı vlivu r˚ uzn´ ych nastaven´ı na poˇcet z´aznam˚ u a fyzickou velikost datab´aze. Pomineme-li nutnost tato data skladovat1 , je jej´ı velikost d˚ uleˇzit´a hlavnˇe z hlediska rychlosti uˇzivatelsk´ ych dotaz˚ u pˇri vykreslov´an´ı dat.
4.1
Zvyˇ sov´ an´ı v´ ykonu, proveden´ e optimalizace
Hlavn´ım u ´kolem testovac´ıho provozu bylo nal´ezt a opravit u ´zk´a hrdla v programu. To znamenalo zmˇeˇrit ˇcasovou n´aroˇcnost r˚ uzn´ ych m´ıst v k´odu a nejpomalejˇs´ı z nich dle moˇznost´ı optimalizovat.
4.1.1
´ Uvod
Pro hled´an´ı nejpomalejˇs´ıch m´ıst v programu bylo nutno zmˇeˇrit dobu prov´adˇen´ı pouˇz´ıvan´ ych knihovn´ıch funkc´ı. Mnohem d˚ uleˇzitˇejˇs´ı neˇz abso2 lutn´ı doba prov´adˇen´ı je pomˇer rychlost´ı jednotliv´ ych pˇr´ıkaz˚ u. Tato doba 1 2
coˇz pˇri dneˇsn´ı cenˇe a kapacitˇe pevn´ ych disk˚ u nen´ı takov´ y probl´em kter´ a je z´ avisl´ a na konk´etn´ım hardwaru, optimalizac´ıch pˇrekladaˇce atd.
29
vˇcetnˇe pomˇer˚ u rychlost´ı je uvedena v tabulce 4.1.
Tabulka 4.1: Doba prov´adˇen´ı jednotliv´ ych funkc´ı pouˇzit´ ych v programu ˇ v ns Pomˇer k nejrychlejˇs´ı funkci Funkce Cas strcpy 10,4 1,0 strncpy 339,9 32,6 strcat 32,3 3,1 strncat 46,9 4,5 sprintf 277,2 26,6 snprintf 311,5 29,9 sprintf2 578,7 55,5 time 1455,2 139,5 localtime 741,6 71,1 strftime 728,7 69,9 memcpy 32,6 3,1 lock & unlock mutex 311,0 29,8 ˇ Bitov´e operace Cas v ns Pomˇer k nejrychlejˇs´ı funkci << 0,01 0,005 & 0,01 0,005 ˇ Funkce hashtabulky Cas v ns Pomˇer k nejrychlejˇs´ı funkci lookup 70,3 6,7 insert 154,3 14,8 ˇ v ns Pomˇer k nejrychlejˇs´ı funkci Funkce v programu Cas vytvoˇren´ı kl´ıˇce(1) 1353,1 129,7 vytvoˇreni kl´ıce(2) 64,3 6,2 existuj´ıc´ı z´aznam celkovˇe 211,6 20,3 nov´ y z´aznam celkovˇe 3387,0 324,7 Vol´an´ı strcpy a strncpy kop´ırovalo 10 znak˚ u, sprintf funkce obsahovaly jeden argument typu int, sprintf2 pak 2 tyto argumenty. Funkce memcpy kop´ırovala 100 byt˚ u dat. Z t´eto tabulky vypl´ yv´a nˇekolik z´avˇer˚ u a to zejm´ena: • Je v´ yhodnˇejˇs´ı pouˇz´ıt funkce nekontroluj´ıc´ı d´elku vstupu. • Vol´an´ı funkc´ı sprintf, localtime, strftime a time je velmi drah´e, je nutno je omezit. • Bitov´e operace jsou opravdu velmi rychl´e, je vhodn´e je pouˇz´ıt vˇsude tam, kde je to moˇzn´e.
30
K co nejrychlejˇs´ımu zachyt´av´an´ı je nutno se ˇr´ıdit n´asleduj´ıc´ımi pravidly: 1. Zachyt´avat co nejm´enˇe paket˚ u 2. Zachyt´avat jen nutnou ˇca´st paketu 3. S kaˇzd´ ym paketem dˇelat minimum pr´ace Prvn´ı zm´ınˇen´ y bod v praxi znamen´a definov´an´ı libpcap filtr˚ u. Ty jsou mnohem rychlejˇs´ı neˇz filtrov´an´ı v samotn´e aplikaci - dan´e pakety se do aplikace v˚ ubec nedostanou. Pro tuto pr´aci to znamenalo omezen´ı paket˚ u jen na IP protokol verze 4 a na protokoly ICMP, UDP a TCP. TCP paket nav´ıc nesmˇel m´ıt nulovou d´elku - v takov´em pˇr´ıpadˇe pro naˇse mˇeˇren´ı nem´a v´ yznam3 . Vzhledem k variabiln´ı d´elce TCP a IP paketu byly nulov´e pakety filtrov´any aˇz v aplikaci. Implicitn´ı filtr aplikace byl tedy: ip proto \tcp or ip proto \udp or ip proto \icmp. V praxi se uk´azalo, ˇze pro tento monitoring nezaj´ımav´e pakety tvoˇrily 16-35 % vˇsech paket˚ u (´ udaj z´ıskan´ y z provozu na Mal´e Stranˇe ve dnech 12.5 - 21.5 2008). Zachyt´avat jen nutnou ˇca´st paket˚ u znamen´a zachyt´avat takovou ˇca´st hlaviˇcky, ze kter´e jiˇz lze spoˇc´ıtat velikost pˇren´aˇsen´ ych dat. V praxi to je ve vˇsech pˇr´ıpadech nastaven´ı 51 byt˚ u - 16 byt˚ u pro ethernetov´ y r´amec, 4 aˇz 32 byt˚ u pro IP hlaviˇcku a prvn´ıch 13 byt˚ u z TCP hlaviˇcky. Tuto ˇc´ast je nutn´e zachyt´avat i v pˇr´ıpadˇe nerozliˇsov´an´ı port˚ u, d´elka TCP hlaviˇcky je promˇenn´a a je tˇreba zjistit offset vlastn´ıch dat. Nestaˇc´ı tedy velikost dat poˇc´ıtat z velikosti datagramu, kter´a je uvedena v IP hlaviˇcce. Z´aroveˇ n tˇechto 13 byt˚ u staˇc´ı na zjiˇstˇen´ı velikosti UDP ˇci ICMP paket˚ u. Tˇret´ı bod je z hlediska optimalizac´ı nejzaj´ımavˇejˇs´ı. Je tˇreba si uvˇedomit, jak´e opravdu nezbytn´e procesy je tˇreba pˇri zachycen´ı jednoho paketu prov´est v zachyt´avac´ım vl´aknu. Jsou to: 1. Naˇc´ıst informace o paketu z hlaviˇcek (typ protokolu, IP adresy, porty) do vlastn´ı struktury. D˚ uleˇzitou ˇc´ast´ı je zjiˇstˇen´ı ˇcasov´eho intervalu, ve kter´em paket pˇriˇsel. 2. Zjistit, jestli podobn´y paket jiˇz nen´ı uloˇzen v hashtabulce. K tomu je nutn´e vytvoˇrit kl´ıˇc na z´akladˇe informac´ı z hlaviˇcky paketu a prov´est hled´an´ı v datab´azi. Mohou nastat dvˇe moˇznosti: 3
Tato aplikace je urˇcena pˇredevˇs´ım pro mˇeˇren´ı v´ ykonov´ ych charakteristik s´ıtˇe. Pro bezpeˇcnostn´ı aplikace jsou tyto pakety podstatn´e. Jedn´a se hlavnˇe o navazov´an´ı a ukonˇcov´ an´ı spojen´ı, potvrzov´ an´ı dat apod. 4 Standardn´ı velikost IP hlaviˇcky je 20 byt˚ u, v pˇr´ıpadˇe pouˇzit´ı tzv. option˚ u vˇsak aˇz 32 byt˚ u
31
(a) podobn´y paket jiˇz v hashtabulce je, staˇc´ı zvˇetˇsit informace o velikosti pˇren´aˇsen´ ych dat a zmˇenit celkov´ y poˇcet takov´ ychto paket˚ u. (b) podobn´y paket jeˇstˇe v hashtabulce nen´ı. V tomto pˇr´ıpadˇe je nutn´e naalokovat potˇrebnou velikost pamˇeti pro datovou strukturu pouˇzitou v hashovac´ı tabulce, data do n´ı zkop´ırovat a z´aznam do tabulky vloˇzit. Tˇemto proces˚ um se vˇenuj´ı n´asleduj´ıc´ı sekce.
4.1.2
Naˇ c´ıt´ an´ı informac´ı o paketu z hlaviˇ cek
Na samotn´em analyzov´an´ı paketu nen´ı pˇr´ıliˇs prostoru pro optimalizace. D˚ uleˇzit´e je neuchov´avat IP adresy pomoc´ı ˇretˇezc˚ u, jak by se nab´ızelo, ale pouˇz´ıt k tomu datov´ y typ int. Nejen, ˇze tak zaberou obˇe IP adresy v datab´azi 3x m´enˇe m´ısta, ale vyhneme se tak pouˇzit´ı velmi drah´eho vol´an´ı funkce sprintf. Zaj´ımavˇejˇs´ım probl´emem je z´ısk´av´an´ı ˇcasov´eho intervalu zachycen´eho paketu. Ten je nezbytnˇe nutn´e zjistit pro kaˇzd´ y paket. Je zˇrejm´e, ˇze pˇr´ımoˇcar´e ˇreˇsen´ı spoˇc´ıvaj´ıc´ı ve vol´an´ı funkc´ı time, localtime a strftime pro kaˇzd´ y paket je nejen velmi drah´e, ale i zbyteˇcn´e. V aplikaci proto bˇeˇz´ı vlastn´ı vl´akno, kter´e prov´ad´ı glob´aln´ı zmˇenu ˇcasov´eho intervalu a aktu´aln´ıho dne (k zjiˇstˇen´ı jm´ena tabulky, do kter´e se paket bude ukl´adat), pro kaˇzd´ y paket se pak jen tento glob´aln´ı parametr naˇcte. Je vˇsak nutn´e zajistit atomicitu t´eto operace, nen´ı moˇzn´e, aby se nastavil jin´ y ˇcasov´ y interval pr´avˇe v moment, kdy ho druh´e vl´akno ˇcte. Vzhledem ke snaze vyhnout se drah´emu uzamyk´an´ı vl´aken, kter´e by bylo nutno prov´est pro kaˇzd´ y pˇr´ıchoz´ı paket, bylo zvoleno pouˇz´ıt´ı jedin´e atomick´e promˇenn´e typu int. Ot´azkou vˇsak z˚ ust´av´a form´at ˇc´ısla, kter´ y se do pˇr´ısluˇsn´e hodnoty bude ukl´adat. Pˇri pouˇz´ıt´ı form´atu, kter´ y vrac´ı vol´an´ı funkce time5 , je st´ale nutn´e volat funkce localtime a pˇr´ıpadnˇe strftime, kter´e umoˇzn´ı zjistit aktu´aln´ı ˇcas. Tyto operace jsou vˇsak relativnˇe pomal´e, a proto byl nasazen vlastn´ı form´at tohoto atomick´eho ˇc´ısla vyuˇz´ıvaj´ıc´ı bitov´e posuny (viz pˇr´ıloha B). Pouˇzit´ım tohoto form´atu se zjiˇst’ov´an´ı ˇcasu zrychlilo po ˇradˇe 5609, 2711 a 1298 kr´at ( v porovn´an´ı s p˚ uvodn´ım ˇreˇsen´ım, s pouˇzit´ım ˇcasovaˇce a strftime, s pouˇzit´ım ˇcasovaˇce bez strftime). 5
poˇcet sekund od 1.1. 1970 00:00
32
4.1.3
Vytvoˇ ren´ı kl´ıˇ ce pro dotazov´ an´ı do hashtabulky
Operace vytv´aˇren´ı kl´ıˇce je nutn´a pro kaˇzd´ y paket zachycen´ y aplikac´ı, proto je d˚ uleˇzit´e, aby byla co nejrychlejˇs´ı. Kl´ıˇc se vytv´aˇr´ı z c´ılov´e IP adresy, protokolu, ˇcasov´eho intervalu a volitelnˇe tak´e z port˚ u a MAC adres. Vzhledem k poˇctu kl´ıˇcov´ ych informac´ı nen´ı moˇzn´e pouˇz´ıt jako kl´ıˇc ˇc´ıslo, ale ˇretˇezec. P˚ uvodn´ı ˇreˇsen´ı spoˇc´ıvalo ve vyps´an´ı kl´ıˇcov´ ych parametr˚ u do ˇretˇezce vol´an´ım funkc´ı sprintf, pˇr´ıpadnˇe strcpy u protokolu. Uk´azalo se vˇsak, ˇze takov´eto vytv´aˇren´ı kl´ıˇce je pˇr´ıliˇs pomal´e. Proto byl vymyˇslen vlastn´ı form´at kl´ıˇce vyuˇz´ıvaj´ıc´ı bitov´e operace. Nen´ı totiˇz d˚ uleˇzit´e, v jak´em form´atu kl´ıˇc bude (nemus´ı tedy obsahovat vypsanou IP adresu v textov´em form´atu), d˚ uleˇzit´e je, aby byl pro unik´atn´ı kl´ıˇcov´e hodnoty tak´e unik´atn´ı. Nesm´ı se tedy st´at, ˇze pro dva r˚ uzn´e pakety dostaneme stejn´ y kl´ıˇc. Idea spoˇc´ıv´a v tiˇstˇen´ı jednotliv´ ych byt˚ u ˇctyˇr (IP adresy) ˇci dvou (porty) bytov´ ych ˇc´ısel do ˇretˇezce. Je tˇreba si d´avat pozor na pˇr´ıpadn´e nulov´e hodnoty (znamenalo by to ukonˇcen´ı ˇretˇezce), ty jsou nahrazeny jedniˇckami a pˇr´ıpadn´e pozice nul jsou bitovˇe zaznamen´any do pomocn´ ych ˇc´ısel, kter´e jsou pak vyps´any na konci ˇretˇezce. Dostaneme tedy tak´e jednoznaˇcn´e pˇriˇrazen´ı, nav´ıc vˇsak daleko rychlejˇs´ı. Nov´e vytvoˇren´ı kl´ıˇce je dle mˇeˇren´ı cca 25 kr´at rychlejˇs´ı. Aˇc se m˚ uˇze zd´at, ˇze vytv´aˇren´ı kl´ıˇce nen´ı pˇr´ıliˇs d˚ uleˇzit´e, opak je pravdou. Pˇri zat´ıˇzen´ı 150 tis´ıc paket˚ u za sekundu, pˇredstavovalo samotn´e vytv´aˇren´ı kl´ıˇce p˚ uvodn´ım zp˚ usobem 28% z´atˇeˇze CPU (procesor pentium P4 3.0GHz).
4.1.4
Vyhled´ an´ı z´ aznamu dle kl´ıˇ ce, existuj´ıc´ı z´ aznam
Tato ˇc´ast je z hlediska optimalizace nezaj´ımav´a. Prob´ıh´a zde vol´an´ı pˇr´ısluˇsn´e funkce hashtabulky, na kterou m´a vliv pouze velikost a naplnˇen´ı tabulky. Velikost je vˇsak zvolena s dostateˇcnou rezervou jiˇz bˇehem instalace, nemˇelo by tak doch´azet ke koliz´ım ˇci zmˇenˇe velikosti tabulky. Nav´ıc je dle mˇeˇren´ı hled´an´ı v tabulce rychl´e, v´ıce neˇz 3x rychlejˇs´ı neˇz volan´ı funkce sprintf, viz 4.1. V pˇr´ıpadˇe jiˇz existuj´ıc´ıho z´aznamu v tabulce je nutn´e jeˇstˇe upravit pˇr´ısluˇsnou velikost pˇrenesen´ ych dat a poˇcet paket˚ u. Celkov´a doba potˇrebn´a pro existuj´ıc´ı z´aznam se dle mˇeˇren´ı pohybovala okolo 200ns, ˇc´ımˇz byla v´ıce neˇz 15x rychlejˇs´ı neˇz vkl´ad´an´ı nov´eho z´aznamu do hashovac´ı tabulky.
4.1.5
Vloˇ zen´ı nov´ eho z´ aznamu
Vkl´ad´an´ı nov´eho z´aznamu do tabulky je n´aroˇcnˇejˇs´ı operac´ı. Je tˇreba vytvoˇrit kl´ıˇc, prohledat tabulku, naalokovat pamˇet’ pro pˇr´ısluˇsn´e da33
tov´e struktury, zkop´ırovat do nich obsah a pot´e prov´est samotn´e vloˇzen´ı z´aznamu. Vzhledem k relativn´ı pomalosti t´eto operace jsou ˇza´douc´ı vysok´e procentu´aln´ı hodnoty cache-hitu. Vliv nastaven´ı na tuto hodnotu se v´ıce zab´ yv´a sekce 4.3.
4.2
Vliv nastaven´ı na velikost datab´ aze
C´ılem bylo zjistit vliv nastaven´ı ˇcasov´eho intervalu na celkovou velikost datab´aze, respektive na poˇcet z´aznam˚ u v n´ı. Mˇeˇren´ı prob´ıhalo v ˇcase 01:00 - 02:00 na kolej´ıch UK v Troji, nebylo zapnuto rozliˇsov´an´ı port˚ u, ani MAC adres. Bˇehem t´eto hodiny bylo pˇreneseno cca 20GB dat. Spuˇstˇeno bylo nˇekolik zachyt´av´an´ı najednou, s r˚ uzn´ ymi nastaven´ımi ˇcasov´ ych interval˚ u, a to: 1s, 15s, 1min, 2min, 5min, 12min, 20min, 60min.
Obr´azek 4.1: Vliv nastaven´ı ˇcasov´ eho intervalu na velikost datab´ aze. Jak lze vidˇet z grafu 4.1, velikost datab´aze prudce kles´a cca do pˇetiminutov´eho ˇcasov´eho intervalu, pot´e je jiˇz vliv nastaven´ı daleko menˇs´ı. Je zˇrejm´e, ˇze bude vˇzdy nutno zvolit kompromis mezi velikost´ı datab´aze a pˇresnost´ı zachycen´ ych dat, rozumnou volbou se vˇsak jev´ı pr´avˇe pˇetiminutov´ y interval.
34
4.3
Vliv nastaven´ı na hodnotu cache hitu
C´ılem tohoto mˇeˇren´ı bylo zjistit vliv nastaven´ı ˇcasov´eho intervalu na hodnotu cache-hitu, tedy i poˇctu nutn´ ych dotaz˚ u do datab´aze. Mˇeˇren´ı prob´ıhalo za stejn´ ych podm´ınek a nastaven´ı jako v 4.2, sleep interval byl nastaven na 240 sekund. Test uk´azal (viz graf 4.2), ˇze vˇetˇs´ı ˇcasov´ y interval neˇz 5 minut na hodnotu cache-hitu jiˇz prakticky nem´a v´ yznam. Na druhou stranu pˇri menˇs´ım neˇz minutov´em intervalu hodnota cache-hitu znaˇcnˇe kles´a.
Obr´azek 4.2: Vliv nastaven´ı ˇcasov´ eho intervalu na cache-hit. Dalˇs´ım proveden´ ym mˇeˇren´ım bylo zjiˇst’ov´an´ı vlivu sleep intervalu na cache-hit pˇri pevn´em ˇcasov´em intervalu. Ten byl nastaven na pˇet minut. Spuˇstˇeno bylo nˇekolik zachyt´av´an´ı najednou, s r˚ uzn´ ymi nastaven´ımi sleep interval˚ u, a to: 1s, 15s, 1min, 2min, 5min, 12min, 20min, 60min. Mˇeˇren´ı prob´ıhalo bˇehem hodiny provozu na kolej´ıch UK v Troji. Tento test uk´azal, ˇze i sleep interval m´a d˚ uleˇzit´ y vliv na u ´spˇeˇsnost cache. Jak lze vidˇet na grafu 4.3, delˇs´ı sleep interval neˇz pˇet minut m´a na hodnotu cache-hitu jiˇz pouze minim´aln´ı v´ yznam. Naopak kratˇs´ı sleep interval neˇz jedna, respektive dvˇe minuty, znamen´a prudk´e zv´ yˇsen´ı poˇctu dotaz˚ u do datab´aze. Pro lepˇs´ı pˇredstavu: s 15s sleep intervalem bylo potˇreba 1,9 milion˚ u dotaz˚ u za hodinu, s pˇetiminutov´ ym intervalem 921 tis´ıc, s dvacetiminutov´ ym pak 851 tis´ıc. Pokud tedy nevad´ı jist´e zpoˇzdˇen´ı 35
Obr´azek 4.3: Vliv nastaven´ı sleep intervalu na cache-hit.
v zobrazov´an´ı dat, je vhodn´e tento interval nastavit alespoˇ n na hodnotu okolo pˇeti minut.
4.4
Mal´ a Strana
Tento testovac´ı provoz aplikace prob´ıhal v budovˇe Matematicko-fyzik´aln´ı fakulty UK na Mal´e Stranˇe. Monitorov´an byl provoz vˇsech poˇc´ıtaˇcov´ ych laboratoˇr´ı a uˇceben, PC v kancel´aˇr´ıch a server˚ u. Celkovˇe se jednolo o 1800 stroj˚ u, je tˇreba si vˇsak uvˇedomit, ˇze z tohoto poˇctu bylo cca 670 server˚ u a ˇrada z registrovan´ ych poˇc´ıtaˇc˚ u nebyla bˇehem provozu pouˇz´ıv´ana. Testov´an´ı prob´ıhalo na stroji s procesorem Intel Pentium4 3.0GHz, 1GB RAM se s´ıt’ovou kartou Intel PRO 1000 napojenou na 33MHz 32 bitovou sbˇernici PCI. Rychlost t´eto sbˇernice je pro gigabitov´e s´ıtˇe limituj´ıc´ı, celkov´a teoretick´a propustnost je 800 Mbit, ta je vˇsak sd´ılen´a se vˇsemi PCI zaˇr´ızen´ımi. Praktick´a propustnost se proto pohybuje okolo 400-500 Mbit. Na serveru bylo nainstalov´an operaˇcn´ı syst´em Gentoo Linux s j´adrem 2.6.23. Karta vyuˇz´ıvala NAPI rozhran´ı a z´aroveˇ n bylo provedeno nˇekolik na6 staven´ı j´adra syst´emu ovlivˇ nuj´ıc´ı bufferov´an´ı paket˚ u: 6
v´ıce kapitola 5
36
• net.core.rmem max = 16777216 • net.core.rmem default = 16777216 • net.core.netdev max backlog = 10000 Bˇehem tohoto testovac´ıho provozu bylo provedeno mnoho optimalizac´ı samotn´eho programu, kter´e umoˇznily v´ yraznˇe sn´ıˇzit poˇcet zahazovan´ ych paket˚ u. Dokonal´eho provozu vˇsak pˇresto nebylo dosaˇzeno - st´ale doch´azelo k zahazov´an´ı paket˚ u. Procento zahozen´ ych paket˚ u se jiˇz vˇsak t´emˇeˇr dostalo do stanoven´ ych hranic. Pr˚ umˇern´e procento zahozen´ ych paket˚ u bˇehem provozu ve dnech 15.5. az 20.5. 2008 ˇcinilo 0,006 procent, pˇriˇcemˇz k pˇrekroˇcen´ı hranice zahazov´an´ı (0,5%) pro ˇcasov´ y interval (nastaveno 5 minut) doˇslo jen dvakr´at a to 1,50% a 0,87% paket˚ u bˇehem intervalu. Nejpravdˇepodobnˇejˇs´ım d˚ uvodem k zahazov´an´ı paket˚ u byla jiˇz zm´ınˇen´a pomal´a sbˇernice, protoˇze k nˇemu doch´azelo pˇri pr˚ umˇern´e z´atˇeˇzi nad 200 Mbit bˇehem pˇetiminutov´eho intervalu.
Obr´azek 4.4: Pr˚ umˇ ern´ y hodinov´ y provoz na Mal´ e Stranˇ e ve dnech 15.5. - 20.5.2008 v Mbit
Namˇ eˇ ren´ a data ve dnech 15.5. - 20.5. 2008 Mˇeˇren´ı prob´ıhalo s nastaven´ ym pˇetiminutov´ ym ˇcasov´ ym intervalem, sleep interval byl nastaven na 240s. Nebyly rozliˇsov´any porty, ani MAC adresy. Vˇsechny u ´daje v tabulce 4.2 jsou vztaˇzeny k ˇcasov´emu intervalu. 37
Tabulka 4.2: Namˇeˇren´a data bˇehem provozu na Mal´e Stranˇe 15.5. - 20.5. 2008 Provoz Pr˚ umˇern´ y tok 52.35 Mbit Maxim´aln´ı tok 288,15 Mbit Celkem dat 3 292.92 GB Pr˚ umˇern´ y poˇcet paket˚ u 9 556 387 Pr˚ umˇern´ y cache hit 98.6% Dat´abaze Celkov´ y poˇcet z´aznam˚ u 16 179 179 Pr˚ umˇern´ y poˇcet dotaz˚ u 10 949.5 Celkov´a velikost datab´aze 650.5 MB
4.5
Troja
Provoz aplikace prob´ıhal v budovˇe kolej´ı Univerzity Karlovy v Troji. Monitorov´an byl provoz vˇsech poˇc´ıtaˇc˚ u obou budov kolej´ı (cca 1400 stroj˚ u). Aˇckoliv je tento poˇcet menˇs´ı neˇz poˇcet PC pˇri testov´an´ı na Mal´e Stranˇe, bylo zat´ıˇzen´ı pˇredevˇs´ım ve veˇcern´ıch hodin´ach vˇetˇs´ı. Testov´an´ı prob´ıhalo na stroji se ˇctyˇrj´adrov´ ym Intel Core2 Quad Q6600 2.40GHz, 2GB RAM a s´ıt’ovou kartou Intel PRO 1000 napojenou na sbˇernici PCI-Express s teoretickou propustnostn´ı 2,5 Gbit. Rychlost sbˇernice jiˇz tedy nebyla omezuj´ıc´ım faktorem. Testov´an´ı prob´ıhalo na operaˇcn´ım syst´emu FreeBSD v8.3. D´ale bylo v syst´emu provedeno nˇekolik nastaven´ı: • • • •
Testovac´ı provoz prob´ıhal ve dnech 19.5. - 25.5, vzhledem k probl´em˚ um se stabilitou stroje vˇsak jedin´ ym delˇs´ım souvisl´ ym obdob´ım, kdy prob´ıhalo zachyt´av´an´ı, bylo 19.5.-20.5.2008. Toto obdob´ı je proto uvedeno v grafu 4.5 a tabulce 4.3. Bˇehem cel´eho testovac´ıho provozu nedoˇslo (dle aplikace) k zahazov´an´ı paket˚ u, celkov´a z´atˇeˇz stroje aplikac´ı byla do 2% CPU. Mˇeˇren´ı prob´ıhalo s nastaven´ ym pˇetiminutov´ ym ˇcasov´ ym intervalem, sleep interval byl nastaven na 240s. Nebyly rozliˇsov´any porty, ani MAC adresy. Vˇsechny u ´daje v tabulce 4.3 jsou vztaˇzeny k ˇcasov´emu intervalu. 38
Tabulka 4.3: Namˇeˇren´a data bˇehem provozu v Troji 19.5. - 20.5.2008 Provoz Pr˚ umˇern´ y tok 81.13 Mbit Maxim´aln´ı tok 388.99 Mbit Celkem dat 1 720.35 GB Pr˚ umˇern´ y poˇcet paket˚ u 4 944 070.31 Pr˚ umˇern´ y cache hit 97.2% Dat´abaze Celkov´ y poˇcet z´aznam˚ u 30 307 642 Pr˚ umˇern´ y poˇcet dotaz˚ u 60 951.46 Celkov´a velikost datab´aze 1218.54 MB
Obr´azek 4.5: Pr˚ umˇ ern´ y pˇ etiminutov´ y provoz na kolej´ıch UK v Troji ve dnech 19.5. - 20.5.2008 v Mbit
Jak lze vidˇet z tabulky 4.3 tento provoz generoval daleko vˇetˇs´ı poˇcet z´aznam˚ u neˇz provoz na Mal´e Stranˇe. Jednak zde byl vˇetˇs´ı pr˚ umˇern´ y provoz, ale hlavnˇe to plyne z rozd´ıln´eho charakteru pouˇz´ıv´an´ı obou s´ıt´ı. V Troji tvoˇrili provoz ubytovan´ı studenti, kdeˇzto na Mal´e Stranˇe byla vˇetˇsina provozu vytv´aˇrena tamn´ımi servery. Tomu odpov´ıd´a i poˇcet unik´atn´ıch IP adres bˇehem jednoho dne provozu. Na Mal´e Stranˇe byl tento poˇcet okolo 300 tis´ıc, kdeˇzto v Troji to bylo pˇres 2,5 milionu.
39
Kapitola 5 Moˇ znosti rozˇ s´ıˇ ren´ı aplikace, ladˇ en´ı syst´ emu Tato kapitola shrnuje z´akladn´ı smˇery, kter´ ymi by se v budoucnu mohl v´ yvoj aplikace NAMon ub´ırat. C´ılem dalˇs´ıho v´ yvoje by mˇelo b´ yt jeˇstˇe efektivnˇejˇs´ı zachyt´av´an´ı, tud´ıˇz moˇznost zvl´adat vˇetˇs´ı datov´e toky. Toho lze dos´ahnout nˇekolika zp˚ usoby.
5.1
Nastaven´ı kernelu
Ku ´spˇeˇsn´emu zachyt´av´an´ı datov´ ych tok˚ u okolo 1 Gbit jiˇz nestaˇc´ı jen aplikace, kter´a je dostateˇcnˇe rychl´a. Kernel Unixov´ ych operaˇcn´ıch syst´em˚ u totiˇz nen´ı standardnˇe nastaven pro tento typ pr´ace. Je nutn´e dostateˇcnˇe zv´ yˇsit velikost zachyt´avac´ıch buffer˚ u a zapnout tzv. device polling.
5.1.1
Vstupn´ı buffery
Konkr´etn´ı nastaven´ı parametr˚ u se liˇs´ı v z´avislosti na pouˇzit´em operaˇcn´ım syst´emu. Operaˇcn´ı syst´em FreeBSD pouˇz´ıv´a k zachyt´av´an´ı paket˚ u zaˇr´ızen´ı 1 ´ BPF . Ukolem tohoto zaˇr´ızen´ı je spuˇstˇen´ı filtru pro kaˇzd´ y paket a jeho uloˇzen´ı v bufferu. Velikost t´eto vyrovn´avac´ı pamˇeti lze nastavit pomoc´ı utility sysctl a parametr˚ u: • net.bpf.bufsize • net.bpf.maxbufsize 1
Berkeley Packet Filter, v´ıce [20]
40
Dle [19] je rozumnou hodnotou pro velikost bufferu 20 MB. Vzhledem k tomu, ˇze linuxov´e syst´emy nemaj´ı k zachyt´av´an´ı vlastn´ı buffer, ale frontu ukazatel˚ u na jednotliv´e pakety, je nutn´e zv´ yˇsit velikost vyrovn´avac´ı pamˇeti pro vˇsechny pˇr´ıchoz´ı pakety a z´aroveˇ n zvˇetˇsit d´elku fronty. To se provede pomoc´ı souborov´eho syst´emu /proc, ˇci zmˇenou sysctl.conf. Jedn´a se o parametry: • net.core.rmem default • net.core.rmem max • net.core.netdev, max backlog kde rmem\_* je velikost buffer˚ u pro pakety a netdev max backlog je maxim´aln´ı d´elka v´ yˇse zm´ınˇen´e fronty. Stejnˇe jako u syst´emu FreeBSD je doporuˇcovan´a hodnota pro buffery 20 MB, pro d´elku fronty pak 10000.
5.1.2
Device polling
V norm´aln´ım reˇzimu vyvol´av´a s´ıt’ov´a karta pˇreruˇsen´ı, kdykoliv si vyˇzaduje pozornost. To v z´avislosti na velikosti buffer˚ u na s´ıt’ov´e kartˇe a nastaven´ı ovladaˇc˚ u m˚ uˇze nastat pro kaˇzd´ y pˇr´ıchoz´ı paket zvl´aˇst’ nebo pro nˇekolik paket˚ u z´aroveˇ n. Pˇri kaˇzd´em pˇreruˇsen´ı pak dojde ke zmˇenˇe kontextu procesoru a k obsluze tohoto pˇreruˇsen´ı. Z toho vypl´ yv´a, ˇze tato operace je procesorovˇe velmi n´aroˇcn´a. Pˇri vysok´ ych datov´ ych toc´ıch pak karta generuje takov´e mnoˇzstv´ı pˇreruˇsen´ı, ˇze procesor obsluhuje jen je, pˇriˇcemˇz nezb´ yv´a v´ ykon pro samotnou aplikaci. Tzv. device polling je metoda, kter´a k problematice pˇristupuje opaˇcnˇe. Syst´em se s´am periodicky dotazuje dan´eho zaˇr´ızen´ı, jestli nechce obslouˇzit. T´ım doch´az´ı k redukci pˇrep´ınan´ı kontextu procesoru, ˇc´ımˇz se cel´a operace v´ yraznˇe zrychl´ı. Na syst´emu FreeBSD se polling zap´ın´a pomoc´ı utility sysctl s parametrem kern.polling.enable=1. D´ale lze nastavit cel´a ˇrada parametr˚ u, kter´e ovlivˇ nuj´ı polling, jako je frekvence, maxim´aln´ı mnoˇzstv´ı pˇridˇelen´ ych zdroj˚ u na dotazov´an´ı apod. Tato nastaven´ı jsou podrobnˇe pops´ana ve zdrojov´em k´odu kernelu, tj. v src/sys/kern/kern_poll.c. Na linuxov´ ych syst´emech existuje podobn´ y syst´em nazvan´ y NAPI2 , zn´am´ y tak´e pod jm´enem Rx polling. Nedoch´az´ı k u ´pln´emu vypnut´ı pˇre2
New API. Dle autor˚ u tak bylo pojmenov´ano z d˚ uvodu nedostatku lepˇs´ıch n´apad˚ u. Pro v´ıce informaci viz [21]
41
ruˇsen´ı, n´ ybrˇz k jej´ımu vyp´ın´an´ı a zap´ın´an´ı dle vyt´ıˇzen´ı syst´emu. Toto rozhran´ı mus´ı b´ yt podporovan´e s´ıt’ovou kartou, podporu je pak tˇreba zapnout pˇri kompilaci kernelu, respektive ovladaˇce s´ıt’ov´e karty. Dle [23] tak dojde k v´ yrazn´emu odlehˇcen´ı z´atˇeˇze procesoru.
5.2
Ovladaˇ ce s´ıt’ov´ e karty
Vzhledem k tomu, ˇze s´ıt’ov´a karta je navrˇzena pro klasick´ y s´ıt’ov´ y provoz, nejsou ovladaˇce karet (ani samotn´e karty) optimalizov´any pro pasivn´ı monitorov´an´ı. Bylo by tedy moˇzn´e upravit ovladaˇce karty tak, aby se minimalizovalo mnoˇzstv´ı pr´ace nutn´e k zpracov´an´ı paketu. Vzhledem k tomu, ˇze na dan´e pakety se nebude odpov´ıdat, nen´ı nutn´e nˇekter´e u ´kony s pakety prov´adˇet (pˇrerovn´av´an´ı paket˚ u apod.). D´ale je v z´avislosti na dan´em ovladaˇci karty moˇzno nastavovat velikost buffer˚ u pro pˇr´ıchoz´ı, respektive odchoz´ı pakety, maxim´aln´ı poˇcet generovan´ ych pˇreruˇsen´ı apod.
5.3
PF RING socket
PF RING je nov´ y druh socketu speci´alnˇe vytvoˇren´ y pro pasivn´ı zachyt´av´an´ı paket˚ u. Jeho autorem je Luca Deri, ˇclen sdruˇzen´ı ntop.org[23]. Princip spoˇc´ıv´a v pouˇzit´ı cyklick´eho bufferu pro pˇr´ıchoz´ı pakety v kernelu. Buffer je pˇri vytvoˇren´ı socketu naalokov´an, nedoch´az´ı tedy k alokaci/dealokaci pro kaˇzd´ y paket, pakety jsou zapisov´any pˇr´ımo do tohoto bufferu, ˇc´ımˇz se pˇrepisuj´ı jiˇz zpracovan´e pakety. Na tento buffer je pak pomoc´ı sd´ılen´e pamˇeti a vol´an´ı mmap() napojena vlastn´ı mˇeˇr´ıc´ı aplikace v uˇzivatelsk´em prostoru, nedoch´az´ı tedy k ˇza´dn´ ym drah´ ym syst´emov´ ym vol´an´ım, jak je tomu u klasick´ ych socket˚ u. Nedoch´az´ı ani ke kop´ırov´an´ı paket˚ u do vlastn´ıch struktur kernelu a pot´e k n´asledn´emu kop´ırov´an´ı do uˇzivatelsk´eho prostoru. O pˇrij´ım´an´ı paket˚ u se vˇsak st´ale star´a j´adro syst´emu pomoc´ı pˇreruˇsen´ı ˇci device pollingu. V´ yhodou pouˇzit´ı je nˇekolikan´asobn´e zrychlen´ı zachyt´av´an´ı. Vzhledem k tomu, ˇze existuje upraven´a verze knihovny libpcap podporuj´ıc´ı tyto sockety, daly by se pouˇz´ıt i v t´eto pr´aci. Znaˇcnou nev´ yhodou je nutnost modifikace kernelu.
42
5.4
nCap
nCap je stejnˇe jako PF RING d´ılem Luca Deriho. Jedn´a se o modifikaci ovladaˇc˚ u s´ıt’ov´e karty, j´adra syst´emu a pˇr´ısluˇsnou knihovnu v uˇzivatelsk´em prostoru. Podobnˇe jako PF RING je tak´e zaloˇzen na cyklick´em bufferu, s optimalizac´ı jde vˇsak jeˇstˇe d´ale. Pomoc´ı nˇekolika technik, u ´prav ’ j´adra a samotn´ ych ovladaˇc˚ u s´ıt ov´e karty (viz [24]) nedoch´az´ı po inicializaci k ˇza´dn´emu vol´an´ı kernelu. Pakety jsou tedy skrze cyklick´e buffery pˇred´av´any pˇr´ımo monitorovac´ı aplikaci, ˇc´ımˇz doch´az´ı k maxim´aln´ımu urychlen´ı zachyt´av´an´ı. Dle [24] je tak moˇzn´e s procesorem Intel PIII 500Mhz zachyt´avat beze ztr´aty pˇres 500 milion˚ u paket˚ u za vteˇrinu. Nev´ yhodou je velk´ y z´asah do syst´emu. Je nutn´a u ´prava kernelu, ovladaˇc˚ u s´ıt’ov´e karty (podporov´any jsou nav´ıc jen 1 a 10 Gbit karty Intel) a knihovny libpcap. I tak vˇsak lze nCap u ´spˇeˇsnˇe pouˇz´ıt s programem NAMon.
5.5
Dalˇ s´ı bufferov´ an´ı v aplikaci
Toto rozˇs´ıˇren´ı se t´ yk´a samotn´e aplikace. Na v´ıcej´adrov´ ych procesorech, ˇci syst´emech s v´ıce procesory je pˇri nynˇejˇs´ı architektuˇre programu vyt´ıˇzeno v podstatˇe jen jedno j´adro / procesor. Aplikace je sice v´ıcevl´aknov´a, avˇsak nejv´ıce pr´ace m´a st´ale zachyt´avac´ı vl´akno3 . Hlavn´ı myˇslenkou rozˇs´ıˇren´ı je vyuˇzit´ı cyklick´eho bufferu (podobnˇe jako nCap ˇci PF RING) pˇr´ımo v aplikaci, kter´ y by slouˇzil jako vyrovn´avac´ı pamˇet’ pˇred vkl´ad´an´ım do hashtabulky. Zachyt´avac´ı vl´akno, kter´e by mˇelo b´ yt co nejrychlejˇs´ı, aby st´ıhalo odeb´ırat pakety ze s´ıt’ov´e karty, tak bude m´ıt daleko m´enˇe pr´ace. Pˇri pˇrijet´ı paketu, kter´ y nen´ı podobn´y, by tento paket jen vloˇzilo do bufferu. Pˇr´ıpadn´e pomal´e vkl´ad´an´ı nov´eho z´aznamu do hashtabulky se tak pˇrenech´a jin´emu vl´aknu (vl´akn˚ um), kter´e budou pakety z cyklick´eho bufferu odeb´ırat.
5.6
Vylepˇ sen´ı webov´ eho rozhran´ı
I pˇres to, ˇze webov´e rozhran´ı umoˇzn ˇuje generov´an´ı a zobrazov´an´ı veˇsker´ ych zachycen´ ych informac´ı, je jistˇe moˇzn´e jeho funkˇcnost vylepˇsit. Je nutno pˇriznat, ˇze zobrazen´ı nˇekter´ ych dat je ponˇekud tˇeˇzkop´adn´e. Jist´ ym vzorem by mohlo b´ yt webov´e rozhran´ı programu nTop[22]. 3
Ukl´ adac´ı vl´ akno je v momentˇe vkl´ad´an´ı do datab´aze tak´e zat´ıˇzen´e, vˇetˇsinu ˇcasu je vˇsak usp´ ano.
43
Kapitola 6 Z´ avˇ er Monitoring s´ıtˇe je v dneˇsn´ı dobˇe st´ale aktu´alnˇejˇs´ı t´ema, at’ uˇz z d˚ uvodu dodrˇzov´an´ı z´akona, prevence probl´em˚ u v s´ıt´ı ˇci za u ´ˇcelem mˇeˇren´ı v´ ykonu. C´ılem t´eto pr´ace bylo navrhnout a implementovat program pro monitoring s´ıtˇe schopn´ y fungovat ve vysok´ ych datov´ ych toc´ıch. Jedn´ım z hlavn´ıch krit´eri´ı byla nasaditelnost t´eto aplikace na bˇeˇzn´em hardware a jej´ı praktick´a vyuˇzitelnost. Aplikace mˇela umoˇznit volbu m´ıry detailu zachycen´ ych informac´ı, od celkov´ ych statistik, pˇres toky jednotliv´ ych poˇc´ıtaˇc˚ u, aˇz po sledov´an´ı jednotliv´ ych aplikac´ı na b´azi port˚ u. Tato data pak mˇelo b´ yt umoˇznˇeno vizualizovat ve formˇe graf˚ u a tabulek, s moˇznost´ı nastaven´ı zobrazovan´eho ˇcasov´eho obdob´ı a definov´an´ı vlastn´ıch filtr˚ u na zobrazovan´a data. Vˇsechny tyto body se podaˇrilo naplnit. Vhodnost n´avrhu byla provˇeˇrena v praxi pˇri zkuˇsebn´ım provozu v budovˇe MFF UK na Mal´e Stranˇe a na kolej´ıch UK v Troji. Potvrdilo se, ˇze aplikace je dostateˇcnˇe rychl´a pro monitorov´an´ı gigabitov´ ych s´ıt´ı s v´ıce neˇz tis´ıci stanicemi. Jedin´ ym praktick´ ym probl´emem, kter´ y vˇsak vypl´ yv´a z obrovsk´eho poˇctu zachycen´ ych dat, se uk´azala b´ yt velikost datab´aze, kter´a ovlivˇ nuje rychlost uˇzivatelsk´ ych dotaz˚ u. Vzhledem k tomu, ˇze mnoˇzstv´ı tˇechto dat pˇri dan´em nastaven´ı nelze ovlivnit, jako jedin´e ˇreˇsen´ı se jev´ı nutnost pouˇz´ıt dostateˇcnˇe v´ ykonn´ y dedikovan´ y datab´azov´ y server.
44
Seznam obr´ azk˚ u 1.1
Architektura NetFlow
. . . . . . . . . . . . . . . . . . .
12
2.1 2.2
S´ıt’ov´ y model programu NAMon . . . . . . . . . . . . . . Architektura programu NAMon . . . . . . . . . . . . . .
Vliv nastaven´ı ˇcasov´eho intervalu na velikost datab´aze . Vliv nastaven´ı ˇcasov´eho intervalu na cache-hit . . . . . . Vliv nastaven´ı sleep intervalu na cache-hit . . . . . . . . Pr˚ umˇern´ y hodinov´ y provoz na Mal´e Stranˇe ve dnech 15.5. - 20.5.2008 v Mbit . . . . . . . . . . . . . . . . . . . . . Pr˚ umˇern´ y pˇetiminutov´ y provoz na kolej´ıch UK v Troji ve dnech 19.5. - 20.5.2008 v Mbit . . . . . . . . . . . . . . .
Pˇ r´ıloha A Uˇ zivatelsk´ a dokumentace Aplikace NAMon je urˇcena pro pasivn´ı sledov´an´ı s´ıtˇe a byla navrˇzena pro vysok´e datov´e toky. Je prim´arnˇe urˇcena pro spr´avce stˇrednˇe velk´ ych s´ıt´ı, lze s n´ı vˇsak monitorovat i samotn´ y stroj, na kter´em bˇeˇz´ı. Aplikace je navrˇzena s ohledem na v´ ykon, proto je vhodn´a i do gigabitov´ ych s´ıt´ı. Prostˇrednictv´ım webov´eho rozhran´ı umoˇzn ˇuje sledovat datov´e proudy v cel´e s´ıti, jednotliv´ ych stanic ˇci aplikac´ı na b´azi TCP a UDP port˚ u. Aplikace je rozdˇelena na dvˇe ˇc´asti, kter´e mohou (ale nemus´ı) b´ yt provozovan´e na stejn´e stanici. Prvn´ı ˇc´ast´ı je samotn´e zachyt´av´an´ı, tato ˇc´ast je urˇcena pro platformu UNIX. Druhou ˇca´st´ı je pak webov´e rozhran´ı, kter´e je platformˇe nez´avisl´e a m˚ uˇze b´ yt (a typicky taky bude) provozov´ano na jin´em neˇz monitorovac´ım serveru.
A.1
Zaˇ clenˇ en´ı aplikace do s´ıtˇ e
S´ıt’ov´ y model aplikace zobrazuje obr´azek A.1. Monitorovac´ı server je pˇripojen k switchi um´ıstˇen´emu v dan´e monitorovan´e s´ıti. Na switchi (lze pouˇz´ıt tak´e hub) je pot´e nastaven port mirroring. V z´avislosti na nastaven´ı switche lze monitorovat jen urˇcit´e segmenty s´ıtˇe. Tyto pakety jsou zpracov´any monitorovac´ım serverem, kter´ y sv´e z´aznamy ukl´ad´a na server, jeˇz slouˇz´ı jako u ´loˇziˇstˇe. Klientsk´e stanice se pak dotazuj´ı serveru s daty na jednotliv´e statistiky provozu. Storage server m˚ uˇze b´ yt provozov´an i na stejn´em stroji, kde prob´ıh´a monitorov´an´ı. T´ım se vˇsak zv´ yˇs´ı jeho zat´ıˇzen´ı. V pˇr´ıpadˇe pouˇzit´ı switche s port mirroringem je tˇreba m´ıt v monitorovac´ım serveru dvˇe s´ıt’ov´e karty, jednu pro zachyt´av´an´ı, druhou pro 50
Obr´azek A.1: Zaˇclenˇ en´ı aplikace NAMon do s´ıtˇ e
samotn´e kontroln´ı spojen´ı.
A.2 A.2.1
Poˇ zadavky Softwarov´ e poˇ zadavky
Ku ´spˇeˇsn´emu provozovan´ı aplikace je potˇreba: 1. Pˇr´ıstup k MySQL serveru s pr´avy zakl´adat tabulky v dan´e datab´azi 2. Pˇr´ıstup k webov´emu serveru podporuj´ıc´ımu technologii PHP 5.0 3. Dostateˇcn´a opr´avnˇen´ı v syst´emu k pˇrepnut´ı karty do promiskuitn´ıho reˇzimu a zachyt´av´an´ı paket˚ u Tˇret´ı bod se liˇs´ı syst´em v z´avislosti na syst´emu. Na syst´emu Linux je bez jin´ ych z´asah˚ u nutn´e m´ıt pr´ava superuˇzivatele(root), na FreeBSD pak staˇc´ı pr´ava ke ˇcten´ı zaˇr´ızen´ı /dev/bpfX. Ku ´spˇeˇsn´emu zkompilov´an´ı aplikace je pak tˇreba m´ıt v syst´emu n´asleduj´ıc´ı knihovny: 1. 2. 3. 4.
Hardwarov´e poˇzadavky na bˇeh aplikace se znaˇcnˇe liˇs´ı v z´avislosti na velikosti a rychlosti dan´e s´ıtˇe. Pro 1Gbit s´ıtˇe jsou poˇzadavky pro zachyt´avac´ı ˇca´st programu n´asleduj´ıc´ı: • Procesor - Intel P4 2.4GHz nebo kompatibiln´ı • Pamˇ et’ RAM - 512MB • S´ıt’ov´ a karta - Gigabitov´a karta, doporuˇcov´any jsou karty Intel, naopak se nedoporuˇcuje pouˇz´ıvat integrovan´e s´ıt’ov´e karty Pro datab´azov´ y server poˇzadavky vych´az´ı z publikovan´ ych HW poˇzadavk˚ u MySQL serveru. Pro vˇetˇs´ı gigabitov´e s´ıtˇe se ovˇsem doporuˇcuje co nejv´ ykonnˇejˇs´ı stroj, jeho rychlost z´asadnˇe ovlivˇ nuje rychlost uˇzivatelsk´ ych dotaz˚ u. Hardwarov´e poˇzadavky webov´e rozhran´ı se odv´ıjej´ı od pouˇzit´eho webov´eho serveru.
A.3
Instalace
Tato ˇca´st popisuje instalaci zachyt´avac´ı ˇca´sti aplikace a webov´eho rozhran´ı. Cel´ y programov´ y bal´ık je ˇs´ıˇren v komprimovan´e podobˇe v souboru namon.tar.gz. Tento soubor je tˇreba rozbalit pomoc´ı pˇr´ıkazu: tar xzvf namon.tar.gz [c´ ılov´ y adres´ ar ˇ] Pokud nen´ı uveden c´ılov´ y adres´aˇr, je soubor rozbalen do souˇcasn´eho adres´aˇre. Po rozbalen´ı vzniknou v c´ılov´e sloˇzce dva podadres´aˇre: namon-cap obsahuj´ıc´ı zachyt´avac´ı ˇc´ast projektu a namon-web obsahuj´ıc´ı webov´e rozhran´ı.
A.3.1
Instalace zachyt´ av´ ac´ı ˇ c´ asti
Monitorovac´ı ˇca´st programu NAMon se po rozbalen´ı nach´az´ı v adres´aˇri namon-cap. Pozor! Nˇ ekter´ a nastaven´ı programu je nutn´ e prov´ est pˇ red samotnou instalac´ı, respektive kompilac´ı programu! O nastaven´ı v´ıce pojedn´ av´ a sekce A.4.3. Instalace prob´ıh´a pro syst´em Unix standardn´ı cestou a to seri´ı pˇr´ıkaz˚ u (je nutn´e se nach´azet v adres´aˇri namon-cap): 52
1. ./configure 1 2. make 3. make install Pot´e je nutn´e jeˇstˇe prov´est inicializaci pomocn´ ych struktur v datab´azi. K tomu slouˇz´ı pr´avˇe nainstalovan´ y program namon-db-init. Je ho tedy tˇreba spustit: namon-db-init Bˇehem t´eto inicializace budete vyzv´ani k zad´an´ı pˇrihlaˇsovac´ıch u ´daj˚ u k datab´azi. Program vytvoˇr´ı pomocn´e struktury v datab´azi a zaloˇz´ı konfiguraˇcn´ı soubor .namonrc (form´at tohoto souboru je pops´an v sekci A.4.3) v domovsk´em adres´aˇri. Po dokonˇcen´ı inicializace je program u ´spˇeˇsnˇe nainstalov´an a pˇripraven ke spuˇstˇen´ı.
A.3.2
Instalace webov´ eho rozhran´ı
Webov´e rozhran´ı programu NAMon se po rozbalen´ı nach´az´ı ve sloˇzce namon-web. Tyto soubory staˇc´ı jen zkop´ırovat do adres´aˇre vaˇseho webov´eho serveru.
A.4
Hlavn´ı aplikace
A.4.1
Spuˇ stˇ en´ı aplikace
Hlavn´ı aplikace se spouˇst´ı pˇr´ıkazem namon [parametry] , kde nazev_zarizeni je n´azev pˇr´ısluˇsn´e s´ıt’ov´e karty (napˇr. eth0, lnc0). Aplikaci lze spustit i s v´ıce parametry, kter´e jsou detailnˇe popsan´e v sekci A.4.3. Pˇri spuˇstˇen´ı aplikace dojde k naˇcten´ı konfiguraˇcn´ıho souboru .namonrc v domovsk´em adres´aˇri, pˇr´ıpadnˇe dalˇs´ıho souboru, pokud je zvolen z pˇr´ıkazov´e ˇr´adky, aˇz pot´e jsou ˇcteny parametry na ˇr´adce. Stejn´e parametry jsou pˇrepisov´any, parametry na pˇr´ıkazov´e ˇra´dce tedy maj´ı nejvyˇsˇs´ı prioritu. Po spuˇstˇen´ı aplikace lze sledovat aktu´aln´ı provozn´ı data stisknut´ım kl´avesy Enter (viz obr´azek A.2). Tyto statistiky jsou vˇzdy vztaˇzeny k ˇcasov´emu
Obr´azek A.2: Uk´azka v´ ystupu programu po zm´aˇcknut´ı kl´avesy Enter. obdob´ı mezi dvˇema v´ ypisy, lze tedy tak sledovat aktu´aln´ı zat´ıˇzen´ı. Program d´ale na obrazovku tiskne chybov´e informace, pˇri zapnut´em lad´ıc´ım reˇzimu i r˚ uzn´e informace t´ ykaj´ıc´ı se provozu aplikace. Aplikace nepodporuje spuˇstˇen´ı na pozad´ı (jako d´emon), proto je nutn´e ji spouˇstˇet na jin´em termin´alu ˇci pomoc´ı aplikace screen. V opaˇcn´em pˇr´ıpadˇe dojde pˇri odhl´aˇsen´ı uˇzivatele k ukonˇcen´ı aplikace.
A.4.2
Ukonˇ cen´ı aplikace
Aplikace se ukonˇcuje stisknut´ım CTRL+C, neboli doruˇcen´ım sign´alu SIGINT procesu. Aplikace se pot´e jeˇstˇe pˇred sv´ ym ukonˇcen´ım pokus´ı zapsat informace ze sv´e cache do datab´aze. Toto vyprazdˇ nov´an´ı cache je vˇsak omezeno pˇetisekundov´ ym intervalem, aplikace se po t´eto dobˇe ukonˇc´ı i v pˇr´ıpadˇe, ˇze cache nen´ı zcela uvolnˇena.
A.4.3
Nastaven´ı aplikace
Program umoˇzn ˇuje dva zp˚ usoby nastavov´an´ı. Pro volbu v´ ykon z´asadnˇe ovlivˇ nuj´ıc´ıch atribut˚ u slouˇz´ı hlaviˇckov´ y soubor, kter´ y je tˇreba nastavit pˇred samotnou instalac´ı programu. Tato nastaven´ı tak´e ovlivˇ nuj´ı vzhled webov´e aplikace. Pokud je pˇr´ısluˇsn´a volba vypnut´a, nebude pˇr´ıstupn´a ani z webov´e aplikace. Ostatn´ı, v´ ykon m´enˇe ovlivˇ nuj´ıc´ı atributy, je moˇzn´e zad´avat pˇr´ımo z pˇr´ıkazov´e ˇra´dky bˇehem spuˇstˇen´ı ˇci pomoc´ı konfiguraˇcn´ıho souboru. Nastaven´ı pomoc´ı hlaviˇ ckov´ eho souboru Nastaven´ı prob´ıh´a pomoc´ı hlaviˇckov´eho souboru namon_config.h, kter´ y se nach´az´ı v adres´aˇri namon-cap. Dan´a volba se zap´ın´a ˇc´ıslem 1, vyp´ın´a 1
Pro vyps´ an´ı vˇsech moˇznost´ı programu configure slouˇz´ı pˇr´ıkaz ./configure --help.
54
pak 0. Pˇr´ıkladem zapnut´e volby je napˇr. #define MAC_ENABLED 1. Nastavit lze tyto parametry: MAC ENABLED - Zap´ın´a podporu rozliˇsov´an´ı MAC adres. Do datab´aze se bude ke kaˇzd´emu z´aznamu zaznamen´avat MAC adresa stroje / posledn´ıho routeru. Znamen´a to tedy dalˇs´ı dva sloupce v datab´azi, zvˇetˇsen´ı kl´ıˇce a jistou reˇzii nav´ıc. Vzhledem k podstatn´emu n´arustu velikosti datab´aze (cca dvakr´at) je tato volba standardnˇe vypnuta. u. Pro kaˇzd´ y daPORT ENABLED - Zap´ın´a podporu rozliˇsov´an´ı port˚ tov´ y tok se tak rozpozn´av´a i c´ılov´ y a zdrojov´ y port. To potom znamen´a zvˇetˇsen´ı datab´aze o tyto dva sloupce, ale tak´e n´arust poˇctu z´aznam˚ u. Dojde totiˇz ke sn´ıˇzen´ı agregaˇcn´ıho pomˇeru pˇrid´an´ım dalˇs´ı kl´ıˇcov´e poloˇzky. Pokud chcete monitorovat i pouˇzit´e s´ıt’ov´e sluˇzby (na z´akladˇe port˚ u), zapnˇete tuto volbu. Pokud v´am staˇc´ı informace o c´ılov´e a zdrojov´e stanici, nechte tuto volbu vypnutou. STATS ENABLED - Zap´ın´a podporu provozn´ıch statistik samotn´eho programu. Jedn´a se o poˇcty pˇrijat´ ych a zahozen´ ych paket˚ u, u ´spˇeˇsnost cache, poˇctu SQL dotaz˚ u bˇehem jednoho ˇcasov´eho (AGGREGATE) intervalu. Doporuˇcuje se nechat zapnut´e, nastaven´ı m´a minim´aln´ı dopad na v´ ykon. y AGGREGATE INTERVAL - Jedn´a se o agregaˇcn´ı interval pouˇzit´ pro ukl´adan´ı dat, jde tedy o nejmenˇs´ı rozliˇsitelnou ˇcasovou jednotku. Veˇsker´a zobrazovan´a data jsou pak pr˚ umˇern´a data bˇehem tohoto intervalu. Tento parametr z´asadnˇe ovlivˇ nuje pˇresnost mˇeˇren´ı, velikost celkov´e datab´aze a tak´e cache-hit. Lze nastavit od jedn´e sekundy aˇz po jednu hodinu. Rozumnou hodnotou z pohledu velikosti datab´aze je 300s. Hodnota se ud´av´a v sekund´ach a v´ ysledn´e ˇc´ıslo mus´ı b´ yt dˇelitelem ˇc´ısla 3600. SLEEP INTERVAL - Ud´av´a dobu, na kterou se usp´ı vl´akno ukl´adaj´ıc´ı z´aznamy z intern´ı cache programu do samotn´e datab´aze. Ovlivˇ nuje v´ ysledn´ y cache-hit, tedy i poˇcet nutn´ ych dotaz˚ u do datab´aze. Z´aroveˇ n vˇsak zp˚ usobuje zpoˇzdˇen´ı v zobrazovan´ı statistik, maxim´aln´ı zpoˇzdˇen´ı je d´ano pr´avˇe touto hodnotou. Pokud je d˚ uleˇzit´a aktu´alnost zobrazovan´ ych dat, zvolte tento interval mal´ y. Pro minimalizaci dotaz˚ u do datab´aze pak hodnotu okolo 300s. Delˇs´ı interval nem´a smysl. Hodnota se ud´av´a v sekund´ach. HASH TABLE MIN SIZE - Jen pro zkuˇsen´e uˇzivatele. Ud´av´a poˇca´teˇcn´ı a z´aroveˇ n minim´aln´ı velikost hashtabulky. Pokud nev´ıte, co je to hashtabulka, nebo si nejste opravdu jisti, nemˇen ˇte toto nastaven´ı. Tato hodnota mus´ı b´ yt prvoˇc´ıslo. 55
Po jak´ekoliv zmˇenˇe v tomto souboru je nutn´e program pˇrekompilovat a inicializovat pomocn´e struktury v datab´azi. Staˇc´ı znovu prov´est proces instalace popsan´ y v sekci A.3.1. Pˇriloˇzen´ y program namon-db-init pak automaticky provede potˇrebn´e zmˇeny v datab´azi a upozorn´ı na pˇr´ıpadn´e probl´emy. Nastaven´ı pomoc´ı voleb na pˇ r´ıkazov´ em ˇ r´ adku ˇ ci konfiguraˇ cn´ım souboru Program umoˇzn ˇuje pomoc´ı pˇrep´ınaˇc˚ u na pˇr´ıkazov´e ˇra´dce nastavovat tyto parametry: • -c --config n´azev konfiguraˇcn´ıho souboru, kter´ y m´a b´ yt naˇcten • -d --database jm´eno dat´abaze v datab´azov´em serveru • -F --pcap_filter nastav´ı ”libpcap-kompatibiln´ı” filtr zachyt´av´an´ı paketu. Form´at zad´av´an´ı filtru je stejn´ y jako u programu tcpdump. Kompletn´ı popis je moˇzno nal´ezt na http://www.tcpdump.org/tcpdump_man.html. Nutno uv´est v u ´vozovk´ach. • -h --help vyp´ıˇse n´apovˇedu • -p <pass> --password <pass> pˇrihlaˇsovac´ı heslo do k datab´azi • -P <port> --sql_port <port> port, na kter´em je spuˇstˇen datab´azov´ y server • -s <server> --server <server> hostname/IP adresa MySQL serveru • -t
--table
jm´eno datab´azov´e tabulky, do kter´e se budou ukl´adat data • -u <sql-user> --sql-user <jmeno> pˇrihlaˇsovac´ı jm´eno k datab´azi • -v --verbose zapne vypisov´an´ı lad´ıc´ıch informac´ı • -V --version vyp´ıˇse ˇc´ıslo verze a ukonˇc´ı se Seznam tˇechto argument˚ u lze tak´e vypsat pomoc´ı pˇr´ıkazu namon -h nebo namon --help.
Konfiguraˇ cn´ı soubor Vˇsechny v´ yˇse uveden´e parametry s v´ yjimkou parametru -c (--config) lze nastavit pomoc´ı konfiguraˇcn´ıho souboru. Kaˇzd´ y ˇr´adek souboru odpov´ıd´a parametru pˇr´ıkazov´e ˇra´dky ve sv´e dlouh´e formˇe, kter´ y je n´asledoˇ v´an znakem = a pˇr´ısluˇsnou hodnotou. R´adky zaˇc´ınaj´ıc´ı znakem # jsou 56
#Defaultni konfiguracni soubor programu Namon. sql_server=localhost sql_user=root sql_password=topsecret sql_database=namon sql_table=troja sql_port=3306 #pcap_filter=change_me verbose=1
Obr´azek A.3: Uk´ azka konfiguraˇ cn´ıho souboru ˇ adky, kter´e neodpov´ıdaj´ı ˇz´adn´emu z parametr˚ br´any jako koment´aˇre. R´ u ˇ pˇr´ıkazov´e ˇr´adky jsou ignorov´any, je vˇsak vyps´ano varov´an´ı. R´adky, kter´e sice obsahuj´ı spravn´e kl´ıˇcov´e slovo, ale maj´ı nesmysln´ y obsah za rovn´ıtkem, zp˚ usob´ı vyps´an´ı chyby a ukonˇcen´ı programu. Pˇr´ıklad validn´ıho konfiguraˇcn´ıho souboru lze vidˇet na obr´azku A.3. Konfiguraˇcn´ı soubor je automaticky vytvoˇren pˇri instalaci a pokud neexistuje, tak i pˇri spuˇstˇen´ı programu. Vzhledem k tomu, ˇze heslo do datab´aze je v souboru uloˇzeno v otevˇren´e podobˇe, je soubor vˇzdy vytv´aˇren jen s pr´avy pro ˇcten´ı a z´apis dan´eho uˇzivatele.
A.5
Webov´ e rozhran´ı
K prohl´ıˇzen´ı webov´eho rozhran´ı slouˇz´ı libovoln´ y webov´ y prohl´ıˇzeˇc podporuj´ıc´ı javascript. Po zad´an´ı pˇr´ısluˇsn´e webov´e adresy dojde k naˇcten´ı u ´vodn´ı str´anky (obr´azek A.4).
Na t´eto obrazovce doch´az´ı k pˇrihlaˇsov´an´ı k pˇr´ısluˇsn´emu datab´azov´emu serveru. Pˇri otevˇren´ı t´eto str´anky dojde taky k ukonˇcen´ı pˇr´ıpadn´ ych spojen´ı k jin´ ym datab´azov´ ym server˚ um. Pˇredvyplnˇen´ y text pˇrihlaˇsovac´ıho formul´aˇre lze ovlivnit nastaven´ım pˇr´ısluˇsn´ ych poloˇzek v souboru namon.php. Jsou to poloˇzky: var var var var var
$db_host $db_user $db_pass $db_name $db_table
Toto nastaven´ı m´a vliv pouze na pˇredvyplnˇen´ y text, zad´an´ım jin´ ych parametr˚ u se lze pˇr´ıhl´asit k jin´ ym server˚ um. Po u ´spˇeˇsn´em pˇrihl´aˇsen´ı dojde k otevˇren´ı hlavn´ıho okna webov´e aplikace (obr´azek A.5).
Formul´aˇr slouˇz´ıc´ı k v´ ybˇeru zobrazovan´ ych dat je rozdˇelen na dvˇe ˇca´sti. Prvn´ı ˇc´ast (viz obr´azek A.6) slouˇz´ı k nastaven´ı ˇcasov´eho obdob´ı, jednotky grafu, pˇr´ıpadnˇe jin´ ych poloˇzek pro vˇsechny grafy. Druh´a ˇca´st (obr´azek A.8) slouˇz´ı k vybr´an´ı pˇr´ısluˇsn´ ych omezen´ı jednotliv´ ych graf˚ u, pomoc´ı tlaˇc´ıtek Pˇ ridat dalˇ s´ ı a Odebrat lze nastavovat jejich poˇcet. Konkr´etn´ı ovl´ad´ac´ı prvky jsou pops´any n´ıˇze. U kaˇzd´eho v´ yznamn´eho
Obr´azek A.7: Uk´ azka n´ apovˇ edy ve formˇ e tipu.
prvku je um´ıstˇen obr´azek ˇza´rovky. Pˇri najet´ı kurzoru na tento obr´azek je zobrazena pˇr´ısluˇsn´a n´apovˇeda (obr´azek A.7).
59
Obr´azek A.8: Druh´ aˇ c´ ast formul´ aˇ re.
Nastaven´ı pro vˇ sechny grafy Volba ˇ casov´ eho obdob´ı - K nastavov´an´ı ˇcasov´eho obdob´ı pro vˇsechny ˇ grafy slouˇz´ı poloˇzky Od: a Do:. Cas se zad´av´a ve form´atu DD.MM.YYYY hh:mm, tedy napˇr´ıklad 27.05.2008 14:28. Datum lze zapsat ruˇcnˇe nebo s pomoc´ı interaktivn´ıho kalend´aˇre, kter´ y se vyvol´av´a kliknut´ım na ikonku kalend´aˇre u pˇr´ısluˇsn´eho pole. Volba jednotky - Volba jednotky prob´ıh´a pomoc´ı jednoduch´eho v´ ybˇeru ze seznamu. Data je moˇzn´e zobrazit s jednotkou: Kbit, Mbit, kB, MB, GB. Tato jednotka je v´azan´a na vˇsechny grafy. Nastaven´ı konkr´ etn´ıho grafu N´ azev - Tato poloˇzka slouˇz´ı k pojmenov´an´ı konkr´etn´ıho grafu, respektive kˇrivky grafu. Tento n´azev bude vyps´an v legendˇe grafu a ve vypsan´e tabulce. Protokol - Slouˇz´ı k v´ ybˇeru konkr´etn´ıho transportn´ıho protokolu. Do v´ ystupu budou zahrnuta jen ta data, kter´a byla pˇren´aˇsena dan´ ym protokolem. Volba prob´ıh´a vybr´an´ım ze seznamu, na v´ ybˇer jsou protokoly TCP, UDP a ICMP. IP Adresa - Slouˇz´ı k omezen´ı dat na b´azi IP adres, do v´ ystupu budou zahrnuta jen ta data, kter´a byla pˇren´aˇsena na nebo z dan´e adresy ˇci rozsahu adres. Pole IP adresa akceptuje n´asleduj´ıc´ı form´aty: • • • •
Cel´a IP adresa, napˇr´ıklad: 192.168.10.20 ˇ ast IP adresy s hvˇezdiˇckou, napˇr´ıklad 192.168.* C´ Rozsah IP adres v CIDR notaci, napˇr´ıklad 192.168.20.0/24 Rozsahu IP adres, napˇr´ıklad: 192.168.10.1-192.168.10.20. Je nutn´e uv´est obˇe IP adresy v pln´em rozsahu, druh´a IP adresa mus´ı b´ yt vyˇsˇs´ı, neˇz prvn´ı. 60
• Negace pˇredchoz´ıch form´at˚ u, napˇr´ıklad: !192.168.* nebo !10.0.0.0-10.1.0.0 • Kombinace pˇredchoz´ıch form´at˚ u. Separ´ator je ˇca´rka. Napˇr´ıklad: 192.168.10.20, 10.7.*, !10.7.0.12 Zdrojov´ a IP adresa - Slouˇz´ı k omezen´ı dat na b´azi zdrojov´ ych IP adres. Do v´ ystupu budou zahrnuta jen ta data, kter´a poch´azela z dan´e IP adresy / rozsahu adres. Form´at vstupu je pops´an v´ yˇse. C´ılov´ a IP adresa - Slouˇz´ı k omezen´ı dat na b´azi c´ılov´ ych IP adres. Do v´ ystupu budou zahrnuta jen ta data, kter´a smˇeˇrovala na danou IP adresu / rozsahu adres. Form´at vstupu je pops´an v´ yˇse. MAC adresa, Zdrojov´ a MAC adresa, C´ılov´ a MAC adresa - Tyto poloˇzky funguj´ı stejnˇe jako odpov´ıdaj´ıc´ı poloˇzky s IP adresou. Tyto moˇznosti se zobraz´ı, pouze pokud byl program nainstalov´an s podporou rozliˇsov´an´ı MAC adres. Pole MAC adresa akceptuje n´asleduj´ıc´ı form´aty: • • •
Cel´a MAC adresa, napˇr´ıklad: 00:0f:f0:cd:10:20 ˇ ast MAC adresy s hvˇezdiˇckou, napˇr´ıklad 00:50:* C´ Negace pˇredchoz´ıch form´at˚ u, napˇr´ıklad: !00:0f:f0:cd:10:20 nebo !00:50:* • Kombinace pˇredchoz´ıch form´at˚ u. Separ´ator je ˇca´rka. Napˇr´ıklad: 00:0f:f0:cd:10:20, 00:50:*, !00:50:40:* Port, Zdrojov´ y port, C´ılov´ y port - Tyto poloˇzky funguj´ı stejnˇe jako odpov´ıdaj´ıc´ı poloˇzky s IP ˇci MAC adresou. Tyto moˇznosti se zobraz´ı, pouze pokud byl program nainstalov´an s podporou rozliˇsov´an´ı port˚ u. Pole port akceptuje n´asleduj´ıc´ı form´aty: • • • •
Jeden port, napˇr´ıklad: 80 Rozsah port˚ u, napˇr´ıklad 1-1024 Negace pˇredchoz´ıch form´at˚ u, napˇr´ıklad: !80 nebo !1-1024 Kombinace pˇredchoz´ıch form´at˚ u. Separ´ator je ˇca´rka. Napˇr´ıklad: 1-1024, 6000, !80
Rozdˇ elit - Pokud je toto zaˇskrt´avac´ı pol´ıˇcko u pˇr´ısluˇsn´e poloˇzky zvoleno, ve v´ ysledku se zobraz´ı 3 grafy. Prvn´ım z nich bude graf provozu, kde c´ılov´a IP adresa, MAC adresa, ˇci port byla zvolen´a hodnota. V dalˇs´ım budou data, kde zdrojov´a IP adresa, MAC adresa, ˇci port byly ve zvolen´em rozsahu. Tˇret´ım budou data, kde zdrojov´a i c´ılov´a IP adresa, MAC adresa, ˇci port byly ve zvolen´em rozsahu. Lze tak tedy napˇr´ıklad zobrazit aktivitu ˇca´sti s´ıtˇe rozdˇelenou na upload, download a aktivitu uvnitˇr t´eto s´ıtˇe. 61
Zobrazit graf - Pokud je tato poloˇzka zaˇskrtnuta, bude zobrazen pˇr´ısluˇsn´ y graf. Pokud ne, graf se ve v´ ysledku neobjev´ı. Zobrazit tabulku - Pokud je tato poloˇzka zaˇskrtnuta, bude zobrazena i pˇr´ısluˇsn´a tabulka dat rozdˇelen´a. Pokud ne, tabulka se ve v´ ysledku neobjev´ı. Pokud nen´ı zvolena ani jedna z moˇznost´ı Zobrazit graf nebo Zobrazit tabulku, nebudou z dan´eho grafu zobrazena ˇz´adn´a data. To se m˚ uˇze hodit v pˇr´ıpadˇe, ˇze je definov´ano graf˚ u v´ıc a ten se tak st´av´a nepˇrehledn´ ym. Nechceme vˇsak pˇrij´ıt o nastaven´ı tohoto grafu, a proto m´ısto tlaˇc´ıtka Odebrat jen odˇskrtneme poloˇzky zobrazit graf a zobrazit tabulku.
A.7
Celkov´ e statistiky
V t´eto z´aloˇzce prob´ıhaj´ı dotazy na celkov´ y provoz s´ıtˇe v ˇcase. Lze definovat nˇekolik omezen´ı na zobrazovan´a data, zvolit jednotku a ˇcasov´e obdob´ı, jak bylo pops´ano v´ yˇse. Pokud je definov´ano v´ıce graf˚ u, budou zobrazeny v jednom. Kromˇe jiˇz uveden´ ych moˇznost´ı jsou k dispozici jeˇstˇe dalˇs´ı: ˇ Casov´ y interval - Slouˇz´ı k nastaven´ı agregaˇcn´ıho intervalu, ve kter´em budou data zobrazov´ana. Pokud je napˇr. zvolen jako 1 hodina, bude zobrazen pr˚ umˇern´ y hodinov´ y provoz v dan´em ˇcasov´em obdob´ı. Pokud je zvolen jako minuta, budou zobrazena data s nejmenˇs´ı moˇzn´ ym agregaˇcn´ım intervalem, tj. stejn´ ym intervalem, kter´ y byl zvolen pˇred instalac´ı v souboru namon_config.h. Celkov´ y graf - Ve v´ ysledn´em grafu bude zobrazena celkov´a z´atˇeˇz s´ıtˇe v dan´em obdob´ı, tedy data bez ˇz´adn´ ych omezen´ı. Celkov´ a tabulka - Ve v´ ysledku bude zobrazena tabulka obsahuj´ıc´ı informace o celkov´e z´atˇeˇzi s´ıtˇe v dan´em omezen´ı, tedy data bez ˇza´dn´ ych omezen´ı. Pouˇ z´ıt jako referenˇ cn´ı - Ve v´ ysledn´e tabulce budou u ostatn´ıch statistik spoˇc´ıt´any procentu´aln´ı hodnoty k celkov´e statistice. M´a smysl zvolit, pouze pokud je zaˇskrtnuta volba Celkov´ a tabulka. Konkr´etn´ı pˇr´ıklad pouˇzit´ı naleznete v sekci A.11.1.
A.8
TOP statistiky
V t´eto z´aloˇzce se lze dotazovat na nejaktivnˇejˇs´ı IP adresy (uˇzivatele), porty (aplikace) ˇci pomˇer pouˇzit´ ych protokol˚ u bˇehem zvolen´eho obdob´ı. 62
Podobnˇe jako u Celkov´e statistiky lze zvolit nˇekolik omezen´ı na zobrazovan´a data, jak toho lze dos´ahnout je jiˇz pops´ano v´ yˇse. Konkr´etn´ı hodnoty pak lze vypsat do tabulky, kde doch´az´ı k pˇr´ıpadn´emu pˇrekladu IP adres na dom´enov´a jm´ena.
Obr´azek A.9: TOP statistiky, uk´ azka rozhran´ı
V t´eto z´aloˇzce se nach´az´ı, kromˇe jiˇz uveden´ ych ovl´adac´ıch prvk˚ u, dalˇs´ı prvky (obr´azek A.9): Celkov´ y graf - Ve v´ ysledn´em grafu bude zobrazena celkov´a z´atˇeˇz s´ıtˇe v dan´em obdob´ı, tedy data bez ˇza´dn´ ych omezen´ı. Agreg´atorem tohoto grafu bude prvn´ı agreg´ator graf˚ u uvedn´ ych n´ıˇze. Celkov´ a tabulka - Ve v´ ysledku bude zobrazena tabulka obsahuj´ıc´ı informace o celkov´e z´atˇeˇzi s´ıtˇe v dan´em omezen´ı, tedy data bez ˇza´dn´ ych omezen´ı. Agreg´atorem t´eto tabulky bude prvn´ı agreg´ator graf˚ u uvedn´ ych n´ıˇze. Agreg´ ator - Nastavuje, ze kter´e poloˇzky se budou tvoˇrit TOP statistiky. Je-li tedy nastavena napˇr. na c´ılovou IP adresu, ve v´ ysledku se zobraz´ı ti uˇzivatel´e (IP adresy), kteˇr´ı v dan´em obdob´ı nejv´ıce stahovali. Limit - Nastavuje maxim´aln´ı poˇcet poloˇzek zobrazen´ ych v grafu a tabulce. Konkr´etn´ı pˇr´ıklad pouˇzit´ı naleznete v sekci A.11.2.
63
A.9
Statistiky provozu
Tato z´aloˇzka slouˇz´ı ke sledov´an´ı provozn´ıch statistik. Jedn´a se o sledov´an´ı poˇctu pˇrijat´ ych a zahozen´ ych paket˚ u, cache-hit intern´ı cache programu a poˇctu dotaz˚ u do datab´aze ve zvolen´em ˇcasov´em obdob´ı. Jedn´a se vˇzdy o pr˚ umˇern´e hodnoty bˇehem nastaven´eho ˇcasov´eho intervalu. Souˇca´st´ı v´ ystupu je tak´e tabulka hodnot ve vˇsech ˇcasov´ ych intervalech ve zvolen´em obdob´ı. Jedin´ ym moˇzn´ ym nastaven´ım je zvolen´ı ˇcasov´eho obdob´ı.
A.10
N´ apovˇ eda
Tato z´aloˇzka obsahuje konkr´etn´ı pˇr´ıklady pouˇz´ıt´ı webov´e aplikace. Jedn´a se o stejn´e pˇr´ıklady jako jsou v t´eto dokumentaci.
A.11
Pˇ r´ıklady pouˇ zit´ı
A.11.1
Celkov´ e statistiky
Obr´azek A.10: Pˇr´ıklad pouˇzit´ı celkov´ ych statistik
V tomto pˇr´ıkladu byl monitorov´an provoz firemn´ı s´ıtˇe. Monitorov´an´ı prob´ıhalo pomoc´ı port-mirroringu na centr´aln´ım routeru pˇripojen´em do internetu. Spr´avce s´ıtˇe zaj´ım´a celkov´ y provoz t´eto s´ıtˇe bˇehem veˇcera a d´ale
64
pomˇer webov´ ych sluˇzeb na celkov´em provozu. Provede proto nastaven´ı uk´azan´a na obr´azku A.10. Po stisknut´ı tlaˇc´ıtka Zobrazit dojde k vykreslen´ı grafu a vyps´an´ı tabulky, jak ukazuje obr´azek A.11.
Administr´ator s´ıtˇe tedy z´ıskal poˇzadovan´e informace. Zjistil, ˇze webov´ y provoz tvoˇril cca 50% veˇsker´eho provozu, coˇz se zd´a b´ yt v poˇra´dku.
A.11.2
TOP statistiky
Monitorov´an je provoz stejn´e firemn´ı s´ıtˇe jako v pˇr´ıkladˇe A.11.1. Tentokr´at spr´avce zaj´ımaj´ı uˇzivatel´e (IP adresy) ze s´ıtˇe 10.7.0.0/16, kteˇr´ı bˇehem dan´eho obdob´ı nejv´ıce stahovali. Provede tedy nastaven´ı jako na obr´azku A.12. Po stisknut´ı tlaˇc´ıtka Zobrazit dojde k vykreslen´ı grafu a vyps´an´ı tabulky, jak ukazuje obr´azek A.13 Administr´ator s´ıtˇe tedy z´ıskal poˇzadovan´e informace. Vzhledem k tomu, ˇze IP adresy v tabulce nemaj´ı vlastn´ı DNS z´aznam, jsou v z´avork´ach m´ısto dom´enov´eho jm´ena uvedeny opˇet IP adresy.
65
Obr´azek A.12: Pˇr´ıklad pouˇzit´ı TOP statistik
Obr´azek A.13: Pˇr´ıklad pouˇzit´ı TOP statistik, v´ ysledn´ y graf
66
Pˇ r´ıloha B Program´ atorsk´ a dokumentace B.1
Technick´ e informace
Hlavn´ı, zachyt´avac´ı, ˇca´st aplikace je napsan´a v jazyce C, webov´e rozhran´ı pak pomoc´ı jazyka PHP 5.0, HTML, CSS a Javascript. Jako datab´azov´ y server je pouˇzit server MySQL. Zachyt´avac´ı ˇc´ast aplikace je napsan´a pro platformu Unix, webov´e rozhran´ı je pak platformˇe nez´avisl´e. K jeho prohl´ıˇzen´ı slouˇz´ı libovoln´ y webov´ y prohl´ıˇzeˇc podporuj´ıc´ı javascript.
Softwarov´ e poˇ zadavky Pro zachyt´avac´ı ˇca´st aplikace jsou potˇreba n´asleduj´ıc´ı poloˇzky: • knihovna GLiB v2.16.1 nebo vyˇsˇs´ı - z t´eto knihovny byla pouˇzita implementace hashtabulky, funkce zaruˇcuj´ıc´ı atomick´e operace s ˇc´ısly a ukazateli a funkce umoˇzn ˇuj´ıc´ı efektivnˇejˇs´ı alokaci pamˇeti (slice allocator). • knihovna libpthread - tato knihovna slouˇz´ı pro podporu vl´aken v aplikaci. • knihovna libmysqlclient - tato knihovna je zde kv˚ uli podpoˇre MySQL serveru, slouˇz´ı k pˇripojen´ı k datab´azi a podpoˇre dotazov´an´ı pˇr´ımo z aplikace. • knihovna libpcap - knihovna obsahuje API pro zachyt´av´an´ı paket˚ u, obsahuje moˇznost pomˇernˇe komplexn´ıch filtr˚ u paket˚ u, je multiplatformn´ı. • autotools - n´astroje slouˇz´ıc´ı k automatick´emu vytv´aˇren´ı configure skript˚ u a Makefile soubor˚ u dle dan´e ˇsablony. Nutn´e pouze pˇri u ´pravˇe k´odu. 67
K usnadnˇen´ı instalace a kompilace zachyt´avac´ıho programu na r˚ uzn´ ych verz´ıch Unixov´ ych syst´em˚ u stejnˇe byly pouˇzity n´astroje autotools. Byla tedy naps´ana konfiguraˇcn´ı ˇsablona nach´azej´ıc´ı se v souboru congigure.ac slouˇz´ıc´ı k vygenerov´an´ı konfiguraˇcn´ıho skriptu configure. Spolu s pˇr´ısluˇsn´ ymi ˇsablonov´ ymi makefile soubory, kter´e jsou pojmenovan´e Makefile.am a nach´az´ı se v kaˇzd´em adres´aˇri obsahuj´ıc´ı zdrojov´ y k´od, pak dojde pˇri spuˇstˇen´ı pˇr´ıkazu ./configure k vygenerov´an´ı soubor˚ u Makefile. Z d˚ uvod˚ u usnadnˇen´ı instalace byl tak´e naps´an program namon-db-init nach´azej´ıc´ı se v adres´aˇri namon-cap/src/sql-install. Tento program slouˇz´ı k inicializaci datab´aze, vytvoˇren´ı pomocn´ ych tabulek a tak´e k vytvoˇren´ı konfiguraˇcn´ıho souboru.
B.3
Struktura datab´ aze
Data v datab´azi jsou ukl´ad´ana do tabulek pojmenovan´ ych dle zvolen´eho n´azvu a konkr´etn´ıho dne, v´ ysledn´ y n´azev je tedy YYYYMMDD. Kaˇzd´ y den m´a tedy vlastn´ı tabulku. Tato tabulka m´a n´asleduj´ıc´ı strukturu:
Tabulka B.1: Struktura hlavn´ı tabulky Sloupec Typ Prim´arn´ı kl´ıˇc src ip int(10) Ano int(10) Ano dst ip src port smallint(5) Ano dst port smallint(5) Ano src mac varchar(20) Ano dst mac varchar(20) Ano protocol enum Ano size bigint(20) Ne count mediumint(8) Ne hour tinyint(4) Pouze kl´ıˇc (ne prim´arn´ı)
68
Sloupce src port, dst port, src mac a dst mac se v tabulce a tedy i v prim´arn´ım kl´ıˇci objevuj´ı, pouze pokud byla pˇri instalaci podpora pˇr´ısluˇsn´e poloˇzky zapnut´a. Sloupec time znaˇc´ı zaˇca´tek ˇcasov´eho intervalu, ve kter´em byly pakety zachyceny, count jejich poˇcet a size jejich celkovou velikost. Kromˇe t´eto tabulky existuj´ı jeˇstˇe pomocn´e tabulky, kter´e jsou potˇrebn´e k chodu aplikace a kter´e pˇri instalaci vytv´aˇr´ı program namon-db-init. Jedn´a se o tabulku _settings (viz tabulka B.2) nesouc´ı nastaven´ı programu bˇehem instalace (d´elka ˇcasov´eho intervalu, povolen´ı zachyt´av´an´ı port˚ u a MAC adres). Tato tabulka obsahuje jedin´ y ˇra´dek. Tabulka B.2: Struktura tabulky nastaven´ı Sloupec Typ Prim´arn´ı kl´ıˇc port enabled tinyint(1) Ne tinyint(1) Ne mac enabled interval int(11) Ne D´ale tabulka _statsYYYYMMDD (viz tabulka B.3) obsahuj´ıc´ı provozn´ı informace programu v dan´ y den. Tabulka B.3: Struktura tabulky provozn´ıch statistik Sloupec Typ Prim´arn´ı kl´ıˇc time (time Ano received bigint(20) Ne dropped bigint(20) Ne already bigint(20) Ne new bigint(20) Ne D´alˇs´ı pomocnou tabulkou je tabulka dummy (tabulka B.4) neobsahuj´ıc´ı ˇza´dn´a data, slouˇz´ıc´ı pouze k vracen´ı pr´azdn´ ych dotaz˚ u. Tabulka B.4: Struktura dummy tabulky Sloupec Typ Prim´arn´ı kl´ıˇc day int(8) Ne agregator int(10) Ne size bigint(20) Ne Posledn´ı dvˇe pomocn´e tabulky pojmenovan´e time_table (tabulka B.5) a time_table_hour (tabulka B.6) slouˇz´ı k zajiˇstˇen´ı 69
spr´avnosti ˇcasov´ ych interval˚ u pˇri v´ ystupu. Tabulka time_table obsahuje hodnoty zaˇc´atk˚ u vˇcech ˇcasov´ ych interval˚ u bˇehem jednoho dne (pro pˇetiminutov´ y interval napˇr´ıklad 00:00:00, 00:05:00, 00:10:00 atd.), tabulka time_table_hour obsahuje seznam hodin bˇehem jednoho dne (ˇc´ısla 0-23). Tabulka B.5: Struktura time table tabulky Sloupec Typ Prim´arn´ı kl´ıˇc time time Ano
Tabulka B.6: Struktura time table hour tabulky Sloupec Typ Prim´arn´ı kl´ıˇc hour tinyint(4) Ano
B.4
Hlavn´ı aplikace
B.4.1
Architektura programu Start Aplikace Rozdělení do vláken
pakety Síťová karta
Zachytávací vlákno
Ukládací vlákno
Informační vlákno
Časovací vlákno
hlavičky paketů
Hashovací tabulka
Obr´azek B.1: Architektura NAMon Architekturu programu zobrazuje obr´azek B.1. Program se po spuˇstˇen´ı rozdˇel´ı na 4 vl´akna.
70
Zachyt´avac´ı vl´akno prov´ad´ı vlastn´ı pˇr´ıjem paket˚ u a jejich filtrov´an´ı. N´aslednˇe je pak ukl´ad´a do hashovac´ı tabulky, respektive aktualizuje jej´ı z´aznamy v pˇr´ıpadˇe, ˇze se paket shoduje v kl´ıˇcov´ ych parametrech. Kl´ıˇcov´e parametry jsou: zdrojov´a a c´ılov´a IP adresa, pouˇzit´ y protokol, ˇcas doruˇcen´ı paketu a pˇr´ıpadnˇe tak´e zdrojovou a c´ılovou MAC adresa a zdrojov´ y a c´ılov´ y port, je-li program zkompilov´an s tˇemito moˇznostmi. Toto vl´akno je spuˇstˇeno s maxim´aln´ı prioritou. Ukl´adac´ı vl´akno je spuˇstˇeno s minim´aln´ı prioritou. Pokud nen´ı hashovac´ı tabulka pr´azdn´a, zaˇcne vl´akno data ukl´adat z tabulky do samotn´e datab´aze. Pokud je hashovac´ı tabulka pr´azdn´a, usp´ı se na nastavenou dobu (sleep interval). Ve skuteˇcnosti nedoch´az´ı k souˇcasn´emu pˇr´ıstupu obou vl´aken do hashovac´ı tabulky. Z tohoto d˚ uvodu existuj´ı v programu dvˇe instance hashtabulky. V pˇr´ıpadˇe, ˇze je tˇreba data z hashtabulky uloˇzit do samotn´e datab´aze, dojde jen k atomick´emu prohozen´ı ukazatel˚ u na aktivn´ı hashtabulku. Zachyt´av´ac´ı vl´akno pak ukl´ad´a data do jin´e hashtabulky, neˇz ze kter´e ukl´adac´ı vl´akno data odeb´ır´a. Vyhneme se tak nutn´emu a drah´emu uzamyk´an´ı hashtabulky pomoc´ı mutexu pˇri kaˇzd´em vkl´ad´an´ı paketu. Informaˇcn´ı vl´akno slouˇz´ı k zobrazov´an´ı v´ ystupu programu (pˇrev´aˇznˇe lad´ıc´ı informace), k zachyt´av´an´ı uˇzivatelsk´ ych vstup˚ u a n´asledn´emu vypisov´an´ı aktu´aln´ıho provozn´ıho stavu. ˇ Casovac´ ı vl´akno. Jeho u ´kolem je nastavov´an´ı aktu´aln´ıho ˇcasov´eho intervalu, slouˇz´ı tak´e k pˇrep´ınan´ı datab´azov´ ych tabulek pˇri pˇrechodu do n´asleduj´ıc´ıho dne. Pro toto nastavov´an´ı byl pouˇzit vlastn´ı form´at ˇc´ısla umoˇzn ˇuj´ıc´ı rychleji zjistit ˇcas pro kaˇzd´ y paket. Tento form´at je pops´an v sekci B.5.1.
B.4.2
Zdrojov´ e soubory
Zdrojov´ y k´od aplikace je rozdˇelen do nˇekolika soubor˚ u (viz obr´azek B.2). Aplikace p˚ uvodnˇe mˇela umoˇzn ˇovat jeˇstˇe dalˇs´ı moˇznosti, z ˇcasov´ ych d˚ uvod˚ u k jejich pln´e implementaci vˇsak jiˇz nedoˇslo. Proto jsou ve zdrojov´ ych k´odech k nalezen´ı fragmenty k´odu, kter´e jsou zakomentovan´e a pˇripraven´e pro budouc´ı verzi programu. N´asleduje popis v´ yznamu jednotliv´ ych soubor˚ u. V tomto manu´alu nejsou rozebr´any jednotliv´e funkce programu, jejich popis je vˇzdy k nalezen´ı v pˇr´ısluˇsn´em zdrojov´em souboru. 71
Obr´azek B.2: Seznam zdrojov´ ych soubor˚ u hlavn´ıho programu Pops´an je vˇzdy obsah pˇr´ısluˇcn´eho zdrojov´eho souboru s pˇr´ıponou .c, hlaviˇckov´e soubory obsahuj´ıc´ı jen seznam funkc´ı nejsou v seznamu uvedeny. MAC.h - obsahuje makra pouˇzit´a pˇri povolen´ı, respektive vypnut´ı MAC adres. Jedn´a se o ˇc´asti MySQL dotaz˚ u apod. common.h - obsahuje spoleˇcn´e definice konstant (maxim´aln´ı d´elky ˇretˇezc˚ u), velikosti vnitˇrn´ıch struktur apod. Tento soubor je vloˇzen pomoc´ı #include\ ve vˇsech zdrojov´ ych souborech. conf.c - obsahuje funkce k inicializaci, naˇc´ıt´an´ı a ukl´ad´an´ı konfiguraˇcn´ıho souboru. conf.h - kromˇe definice funkc´ı ze souboru conf.c obsahuje tak´e definici struktury struct conf_t, kter´a slouˇz´ı k uchov´av´an´ı nastaven´ı naˇcten´eho z pˇr´ıkazov´e ˇra´dky ˇci konfiguraˇcn´ıch soubor˚ u. data.c - obsahuje cel´ y k´od ukl´adac´ıho vl´akna. V tomto souboru jsou veˇsker´e funkce spojen´e s ukl´ad´an´ım a odeb´ır´an´ı dat do/z hashtabulky. glib/ghash.c - obsahuje upraven´ y k´od implementace hashtabulky z knihovny GLiB. Upravena je pˇredevˇs´ım poˇca´teˇcn´ı velikost hashtabulky, 72
kter´a v p˚ uvodn´ı verzi byla nastavena na 11. V t´eto verzi je velikost konfigurovateln´a pomoc´ı souboru namon_config.h. ych protokol˚ u, respektive jeif ether.h - obsahuje definice ethernetov´ jich ˇc´ısel. Jedn´a se upraven´ y standardn´ı hlaviˇckov´ y soubor operaˇcn´ıho syst´emu Linux. Vzhledem k tomu, ˇze na syst´emu FreeBSD podobn´ y soubor neobsahuje, je v pˇr´ıpadˇe kompilace na FreeBSD pouˇzit. malloc.c - obsahuje funkce na alokaci a uvolˇ nov´an´ı pamˇeti pro datovou strukturu pouˇzitou v hashtabulce. P˚ uvodn´ı myˇslenkou bylo pouˇz´ıt rychl´e alokov´an´ı pomoc´ı tzv. memory slices knihovny GLiB, od toho vˇsak bylo upuˇstˇeno, a proto se zde vol´a jen standardn´ı funkce malloc. namon-cap.c - hlavn´ı soubor cel´eho programu. Obsahuje zachyt´avac´ı, informaˇcn´ı a ˇcasovac´ı vl´akno. Mimojin´e obsahuje tak´e funkci main, ve kter´e doch´az´ı k analyzov´an´ı vstupn´ıch parametr˚ u, inicializaci spojen´ı k MySQL, kontrole tabulek apod. namon-cap.h - obsahuje definici struktury struct namon_t, kter´a slouˇz´ı jako nosn´a promˇenn´a v cel´em programu. Jsou v n´ı uloˇzeny veˇsker´e nastaven´ı, obsahuje tak´e ukazatel na pˇripojen´ı k datab´azi apod. Instance t´eto struktury je v programu glob´aln´ı. uzn´a nastaven´ı, od kter´ ych se pak odv´ıj´ı namon config.h - obsahuje r˚ funkce programu (povolen´ı zachyt´av´an´ı port˚ u, MAC adres apod, nastaven´ı r˚ uzn´ ych ˇcasov´ ych interval˚ u). Toto nastavov´an´ı prob´ıh´a pomoc´ı makra #define, v jednotliv´ ych zdrojov´ ych souborech je pak toto nastaven´ı testov´ano pomoc´ı #ifdef. Toto je jedin´ y soubor, kter´ y by mˇel editovat samotn´ y uˇzivatel aplikace. namon mysql.c - obsahuje funkce potˇrebn´e pro pr´aci s MySQL datab´az´ı, jako je inicializace spojen´ı, maz´an´ı a zakl´ad´an´ı tabulek apod. port.h - m´a podobn´ y v´ yznam jako soubor MAC.h s t´ım rozd´ılem, ˇze se makra uveden´a v souboru t´ ykaj´ı port˚ u a ne MAC adres. sql-install/namon-install.c - obsahuje zdrojov´ y k´od pomocn´e aplikace namon-db-init, kter´a slouˇz´ı k inicializaci datab´aze a zaloˇzen´ı konfiguraˇcn´ıho souboru po instalaci.
B.5 B.5.1
Speci´ aln´ı form´ aty pouˇ zit´ e v aplikaci Form´ at ˇ casu pouˇ zit´ y v aplikaci
Kv˚ uli rychlosti z´ısk´av´an´ı konkr´etn´ıho ˇcasu pro kaˇzd´ y paket bylo v aplikaci pouˇzito atomick´e ˇc´ıslo, kter´e periodicky nastavuje ˇcasovac´ı vl´akno. 73
M´ısto standardn´ıho form´atu ˇc´ısla typu time_t byl pouˇzit vlastn´ı form´at. Standardnˇe by bylo totiˇz nutn´e pro z´ısk´an´ı konkr´etn´ıho ˇcasu volat funkci localtime, ta je vˇsak dle mˇeˇren´ı velmi pomal´a. Pouˇzito je 4 bytov´e ˇc´ıslo, kter´e s pouˇzit´ım spr´avn´ ych funkc´ı dok´aˇze zaruˇcit atomick´e operace pˇriˇrazen´ı. Myˇslenka tkv´ı v bitov´em ukl´ad´an´ı jednotliv´ ych ˇca´st´ı ˇcasu (rok, mˇes´ıc, den, hodina, sekunda) do pˇr´ısluˇsn´ ych ˇc´ast´ı 32 bitov´eho ˇc´ısla. To umoˇzn´ı rychlejˇs´ı extrahov´an´ı jednotliv´ ych ˇcasov´ ych obdob´ı pomoc´ı bitov´ ych operac´ı. Na jednotliv´e ˇcasov´e obdob´ı byly vyhrazeny n´asleduj´ıc´ı poˇcty bit˚ u: • Rok - 6 bit˚ u, tedy hodnoty 0-63. Podpor´any jsou jen roky 20002063. • Mˇes´ıc - 4 bity • Den - 5 bit˚ u • Hodina - 5 bit˚ u • Minuta - 6 bit˚ u • Sekunda - 6 bit˚ u Obr´azek B.5.1 ukazuje pˇr´ıklad pouˇzit´ı tohoto form´atu a poˇrad´ı jednotliv´ ych obdob´ı. Zobrazen´ ym ˇcasem je 13:48:00 28.05.2008. 001000|01 01|11100|0 1101|1100 01|000000 ------|------|-----|-------|--------|------rok |mesic | den |hodina | minuta |sekunda
Obr´azek B.3: Speci´aln´ı form´at ˇcasu
B.5.2
Vytv´ aˇ ren´ı kl´ıˇ ce do hashtabulky
Kl´ıˇc do hashtabulky je tvoˇren zdrojovou a c´ılovou IP adresou, ˇcasov´ ym intervalem pˇr´ıchodu paketu a pˇr´ıpadnˇe zdrojov´ ym a c´ılov´ ym portem a zdrojovou, c´ılovou MAC adresou, pokud jsou pˇr´ısluˇsn´e poloˇzky povoleny. Kv˚ uli maxim´aln´ımu zrychlen´ı vytv´aˇren´ı vyhled´avac´ıho kl´ıˇce byl nasazen vlastn´ı zp˚ usob jeho vytv´aˇren´ı nam´ısto prost´eho vyps´an´ı pˇr´ısluˇsn´ ych kl´ıˇcov´ ych poloˇzek za sebou do ˇretˇezce pomoc´ı funkce sprintf, kter´a je relativnˇe pomal´a. Myˇslenka spoˇc´ıv´a v tiˇstˇen´ı jednotliv´ ych byt˚ u ˇctyˇrbytov´eho (IP adresa) ˇci dvoubytov´eho ˇc´ısla (porty) za sebou do ˇretˇezce. Pomoc´ı bitov´e operace AND a bitov´ ych posun˚ u jsou z tˇechto ˇc´ısel po ˇradˇe z´ısk´av´any jednotliv´e byty. Ty jsou pak zapisov´any do pole byt˚ u pˇredstavuj´ıc´ı ˇretˇezec. Je vˇsak tˇreba si d´at pozor na pˇr´ıpadn´e nulov´e byty kl´ıˇcov´ ych poloˇzek. Ty by 74
pˇri vypisov´an´ı ˇretˇezce zp˚ usobily jeho ukonˇcen´ı. Pˇr´ıpadn´e nuly jsou tedy nahrazeny jedniˇckou a pozice t´eto nuly je zaps´ana na pˇr´ısluˇsnou bitovou pozici pomocn´eho ˇc´ısla. Toto pomocn´e ˇc´ıslo je pak vytiˇstˇeno na konci ˇretˇezce. T´ımto dostaneme rychl´e a jednoznaˇcn´e zobrazen´ı mezi kl´ıˇcov´ ymi poloˇzkami a kl´ıˇcem do hashtabulky.
B.6
Webov´ e rozhran´ı
Webov´e rozhran´ı je naprogramov´ano v jazyce PHP 5.0, k dotazov´an´ı datab´aze je pouˇzit jazyk SQL. K zobrazovan´ı graf˚ u a interaktivn´ıch prvk˚ u je pouˇzit Javascript, celkov´ y vzhled aplikace se pak ovlivˇ nuje pomoc´ı kask´adov´ ych styl˚ u (CSS).
B.6.1
Pouˇ zit´ e komponenty
Webov´e rozhran´ı ke sv´emu bˇehu nevyˇzaduje instalaci ˇza´dn´e knihovny, nˇekolik komponent pˇresto obsahuje. Ty jsou ˇs´ıˇreny spolu s programem. Pouˇzity jsou n´asleduj´ıc´ı komponenty: • Chart 1.0 - WebFX - soubor javascriptov´ ych funkc´ı slouˇz´ıc´ı ke generov´an´ı graf˚ u. Viz http://www.webfx.nu • JS Calendar - javascriptov´e funkce slouˇz´ıc´ı k zobrazen´ı interaktivn´ıho kalend´aˇre. Viz http://www.dhtmlgoodies.com • qTip - jednoduch´ y skript v javascriptu umoˇzn ˇuj´ıc´ı vyps´an´ı form´atovan´eho textu po najet´ı kurzorem na dan´ y prvek. Viz http:// qrayg.com/learn/code/qtip/
B.6.2
Architektura
Webov´a aplikace je ps´ana objektovˇe, aplikace obsahuje celkem ˇctyˇri tˇr´ıdy. N´asleduje jejich z´akladn´ı popis a role v aplikaci. Podrobn´ y popis jednotliv´ ych metod a atribit˚ u tˇr´ıd je obsaˇzen v pˇr´ısluˇsn´ ych zdrojov´ ych k´odech aplikace. Namon - toto je hlavn´ı tˇr´ıda webov´e aplikace. Obsahuje jako atributy vˇsechna nastaven´ı programu, tato tˇr´ıda tak´e zodpov´ıd´a za pˇrihlaˇsov´an´ı uˇzivatele na u ´vodn´ı str´ance. Jako sv´e promˇenn´e obsahuje tˇr´ıdy Stats a Chart. Bˇehem bˇehu aplikace existuj´ı maxim´alnˇe dvˇe instance t´eto tˇr´ıdy - jedna pro celkov´e statistiky, druh´a pro TOP statistiky. Statistiky provozu jsou pro svou jednoduchost ˇreˇseny bez t´eto tˇr´ıdy. V aplikaci tato tˇr´ıda pˇredstavuje vˇzdy cel´e okno 75
statistik (TOP, celkov´e). Mezi jednotliv´ ymi str´ankami je tato tˇr´ıda se vˇsemi promˇenn´ ymi pˇred´av´ana pomoc´ı techniky sessions. Stats - tato tˇr´ıda v aplikaci pˇredstavuje tu ˇc´ast formul´aˇre, kde prob´ıh´a vyb´ır´an´ı jednotliv´ ych omezen´ı grafu. Poˇcet tˇechto ˇca´st´ı m˚ uˇze b´ yt v´ıce (pˇrid´an´ı pomoc´ı tlaˇc´ıtka Pˇ ridat), kaˇzd´a tato ˇca´st formul´aˇre pak odpov´ıd´a jedn´e instanci t´eto tˇr´ıdy. Tˇr´ıda obsahuje metody na kontrolu uˇzivatelsk´eho vstupu tohoto formul´aˇre. Chart - tˇr´ıda zodpovˇedn´a za vykreslov´an´ı graf˚ u a v´ ysledn´ ych tabulek. ´ Ukolem t´eto tˇr´ıdy je nastaven´ı spr´avn´eho mˇeˇr´ıtka, spr´avn´ ych popisk˚ u grafu a vyvol´an´ı spr´avn´eho dotazu pomoc´ı tˇr´ıdy Query, kter´a je souˇc´ast´ı t´eto tˇr´ıdy jako jej´ı promˇenn´a. V z´aloˇzce celkov´ ych statistik existuje jen jedna instance(prob´ıh´a vypisov´an´ı v´ıce kˇrivek do jednoho grafu), v TOP statistik´ach pak pˇr´ıpadnˇe v´ıce (kaˇzd´a statistika m´a sv˚ uj vlastn´ı graf). Query - tˇr´ıda zodpovˇedn´a za vytv´aˇren´ı spr´avn´ ych dotaz˚ u do datab´aze v z´avislosti na vstupu uˇzivatele. V´ ysledky dotaz˚ u se ukl´adaj´ı do doˇcasn´ ych pomocn´ ych tabulek, vzhledem k nutnosti pracovat s tˇemito daty v´ıcekr´at. Proto tˇr´ıda obsahuje metody na pr´aci s touto tabulkou vˇcetnˇe jej´ı zruˇsen´ı. Kromˇe tˇechto tˇr´ıd obsahuje aplikace nˇekolik obecn´ ych pomocn´ ych funkc´ı obsaˇzen´ ych v souboru functions.php.
B.6.3
Zdrojov´ e soubory
Aplikace je ˇclenˇena do nˇekolika zdrojov´ ych soubor˚ u a adres´aˇrov´e struktury, jak lze vidˇet na obr´azku B.4. N´asleduje popis v´ yznamu jednotliv´ ych soubor˚ u. V tomto manu´alu nejsou v´ıce rozebr´any jednotliv´e funkce programu, jejich popis je vˇzdy k nalezen´ı v pˇr´ısluˇsn´em zdrojov´em souboru. calendar.ini - obsahuje HTML k´od potˇrebn´ y pro zobrazen´ı kalend´aˇre. Je inkludov´an soubory stats.php, statstop.php a health.php. chart.php - obsahuje tˇr´ıdu Chart, nejedn´a se o samostatnou str´anku. editform.php - tato str´anka slouˇz´ı pro vyvol´an´ı pˇr´ısluˇsn´ ych rutin pˇri pˇrid´av´an´ı a odeb´ır´an´ı statistik ve formul´aˇri, slouˇz´ı tak´e k vyvol´an´ı obnoven´ı str´anky po kliknut´ı na tlaˇc´ıtka Pˇ ridat a Odebrat. foot.ini - obsahuje HTML k´od z´ahlav´ı str´anky. Je includov´an ve vˇsech souborech slouˇz´ıc´ıch k v´ ystupu. functions.php - obsahuje obecn´e funkce pouˇzit´e v cel´e aplikaci. 76
Obr´azek B.4: Seznam zdrojov´ ych soubor˚ u webov´eho rozhran´ı header.ini - obsahuje HTML k´od hlaviˇcky str´anky. Je includov´an ve vˇsech souborech slouˇz´ıc´ıch k v´ ystupu. health.php - jedn´a se o k´od str´anku obsahuj´ıc´ı provozn´ı statistiky. help.php - jedn´a se o k´od str´anky obsahuj´ıc´ı n´apovˇedu. index.php - u ´vodn´ı obrazovka webov´eho rozhran´ı. Na t´eto str´ance doch´az´ı po u ´spˇeˇsn´em pˇrihl´aˇsen´ı k inicializaci sessions, tˇr´ıdy namon a k pˇresmˇerov´an´ı uˇzivatele na str´anku stats.php. menu.php - pˇredstavuje menu webov´e aplikace. Tento soubor je includov´an ve vˇsech souborech slouˇz´ıc´ıch k v´ ystupu. namon.php - obsahuje zdrojov´ y k´od tˇr´ıdy namon, nejedn´a se o samostatnou str´anku. 77
query.php - obsahuje zdrojov´ y k´od tˇr´ıdy query, nejedn´a se o samostatnou str´anku. statclass.php - pˇredstavuje str´anku slouˇz´ıc´ı k zobrazov´an´ı TOP statistik. stats.php - pˇredstavuje str´anku slouˇz´ıc´ı k zobrazov´an´ı celkov´ ych statistik, tato str´anka se naˇc´ıt´a po u ´spˇeˇsn´ım pˇrihl´aˇsen´ı. statstop.php - pˇredstavuje str´anku slouˇz´ıc´ı k zobrazov´an´ı TOP statistik.
78
Pˇ r´ıloha C Obsah pˇ riloˇ zen´ eho CD . |-- [src] - zkomprivan´ y zdrojov´ y k´ od obou ˇ c´ asti aplikace | ‘-- namon.tar.gz ‘-- [doc] - text bakal´ aˇ rsk´ e pr´ ace v r˚ uzn´ ych form´ atech |-- bakalarska_prace.pdf |-- bakalarska_prace.ps ‘-- bakalarska_prace.dvi