Kiekviename tinkle, mažas ar didelis jis, kyla poreikis stebėti, bei surinkti informaciją apie į tinklą ar iš jo išeinančius duomenų srautus. Surinktą duomenų srautų informaciją galima panaudoti nustatant įprastus tinklo duomenų srautų kiekius (anlg. baseline), pasiskirstomus pagal tinklo protokolus ar tiesiog gauti daugiau informacijos apie tai, kas vyksta pačiame tinkle.
Šiuo atveju turime dvi galimybes, kaip surinkti šiuos duomenis ir panaudoti analizei. Vienas iš jų – visą duomenų srautą tiesiog surinkti (angl. sniffing ) ir išsaugoti, mūsų pačių pasirinktam laiko tarpui. Toks būdas yra ypač detalus ir leidžia tiksliai išanalizuoti tinklu keliaujančius duomenų paketus. Dažniausiai yra naudojamas saugumo analitikų, analizuojant ir ieškant nežinomų tinkle grėsmių, ar taip pačiai prevencijai. Didžiausias minusas – reikalingos talpios duomenų saugyklos, nes surenkami ne tik srautai, bet ir patys tinklu keliaujantys duomenys per pasiriktą ilgesnį laiko tarpą. Tačiau tokios informacijos yra šiek tiek per daug, jei tikslas yra tik matyti pačius srautus ir jų kiekius.
Todėl renkamės kitą alternatyvų variantą, kurio pagrindas yra pagrįstas NetFlow ar sFlow protokolais. Būtent šie protokolai yra sukurti taip, kad jų pateikiama informacija apie tinkle esančius duomenų srautus nereikalautų didelių duomenų talpyklų. Nes duomenų surinkimas vykstą nustatytais laiko tarpais ir gaunama duomenų srauto informacija yra tik to laiko tarpo.
Dauguma naujų verslui skirtų tinklo įrenginių dabar palaiko bent vieną NetFlow ar sFlow tipo protokolą ir leidžia, panaudojant programinę įrangą, surinkti duomenų srautų informaciją. Iš surinktos informacijos galima matyti tinkle veikiančių programų ar protokolų duomenų srautų pasiskirstymą ir tam tikras tendencijas.
Duomenų srautų analizės nauda
Kad tinkamai atlinkti duomenų analizę, reikalinga surinkti pakankamai duomenų per tam tikrą laikotarpį. Dažnai toks trumpiausias laikotarpis yra savaitė. Iš šiame laikotarpyje surinktų duomenų srautų, jau bus galima matyti tam tikras tinkle veikiančių programų ar protokolų srautų tendencijas. Bet kokie aukšti ar ypač žemi duomenų srautų kreivės pakitimai, turi būti išsiaiškinti dėl galimų dabartinių ar ateityje išskilsiančių tinkle problemų. Tačiau jei šie nuokrypiai yra žinomi nuo įprastų tinklo srautų tendencijų, juos galima laikyti norma.
Analizuojant surinktus duomenis iš visų srautų galima išskirti tam tikrų protokolų ar programą, kaip pavyzdžiui interneto „debesijos“ programų pvz. dropbox, torrent ir t.t. Žinant kiek, tinkle veikiančios programos ar protokolai, sunaudoja tinklo resursų galima matyti šių programų įtaką bendram tinklo našumui. Taip pat galima stebėti kiek naujai tinkle įdiegtos paslaugos, įtakos pačio tinklo našumą.
Paskutinis dalykas, kurį reikia įvertinti analizuojant tinklo srautų duomenis yra pačio tinklo fizinės ar loginės struktūros pokyčiai. Tinklo įrenginio keitimas ar atnaujinimas, naujos darbinės stoties ar naujų programų/paslaugų pridėjimas, visada turės įtakos įprastų srautų duomenų kiekiams. Todėl reiktų atsižvelgi tai surenkant duomenis ir galbūt numatyti ilgesnį duomenų surinkimo laiką.
NfSen ir Nfdump
Tinklo srautų duomenų analizei naudosime NfSen programinį paketą, kuris yra skirtas vizualiai atvaizduoti gautus duomenis. Jo pagalba galima lengvai stebėti duomenų srautus, juos filtruoti ir atvaizduoti pagal pasirinktus tinklo protokolus ar prievadus. Esant poreikiui galima sukurti įspėjimus, kurie bus siunčiami į nurodytą el. pašto adresą, apie viso stebimo duomenų srauto arba individualių duomenų srautų pokyčius.
Tačiau duomenų NfSen nesurenka. Surinkimui yra naudojamas nfdump įrankis, kuris yra paleidžiamas tarnybinėje stotyje kaip paslauga. Veikianti paslauga nustatytais laiko intervalais surenka NetFlow duomenis iš tinklo įrenginio, juos išsaugo tarnybinėje stotyje, kur NfSen gali laisvai pasiekti ir atvaizduoti. Taip pat verta paminėti nfdump programa gali surinkti sFlow duomenis (pvz.CISCO), palaiko visas NetFlow versijas (v1, v5/v7,v9), bei naująjį IPv6 kompiuterių tinklo standartą.
Diegimas
Aplinka, kurioje diegsime bus Linux OS (CentOS 7.x distribucija) ir Mikrotik tinklo įranga. Aplinka jau bus paruošta lieka tink įdiegti NfSen ir nfdump, bei nustatyti pirminius parametrus tinklo įrenginyje, iš kurio bus surenkami tinklo duomenų srautai.
Reikalingi EPEL programiniai paketai, todėl įsidiegiame EPEL.
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
Atnaujiname CentOS 7.x ir išjungiame SELinux
yum clean all && yum update
vi /etc/selinux/config
SELINUX=disabled
Pekrauname CentOS 7.x serverį ir užkrovus patikriname ar SELinux išjungtas (anlg. disabled).
sestatus
SELinux status: disable
Diegimo ir testavimo metu išjungiame ugniasienę.
systemctl stop firewalld
systemctl disable firewalld
Toliau sudiegsime visus reikalingus programinius paketus.
yum install -y httpd php wget gcc make rrdtool-devel rrdtool-perl perl-mailtools perl-socket6 flex byacc
yum install -y perl-sys-syslog perl-data-dumper policycoreutils-python
Pridedame naują vartotoją „netflow“, kurį priskirsime paslaugos paleidimui.
useradd -m -g apache -s /bin/false netflow
Sukuriame katalogus NfSen duomenims saugoti ir atvaizduoti
mkdir -p /data/nfsen
mkdir -p /var/www/html/nfsen
Atsisiunčiame NfSen ir bfdump ir išsaugome /opt kataloge.
cd /opt/
wget https://downloads.sourceforge.net/project/nfsen/stable/nfsen-1.3.8/nfsen-1.3.8.tar.gz
wget https://downloads.sourceforge.net/project/nfdump/stable/nfdump-1.6.13/nfdump-1.6.13.tar.gz
Sukompiliuojame Nfdump su galimybe stebėti CISCO tinklo įrenginių tinklo srautus.
tar zxf nfdump-1.6.13.tar.gz
./configure --enable-nfprofile --enable-nftrack --enable-sflow
make && sudo make install
Susikonfigūruojame NfSen
tar zxf nfsen-1.3.8.tar.gz
cd nfsen-1.3.8
cd etc
cp nfsen-dist.conf nfsen.conf
vi nfsen.conf
# Nurodome kelius iki NfSen katalogų, kuriuos sukūrėme anksčiau
$BASEDIR= "/data/nfsen";
$HTMLDIR = "/var/www/nfsen";
# CentOS operacinėje sistemoje reikia pakeisti
$WWWUSER = "apache";
$WWWGROUP = "apache";
# Nurodome duomenų srautų šaltinius. Šiuo atveju Mikrotik maršrutizatorius R01
%sources = (
'R01' => { 'port' => '9995', 'col' => '#de5d42','IP' => '10.10.10.253', 'type' => 'netflow' },
);
Paleidžiame pradinius NfSen programos paketo nustatymus.
cd ..
sudo ./install.pl etc/nfsen.conf
Sukuriame Apache nfsen.conf failą, kad pasiekti NfSen svetainę.
vim /etc/httpd/conf.d/nfsen.conf
AllowOverride None
Require all granted
Alias /nfsen "/var/www/nfsen"
systemctl enable httpd
systemctl restart httpd
Sukuriame NfSen automatišką paleidimą perkrovus sistemą.
vim /etc/systemd/system/nfsen.service
[Unit]
Description=NfSen Service
After=network.target
[Service]
Type=forking
PIDFile=/data/nfsen/var/run/nfsend.pid
ExecStart=/data/nfsen/bin/nfsen start
ExecStop=/data/nfsen/bin/nfsen stop
Restart=on-abort
[Install]
WantedBy=multi-user.target
Ir aktyvuojame NfSen paslaugą.
systemctl enable nfsen
systemctl start nfsen
Konfigūruojame Mikrotik maršrutizatorių R01
Pirmiausia tinklo įrenginyje apsirašote ugniasienės taisyklę, kuri leidžia srautą į jūsų NfSen tarnybinę stotį ir prievadą 9995.
Toliau aprašome Mikrotik komandinėje eilutėje.
/ip traffic-flow
set cache-entries=2k enabled=yes inactive-flow-timeout=15m
/ip traffic-flow target
add dst-address=192.168.251.100 port=9995
Atveriame naują naršyklės langą ir stebime duomenų srautus
http://{jusu_ip_adresas}/nfsen/nfsen.php
nfcapd programa pagal nutylėjimą duomenų srautų failus saugo kataloge /data/nfsen/profiles-data/. Šiuos failus galima peržiūrėti naudojant nfdump programą.
nfdump –r /data/nfsen/profiles-data/live/R01/2019/03/01/nfcapd.201903011405
NfSen duomenų srautų profiliai
NfSen internetinėje aplinkoje galima kurti atitinkamus duomenų srautų profilius, pagal sukurtus filtrus.
Sukursime duomenų srauto profilį maršrutizatoriui R1 ir surinksime visą duomenų srautą išeinantį/įeinantį į tinklo įrenginio prievadą, kuris yra prijungtas prie interneto paslaugų tiekėjo.
Pirmiausia reikia sužinoti kaip tinklo įrenginio prievadas yra žymimas pagal SNMP.
Mūsų pasirinktas prievadas RouterOS sistemoje yra matomas kaip ether2. Todėl ieškosime ifDescr ir atitinkamo ifIndex.
Šiuo atveju MIBs žymimas kaip 6. Tai reiškia, kad tinklo įrenginio prievadas ether2 yra indeksuojamas kaip numeris 6. Šį tinklo prievadą ir apsirašysime NfSen.
Sukuriame naują profilį NfSen interneto svetainėje spaudžiam ties Live – > New Profile. Atsivėrusiame lange užpildome įvesties laukelius. Laukeliuose Channels: pasirenkame Individual channels, o laukelyje Type: pasirenkame Shadow Profile. Ši parinktis sutaupys disko vienos, nes bus naudojamas tas pats duomenų srautas kaip ir live profilio. Source laukelyje pasirenkame jūsų aprašytą tinklo maršrutizatorių R01 ir spaudžiame Create Profile.
Sukūrus naują profilį atsiveria naujas langas. Dabar reikės sukurti tinklo du srautų kanalus, kurie atvaizduos pasirinktas duomenų srautų kryptis. Šalia Channel List spaudžiame plius ženklą ir naujai atsidariusiame lange užpidome įvesties laukelius. Channel name įrašome Ethernet2_IN (įeinančiam duomenų srauto pavadinimui), o Filter: laukelyje įvesime tinklo įrenginio prievado kryptį ir indeksuojamą numerį: in if 6. Galiausiai Source: pasirinksite R01 ir paspausite >>, kad pridėtų į Seleted Source. Paspaudus Add Channel bus sukurtas duomenų srauto kanalas.
Analogiškai reikia sukurti dar vieną, kad atvaizduoti išeinančių duomenų srautus. Channel name įrašome Ethernet2_OUT, o Filter: laukelyje įvesime tinklo įrenginio prievado kryptį ir indeksuojamą numerį: out if 6. Galiausiai Source: pasirinksite R01 ir paspausite >>, kad pridėtų į Seleted Source. Paspaudus Add Channel bus sukurtas duomenų srauto kanalas.
Galutinis vaizdas turėtų būti toks.
Filtruojame tinklo protokolus
Sukursime dar vieną duomenų srautų profilį maršrutizatoriui R1 ir išskirsime tinklo protokolus iš to pačio duomenų srauto.
Sukuriame naują profilį NfSen interneto svetainėje spaudžiam ties Live – > New Profile. Atsivėrusiame lange užpildome įvesties laukelius. Laukeliuose Channels: pasirenkame Individual channels, o laukelyje Type: pasirenkame Shadow Profile. Ši parinktis sutaupys disko vienos, nes bus naudojamas tas pats duomenų srautas kaip ir live profilio. Source laukelyje pasirenkame jūsų aprašytą tinklo maršrutizatorių R01 ir spaudžiame Create Profile.
Sukūrus profilį atsiveria naujas langas. Dabar reikės sukurti tinklo srautų kanalus, kurie atvaizduos pasirinktus tinklo protokolus. Šalia Channel List spaudžiame plius ženklą ir naujai atsidariusiame lange užpildome įvesties laukelius. Channel name įrašome HTTP, o Filter: laukelyje įvesime filtrą proto tcp and ( dst port 80 ). Laukelyje Source: pasirinksite R01 ir paspausite >>, kad pridėtų į Seleted Source. Paspaudus Add Channel bus sukurtas HTTP duomenų srauto kanalas.
Galutinis vaizdas toks.
Analogiškai norit išskirti kitus tinklo protokolus reikia tame pačiame profilyje pridėti naujus srauto kanalus su atitinkamais filtrais. Šių filtrų pavyzdžiai:
proto tcp and ( dst port 443 )
proto udp and ( dst port 53 )
proto tcp and ( dst port 25 or dst port 587 )
proto tcp and ( dst port 22 )
proto tcp and ( dst port 143 )
FTP protokolą išfiltruoti yra šiek tiek sudėtingiau. Dažniausiai naudojamas IP adresas (jei tai tinklo vidinė FTP paslauga).
src port > 1024 and dst host 192.168.110.200
Daugiau filtravimo galimybių iškokite NfSen įrankio dokumentacijoje, nes ten jų labai daug.