Netflow

Allikas: Kuutõrvaja
Redaktsioon seisuga 2. jaanuar 2010, kell 01:31 kasutajalt Imre (arutelu | kaastöö) (Profiilide moodustamine)

Sissejuhatus

Netflow abil saab analüüsida läbi võrgusõlme toimunud andmevahetust kasutades L3 ja L4 kihtidele vastavaid andmeid, st kasutades andmevahetust pidanud osaliste ip aadresse, portide numbreid ja protokolle (TCP, UDP, ICMP). Tavaliselt leiab Netflow kasutust sellistel eesmärkidel

  • liikluse mahtude üle arvepidamine - nt kontrollida, kas mõni arvutivõrgu kasutaja ei ole otsustanud kasutada tööalaseks kasutuseks ettenähtud võrguressurssi isiklikeks vajadusteks
  • turvalisus - vahel viitab liikluse iseloom turvaprobleemile, nt kui mõni kohtvõrgu arvuti teeb teatud ajavahemikel suurel hulgal erinevatel ip aadressidele ühendusi, siis võib arvutis töötada pahalane

Netflow protokolli on arendanud Cisco Systems ning seda toetavad lisaks Cisco seadmetele ka mitmete muude tootjate seadmed ja samuti nt Linux, BSD ja Solaris operatsioonisüsteemid. Netflow protokollist on levinud mitmeid versioone, 2010 aasta alguses on põhiliselt kasutuses v5, vähesel määral ka v9. Seejuures tuleb arvestada, et erinevatel juhtumitel võib olla protokolli toetus implementeeritud erineval määral.

Netflow andmete kasutamiseks on tavaliselt kaks moodust

  • nn käsurea utiliidid - väljund on nt teksti kujul, mida on mugav kasutada edasiseks nö masintöötluseks; käsurea utiliitidega abil saab kogutud netflow kohta esitada süsteemile väga täpseid küsimusi
  • visuaalsed vahendid - tulemused esitatakse graafiliselt, mida on mugav kasutada süsteemi operaatoril võrgusõlmes toimuvast ülevaate saamiseks

Tööpõhimõte

