Netflow
Sisukord
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
- lähte IP aadress (source IP address)
- sihtpunkti IP aadress (destination IP address)
- lähteport (UDP või TCP port)
- sitpunkti port (destination port (UDP või TCP port)
- IP protokoll
- andmete sisenemise võrguseade (ingress interface)
- 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 utiliitide kasutamise ettevalmistamine
rfdump http://nfdump.sourceforge.net/ tarkvara võimaldab koguda netflow allikatest andmeid ja neid analüüsida, komplekti kuuluvad programmid
- rfcapd - netflow koguja, töötab deemonina protsess
- rfdump - kogutud netflow andmetest päringute tegemine, käsurealt käivitatav utiliit
rfdump utiliitide 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.200912312255 -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.200912312255 - 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 failisüsteemi paigutatud sisendi töötlemise tulemusena 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 andmeid analüüsida, nt esitada erinevates vaadetes graafikuid.
Live profiiliga töötamine
NfSen kasutamisel toimub alati töö mingi profiiliga, vaikimisi on olemas ainult Live profiil. Ü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
Konkreetselt Live profiilil 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/
Profiilide moodustamine
Profiile moodustatakse netflow andmetele erinevate vaadete moodustamiseks, nt
- teenuse järgi - veebiserveritega seotud liiklus
- võrgu järgi - kohtvõrgu arvutitega seotud liiklus
Alertide seadistamine
TODO
Kasulikud lisamaterjalid
- http://kuutorvaja.eenet.ee/wiki/Nfsen
- http://nfsen.sourceforge.net/
- http://nfdump.sourceforge.net/
- http://en.wikipedia.org/wiki/Netflow
- http://oss.oetiker.ch/rrdtool/pub/rrdtool-1.2.22.tar.gz
- http://www.securityfocus.com/infocus/1796 - esimene osa
- http://www.securityfocus.com/infocus/1802 - teine osa
- http://www.youtube.com/watch?v=oipMSiBWB08
- http://www.team-cymru.org/