Ühe netflow moodustavad selliste omadustega ühes suunas liikuvad paketid

  1. lähte IP aadress (source IP address)
  2. sihtpunkti IP aadress (destination IP address)
  3. lähteport (UDP või TCP port)
  4. sitpunkti port (destination port (UDP või TCP port)
  5. IP protokoll
  6. andmete sisenemise võrguseade (ingress interface)
  7. ToS tüüp (IP Type of Service)

Seega, nt ühele kahe osalise vahel toimunud nö tavalisele tcp ühendusele vastab kaks netflow'd. Netflow kogumist toetavad võrguseadmed salvestavad netflow andmeid netflow record'ite kujul, nt OpenBSD v 4.6 ruuteris kogutud tcp ühendusele vastav netflow record on selline

 Flow Record: 
   Flags       =       0x00000000
   size        =               52
   mark        =                0
   srcaddr     =       10.0.71.73
   dstaddr     =    192.168.1.239
   first       =       1261995550 [2009-12-28 12:19:10]
   last        =       1261995561 [2009-12-28 12:19:21]
   msec_first  =              248
   msec_last   =              248
   dir         =                0
   tcp_flags   =             0x 0 ......
   prot        =                6
   tos         =                0
   input       =                0
   output      =                0
   srcas       =                0
   dstas       =                0
   srcport     =             1699
   dstport     =               80
   dPkts       =               30
   dOctets     =             1853

kus

  • srcaddr -lähte ip aadress
  • dstaddr - sihtpunkti ip aadress
  • tcp_flags - OpenBSD netflow ei sisalda 2009 aasta lõpus andmeid TCP lippude kohta

Oluline on tähelepanna, et erinevate seadmete poolt kogutud Netflow võib sisaldada pisut erinevaid andmeid, nt AS numbri olemasolu osas.

Skeem

Netflow kasutamisel esinevad tavaliselt kolme sorti osalised

  • netflow allikad - nt BSD või Linux tulemüür, Cisco ruuter
  • netflow kogujad - tavaliselt sisaldub skeemis üks netflow koguja (ingl. k. collector), nt Debian Linux ja nfdump tarkvara
  • netflow analüsaator - nt NfSen PHP kasutajaliidesega rakendus, mis tegelikult juhib ka netflow kogumist
             _____  
            |     |  NfSen - analüsaator
            |_____|  nfdump - netflow koguja
   9995/udp    |
               |
               |
     ---|------|-----------|-------------------|-----
        |                  |                   |
      __|__              __|__               __|__
     |     |            |     |             |     |
     |_____|            |_____|             |_____|
 
           OpenBSD tulemüürid - netflow allikad

kus

  • allikad saadavad kogujale udp pakettide vormis andmeid, vaikimisi pordile 9995/udp
  • koguja salvestab iga 5 minuti tagant saabunud andmed järgmisse nn nfdump formaadis faili

Netflow kasutamise tulemusena saavad vastused sellised küsimused

  • kui suur andmevahetuse maht (mitu ühendust st flow'd, mitu baiti, mitu paketti) käis etteantud ajavahemiku jooksul läbi võrgusõlme võrguseadme (ingl. k. interface)
  • kui suur oli andmevahetuse maht protokollide, ip aadressite ja portide kaupa (vastuseid esitades saab kasutada erinevaid järjestamisi, nt esitada mahtude kahanemise järjekorras; lisaks agregeerida esitust mingitele tunnustele vastavalt, nt mitte eristada osalisi ip aadresside täpsusega, vaid /24 subnettide kaupa)
  • kui palju toimus ssh ühendusi tulemüüri taga ja avalikus võrgus olevate arvutite vahel

Sõltuvalt sellest, kas konkreetsel kasutusjuhtumil on toetatud tcp_flags või mitte, saab otsekohesemal või vähem otsekohesemalt jälgida tcp ühenduste algatamisi.

Netflow allika ettevalmistamine

Netflow allika ettevalmistamine tähendab mingis võrgusõlmes töötava võrguseadme tööleseadmist selliselt, et ta lisaks oma nö põhitegevusele moodustaks Netflow andmeid ja saadaks neid üle võrgu Netflow kogujale.

OpenBSD allika ettevalmistamine

Alates versioonist 4.5 saab OpenBSD tulemüürist väljastada netflow andmeid.

Paketifiltri seadistamine

Paketifilter võimaldab netflow'd saata nö pass reegli täpsusega kasutades pflow parameetrit, nt

 pass in quick inet proto tcp from 10.0.6.174 to any port { 80, 443 } keep state (pflow) label "JSint from 10.0.6.174 to any port 80 443"

Kui reeglites ei ole imlutatult state omadusi täpsustatud, siis vaikimisi saab kõigi pass reeglite jaoks pflow sisse lülitada kasutades

 set state-defaults pflow
Netflow väljastamine

Sõnumite saatmiseks tuleb öelda kuhu sõnumeid saata

 # ifconfig pflow0 flowsrc 192.168.10.210 flowdst 192.168.10.51:9995

Lisaks tuleb lubada vastav liiklus arvutist välja. Sõnumite liiklusmises saab veenduda liiklust kuulates

 # tcpdump -nei pflow0                                               
 tcpdump: listening on pflow0, link-type RAW
 17:14:15.813705 ip: 192.168.10.210.62379 > 192.168.10.51.9995: udp 1464 (DF) [tos 0x10]

FreeBSD allika ettevalmistamine

FreeBSD pfflowd http://www.mindrot.org/projects/pfflowd/ tarkvara

  • kogub packet filteri status messageid
  • teisendab nad cisco netflow formaati
  • saadab kasutades udp protokolli üle võrgu kogujale
Tarkvara paigaldamine

Netflow infot kogutakse vaid keep state reeglite kohta.

Tarkvara paigaldamiseks tuleb öelda

# cd /usr/ports/net/pfflowd/
# make
Paketifiltri seadistamine

pfflowd vajab enda tööks pfsync'i millelt infot koguda, selle kasutamiseks on tarvilik teha uus kernel järgnevate devicedega

device pf
device pfsync
device pflog
Netflow väljastamine

Netflow väljastamiseks peab /etc/rc.conf sisaldama pfflowd ja pfsync käivitamiseks selliseid ridu

pfflowd_enable="YES"
pfflowd_host="192.168.1.2:9995" # nfseni serveri ip ja port
pfsync_enable="YES"
pfsync_syncdev="msk0" #võrguseade mille liikluse flosid saadetakse

Cisco allika ettevalmistamine

Cisco võrguseadme iga interfacele, millele vastavat andmeliikluse infot koguda soovitakse tuleb öelda

ip cef
interface e0/0
  ip route-cache flow
  no ip mroute-cache

kus

  • ip cef - ...
  • interface e0/0 - töötatakse e0/0 interface'iga
  • ip route-cache flow - ...
  • no ip mroute-cache - ...

Seejärel tuleb näidata netflow versioon ning ip aadress ja porti kuhu netflow saadetakse

ip flow-export version 5 peer-as bgp-nexthop
ip flow-export destination 192.168.1.2 9995

kus

  • version 5 peer-as bgp-nexthop -
  • destination 192.168.1.2 9995 - edastada netflow andmed aadressile 192.168.1.2:9995/udp aadressile

rfdump tarkvara kasutamise ettevalmistamine

rfdump http://nfdump.sourceforge.net/ tarkvara võimaldab koguda, st võtta võrgust vastu ja salvestada kohalikku failisüsteemi netflow allikatest andmeid ja neid analüüsida, komplekti kuuluvad programmid

  • rfcapd - netflow koguja, töötab deemonina
  • rfdump - kogutud netflow andmete põhjal päringute tegemine, käsurealt kasutatav utiliit

rfdump tarkvara paigaldamine

Debian GNU/Linux operatsioonisüsteemis paigaldatakse tarvkara

 # apt-get install nfdump

OpenBSD operatsioonisüsteemis paigaldatakse tarkvara

 # pkg_add nfdump

FreeBSD operatsioonisüsteemis paigaldatakse tarkvara

 # TODO

rfcapd kasutamine

rfcapd käivitamine toimub nt Debian GNU/Linux operatsioonisüsteemis skriptiga

 /etc/init.d/nfdump stop|start

ning andmed kogunevad kataloogi

 /var/cache/nfdump

Omakäeliselt nfcapd käivitamiseks sobib nt öelda, /tmp/nfdata kataloog peab olemas olema

 # nfcapd -z -w -l /tmp/nfdata -S "%Y/%m/%d/%H"

rfdump kasutamine

nfcapd deemon salvestab on tegevuse tulemusena 5 minutiliste vahedega saabunud andmeid erinevatesse aega sisaldavate failinimedega failidesse, nt mõnda aega töötanud nfcapd on Debianis moodustanud sellised failid

 TODO

Kogutud Netflow andmeid saab analüüsida programmiga nfdump.

Top N esitamine

Netflow kasutamisele kõige iseloomulikum on küsida ajavahemikule vastava liikluse Top N flowde nimekirja, vaikimisi esitatakse kümme tulemust

 # nfdump -R 2009/12/31/nfcapd.200912310000:2009/12/31/nfcapd.200912312355 -s record/bytes -n 10
 Aggregated flows 4251841
 Top 10 flows ordered by bytes:
 Date flow start          Duration Proto      Src IP Addr:Port          Dst IP Addr:Port   Packets    Bytes Flows
 2009-12-30 19:28:20.274 39367.000 TCP    192.168.252.122:1450  ->       10.0.5.100:40186   66.6 G  892.4 G   224
 2009-12-31 14:51:08.278  1567.000 TCP         10.11.4.12:22    ->       10.0.5.100:38935    1.3 G  118.2 G    30
 2009-12-30 19:28:20.274 39367.000 TCP         10.0.5.100:40186 ->  192.168.252.122:1450   608.3 M   15.4 G     4
 2009-12-31 14:51:08.278  1567.000 TCP         10.0.5.100:38935 ->       10.11.4.12:22      75.2 M    4.7 G     2
 2009-12-31 14:08:04.277    48.000 TCP         10.11.4.12:22    ->       10.0.5.100:49937    2.3 M    3.1 G     2
 2009-12-31 05:41:20.274   208.000 TCP    192.168.109.135:22    ->   192.168.33.112:11875    1.4 M    2.0 G     1
 2009-12-31 13:48:26.277    27.000 TCP         10.11.4.12:22    ->       10.0.5.100:60071    1.0 M    1.4 G     2
 2009-12-30 12:57:47.277 92300.000 TCP      192.168.234.1:80    ->    192.168.2.118:25773   824526    1.1 G     1
 2009-12-30 14:25:02.276 75704.000 TCP    192.168.103.254:22    ->    192.168.2.131:56206   965532  949.6 M     1
 2009-12-31 05:31:44.274   452.000 TCP     192.168.160.11:873   ->     172.16.32.82:54346   607032  868.0 M     2
 
 Summary: total flows: 6555930, total bytes: 1.1 T, total packets: 68.7 G, avg bps: 2.0 M, avg pps: 16024, avg bpp: 16
 Time window: 2009-12-28 08:55:55 - 2010-02-19 15:50:06
 Total flows processed: 6555930, Records skipped: 0, Bytes read: 340914876
 Sys: 5.468s flows/second: 1198888.3  Wall: 12.336s flows/second: 531435.3  

kus esitatud küsimuses

  • -R 2009/12/31/nfcapd.200912310000:2009/12/31/nfcapd.200912312355 - vaatlusalune aeg on 31. detsember 2009
  • -s record/bytes - esitada nn Top N väljund, järjestatuna baitides andmemahu järgi, kahanevalt
  • -n 10 - kümme esimest esitatud tingimustele antud vastusest

ja kus esitatud vastuse päises on kirjas, et 'Top 10 flows ordered by bytes:' st vastatakse nii nagu küsiti ning esimene rida tähendab

  • Date flow start (2009-12-30 19:28:20.274) - küsimuses esitatud tingimustele vastava vastuse esimese flow alguse aeg
  • Duration (39367.000) - küsimuses esitatud tingimustele vastava vastuse flowde kestus
  • Proto (TCP) - küsimuses esitatud tingimustele vastava vastuseks olevate flowde protokoll
  • Src IP Addr:Port (192.168.252.122:1450) - küsimuses esitatud tingimustele vastava vastuseks olevate flowde srcip:srcport väärtus
  • Dst IP Addr:Port (10.0.5.100:40186) - küsimuses esitatud tingimustele vastava vastuseks olevate flowde dstip:dstport väärtus
  • Packets (66.6 G) - küsimuses esitatud tingimustele vastava vastuseks olevate flowdele vastav andmevahetuse maht pakettides
  • Bytes (892.4 G) - küsimuses esitatud tingimustele vastava vastuseks olevate flowdele vastav andmevahetuse maht baitides
  • Flows (224) - mitu flowd vastas küsimuses esitatud tingimustele

Lisaks vastuse jaluses on öeldud, et

  • ajavahemikule vastavate flowde koguarv, mida analüüsis kasutati on 6555930
  • ajavahemikule vastav kogu andmevahetuse maht on 1.1 terabaiti
  • huvitav, mis 'Time window: 2009-12-28 08:55:55 - 2010-02-19 15:50:06' ülatub kaugele tulevikku

Netflow recordite esitamine

Kogutud Netflow recordite esitamineks sobib öelda

NfSen süsteemi ettevalmistamine Debian Lenniga

NfSen tarkvara kasutatakse sellistel eesmärkidel

  • netflow kogumise juhtimine - nfsend deemon
  • netflow analüüs - NfSen veebiliides
  • netflow analüüsil põhinevate alteride väljastamine - nfsend deemon

netflow koguja ettevalmistamine

NfSen tarkvara juhib iseseisvalt nfcapd deemonit, st netflow koguja ettevalmistamise osas piisab nfdump tarkvara paigaldamisest

 # apt-get install nfdump

NfSen analüsaatori ettevalmistamine

Paketihaldusest peavad olema paigaldatud

 # apt-get install apache2 php5 librrds-perl

Lisada süsteemi kasutaja:grupp, kelle õigustes NfSen deemon käima hakkab, nt

 # groupadd nfsen
 # useradd -g nfsen -m -d /home/nfsen nfsen

Enne installeerimist tuleb moodustada failisüsteemi vajalikud kataloogid

  • /srv/www/nfsen - veebiliidese osa
  • /srv/nfsen - nfsen mootor

ja seadistada Apache veebiserver näitame NfSeni aadressil /nfsen

 <VirtualHost 192.168.1.4:80>
   ServerName www.loomaaed.tartu.ee
   ServerAdmin webmaster@loomaad.tartu.ee
   DocumentRoot /srv/www
   ErrorLog /var/log/apache2/www.loomaaed.tartu.ee-error.log
   LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
   CustomLog /var/log/apache2/www.loomaaed.tartu.ee-access.log combined
 
   <Directory /srv/www/nfsen>  
     Options None
     AllowOverRide None
     Order Allow,Deny
     Allow from All
   </Directory>
 
 </VirtualHost>

NfSen tarkvara saab kopeerida aadressil http://nfsen.sourceforge.net/ toodud lingilt, seejärel sobib ta pakkida lahti nt /usr/src kataloogis juurkasutajana

 # cd /usr/src
 # tar zxf nfsen-1.3.2.tar.gz

Seejärel tuleb ettevalmistada sobiva sisuga NfSen seadistusfail /srv/nfsen/etc/nfsen.conf

 # cp nfsen-dist.conf nfsen.conf

kus on oluline üle vaadata sellised parameetrid

  • $BASEDIR = "/srv/nfsen"; - NfSen installatsioon asub selle kataloogi all, va veebiliidese osa
  • $HTMLDIR = "/srv/www/nfsen/"; - NfSen veebiliidese osa
  • $PREFIX = '/usr/bin'; - sealt kataloogist leiab NfSen nfdump utiliidid (nfcapd jt)
  • $USER = "nfsen"; - NfSen protsessid töötavad selle kasutajana, sh netflow kogumine nfcapd abil, mille NfSen käivitab)
  • $WWWUSER = "www-data"; - NfSen tahab teada, millise kasutaja:grupiga veebiserveri kasutajaliidesest korraldused tulevad
  • $WWWGROUP = "www-data";

Lisaks tuleb kirjeldada kus kuulatakse netflow allikaid

 %sources = (
   'tulemyyr1'    => { 'port'    => '9995', 'col' => '#0000ff', 'type' => 'netflow' },
   'tulemyyr2'    => { 'port'    => '9996', 'col' => '#ff0000', 'type' => 'netflow' },
   'tulemyyr3'    => { 'port'    => '9997', 'col' => '#00ff00', 'type' => 'netflow' }
 );

NfSen tarkvara paigaldamiseks tuleb öelda juurkasutajana

 # ./install.pl etc/nfsen.conf

Tulemusena NfSen protsesse ei käivita, asjassepuutuvad failid paigutatakse seadistusfailis näidatud kataloogidesse.

NfSen käivitamine

NfSen käivitamiseks sobib öelda

 # /srv/nfsen/bin/nfsen start

Töötavale NfSenile vastavad sellised protsessid

 # ps aux | grep nfsen
 nfsen  4204  0.0  0.2  15592  1424 ?  S  17:29   0:00 /usr/bin/nfcapd -w -D -I upstream1 -p 9995 -u nfsen -g www-data \
   -B 200000 -S 1 -l /srv/nfsen/profiles-data/live/upstream1 -P /srv/nfsen/var/run/upstream1.pid
 nfsen  4207  0.0  0.1  15592   604 ?  S  17:29   0:00 /usr/bin/nfcapd -w -D -I peer1 -p 9996 -u nfsen -g www-data \
   -B 200000 -S 1 -l /srv/nfsen/profiles-data/live/peer1 -P /srv/nfsen/var/run/peer1.pid
 nfsen  4209  0.1  3.4 125680 17736 ?  Ss 17:29   0:26 /usr/bin/perl -w /srv/nfsen/bin/nfsend
 nfsen  4210  0.0  2.4 120732 12388 ?  Ss 17:29   0:12 /srv/nfsen/bin/nfsend-comm

Töö käigus moodustab NfSen nt selliseid faile

 # find /srv/nfsen/ -mmin -1
 /srv/nfsen/profiles-stat/live/flows-month.png
 /srv/nfsen/profiles-stat/live/flows-year.png
 ...
 /srv/nfsen/profiles-data/live/peer1
 /srv/nfsen/profiles-data/live/peer1/2009/12
 /srv/nfsen/profiles-data/live/peer1/2009/12/28
 /srv/nfsen/profiles-data/live/peer1/2009/12/28/nfcapd.200912280000
 /srv/nfsen/profiles-data/live/peer1/nfcapd.current.4207

Sobib kasutada nt sellist kävitusskripti

 TODO

NfSen süsteemi ettevalmistamine FreeBSDga

Nfseni paigaldus FreeBSDle

Lisaks NfSen tarkvarale on vajalik paigaldada ka mingi PHP toega veebiserver, nt Apache. Seejärel võib peale portsude uuendamist installida nfseni järgnevalt

# cd /usr/ports/net-mgmt/nfsen
# make install clean

Kõigepealt tuleb teha seadistusfail korrektseks /usr/local/etc/nfsen.conf ning seejärel startida nfsen -R konfifail võtmega nii ,et ta initsialiseeriks end ja seadistaks profiili ja RRD failid.

# nfsen -R /usr/local/etc/nfsen.conf

ja siis võime serveri käivitada

# nfsen start

Tulemüürist tuleks avada udp 9995 port

Veebist peame ligipääsetavaks tegema kausta /usr/local/www/nfsen kus asub php's kirjutatud veebiliides flowde graafiliseks vaatamiseks ja päringute loomiseks.

Info mida kogutakse salvestakse kausta /usr/local/var/nfsen/profiles/live/flow-allika-nimi

Vaikimisi on defineeritud vaid üks source ja näites kasutame samuti ainult seda. Tegelikult pole nende arv piiratud ning neid võib lisada vastavalt vajadustele veel.

Nfsen uuendamine

Enne upgrademist on ehk tarvilin backupida varasem profiil, mida saab teha järgnevate käskudega

# cd /usr/ports/net-mgmt/nfsen/work/nfsen-snapshot-20060810/helpers
# ./mk_backup.sh /path/to/your/profilestatdir /path/to/backupdir

Projekti koduleht http://nfsen.sourceforge.net/

NfSen kasutamine

Tööpõhimõte

  • NfSen sisendiks on nfcapd abil kogutud Netflow andmed.
  • NfSen väljundiks on vastavalt NfSen seadistustele sisendi töötlemise tulemusena failisüsteemi moodustatud failid - nfdump, rrd ja png formaadis.
  • NfSen väljundi moodustamist juhivad profiilid, mida saab NfSen veebiliidesest seadistada.
  • Brauserist ligipääsetav kasutajaliides võimaldab NfSen töö tulemusena kogutud ja töödeldud andmeid analüüsida, nt esitada erinevates vaadetes graafikuid.

Live profiiliga töötamine

NfSen kasutamisel toimub alati töö mingi profiiliga. Üldiselt on profiil mingi kindlaksmääratud vaade Netflow andmetele ja ta on määratud selliste omadustega

  • profiili nimi - selle abil saab kasutajaliideses erinevate profiilide vahel valida
  • profiili tüüp - määrab, kas profiiliga seotud andmeid salvestatakse failisüsteemis ja kui kaua neid säilitatakse
  • profiiliga filtrid - milliseid filtreid seoses profiiliga kasutatakse; filtrite abil nö sõelutakse kõigist NfSen sisendisse laekunud andmetest välja antud profiiliga seoses huvipakkuvad andmed

Vaikimisi on olemas ainult Live profiil, millel on need väärtused sellised

  • profiili nimi - Live
  • profiili tüüp - Continuous
  • profiili filtrid - filtreid ei ole rakendatud

NfSen kasutamine toimub veebipõhise haldusliidese abil aadressil http://www.loomaaed.tartu.ee/nfsen/

Nfsen-1.gif

Profiilide moodustamine

Profiile moodustatakse netflow andmetele erinevate vaadete moodustamiseks, nt

  • teenuse järgi - veebi, eposti ja nimeteenusega seotud liiklus
  • võrgu järgi - kohtvõrgu, wifi leviala ja serverite võrgusegmendi arvutitega seotud liiklus

Alertide seadistamine

TODO

Kasulikud lisamaterjalid