Tematem przewodnim zajęć jest zbieranie informacji o ruchu sieciowym. \\
Do części zajęć przyda się ruch sieciowy wygenerowany w trakcie zajęć. \\
Stąd na początku zajęć skonfiguruj zbieranie informacji o ruchu.
==== Konfiguracja potrzeba do drugiej części zajęć ====
- Skonfiguruj router Mikrotik:
* stwórz mostek na 2 interfejsach (eth2 i eth3)
* dodaj klienta DHCP na interfejsie eth1
* dodaj adres IP z wybranej przez siebie sieci lokalnej do mostka
* uruchom serwer DHCP na mostku:
* stwórz pulę adresów w ''IP'' / ''Pool''
* dodaj sieć lokalną w ''IP'' / ''DHCP Server'' / ''Networks'' z bramą przez router
* dodaj serwer DHCP na mostku przydzielający adresy z wcześniej stworzonej puli
* ustaw maskaradę – w ''IP'' / ''Firewall'' / ''NAT'' dodaj regułę z celem ''masquerade'' dla pakietów wychodzących po eth1
* włącz klienta NTP: ''System'' / ''NTP Client''
- Wepnij router między sieć a komputer (lub: sieć a dwa komputery)
- Skonfiguruj router tak, żeby wysyłał flowy do dwóch celi:
* ''IP'' / ''Traffic Flow'' / ''Targets'' / ''Add'' \\ wersja 9, port np. 2055 \\ Uwaga: jeśli używasz jednego komputera, musisz oczywiście wysyłać ruch na różne porty \\ (da się wysłać na grupę multicastową, ale wymaga to więcej konfiguracji kolektorów)
* ''IP'' / ''Traffic Flow'': zaznacz ''enabled''
- Użyj dockera, aby uruchomić program ''nfsen'' i ''nfcapd'' [[https://hub.docker.com/r/koprajs/nfsen/]]:
systemctl start docker
docker pull koprajs/nfsen
mkdir nfsenData
docker run --detach --name nfsen -e NFSEN_SOURCES="router,2055,#0000ff" -p 8080:80 -p 2055:2055/udp -v `pwd`/nfsenData:/data koprajs/nfsen
- Zainstaluj i uruchom program ''ntop'':
zypper addrepo https://download.opensuse.org/repositories/server:/monitoring/openSUSE_Leap_42.3/server:monitoring.repo
zypper in ntop
ntop --set-admin-password=admin
chmod a+w /var/lib/ntop/rrd/
ntop --interface none --http-server 3000 --daemon
- skonfiguruj program ''ntop'':
* wejdź w przeglądarce na adres http://localhost:3000
* wybierz ''plugins'' / ''netflow'' / ''activate''
* podaj port i zatwierdź kliknięciem ''set port''
===== MRTG =====
MRTG jest prostym i klasycznym((czytaj: bardzo przestarzałym)) narzędziem do zbierania statystyk o natężeniu ruchu sieciowego korzystając z protokołu SNMP.
MRTG periodycznie odpytuje OIDy podane w konfiguracji, zbiera dane w bazie danych (np. [[https://en.wikipedia.org/wiki/RRDtool|RRD]]) i może na tej podstawie narysować wykresy zużycia łącza. Wykresy są typowo udostępniane na stronie www.
- Uruchom serwer apache:
# mv /etc/apache2/conf.d/nagios.conf /etc/apache2/conf.d/nagios.conf.disabled
systemctl start apache2
- Wygeneruj plik konfiguracyjny dla mrtg:
cfgmaker --global 'WorkDir: /srv/www/htdocs/mrtg' \
--global 'LogFormat: rrdtool' \
--global 'Interval: 00:30' \
--global 'Options[_]: bits,growright' \
--output /tmp/mrtg.cfg \
public@150.254.32.65 \
public@150.254.32.103
- Uruchom MRTG:
mkdir /srv/www/htdocs/mrtg
mrtg --daemon /tmp/mrtg.cfg
- Dodaj statyczne pliki i skrypt CGI rysujący wykresy na żądanie:
indexmaker /tmp/mrtg.cfg > /srv/www/htdocs/mrtg/index.html
wget http://my14all.sourceforge.net/14all-1.1.txt -O /srv/www/cgi-bin/14all.cgi
chmod a+x /srv/www/cgi-bin/14all.cgi
cp /tmp/mrtg.cfg /srv/www/cgi-bin
Uwaga: skrypt CGI w OpenSUSE potrzebuje łatki poprawiającej ścieżki do plików:
--- 14all.cgi.orig 2017-10-27 11:45:40.820157082 +0200
+++ 14all.cgi 2017-10-27 11:46:29.328157992 +0200
@@ -11,7 +11,7 @@
# if MRTG_lib.pm (from mrtg) is not in the module search path (@INC)
# uncomment the following line and change the path appropriatly:
-use lib qw(/usr/local/mrtg-2/lib/mrtg2);
+use lib qw(/usr/lib64/mrtg2);
# if RRDs (rrdtool perl module) is not in the module search path (@INC)
# uncomment the following line and change the path appropriatly
Automatyczna aplikacja łatki: ''patch /srv/www/cgi-bin/14all.cgi < 01_14all.cgi_opensuse_paths.patch''
- Przejrzyj konfgurację MRTG (plik ''/tmp/mrtg.cfg'')
* Jakie OID są używne do odpytywania o zajętość łącza?
* Skąd MRTG wziął nazwy interfejsów i adresy IP?
- Podejrzyj wiresharkiem zapytania wygenerowane przez MRTG
- Wejdź przeglądarką na stworzoną przez siebie stronę: http://localhost/mrtg/
(Jeśli potrzebujesz ponownie uruchomić mrtg, wyłącz stare np. komendą: ''pkill -TERM mrtg''.)
===== NetFlow =====
NetFlow to własnościowy protokół wprowadzony przez firmę CISCO do przesyłania informacji o ruchu sieciowym
[[https://en.wikipedia.org/wiki/NetFlow|[1] ]],[[https://www.cisco.com/c/en/us/products/ios-nx-os-software/flexible-netflow/index.html|[2] ]].
NetFlow operuje na przepływach (flows)[[https://en.wikipedia.org/wiki/Traffic_flow_(computer_networking)|[1] ]],
gdzie każdy flow to grupa pakietów z tego samego źródła
(adres sieciowy, protokół, numer portu, …) do tego samego celu (adres sieciowy, protokół, numer portu, …).
Protokół NetFlow w wyniku rozwoju doczekał się 9 wersji, z których 2 są w tej chwili używane - wersja 5 i 9. \\
Podobne (często nie do odróżnienia) rozwiązania są używane przez inne firmy produkujące sprzęt sieciowy, np.
[[https://www.juniper.net/us/en/local/pdf/app-notes/3500204-en.pdf|J-Flow]] (Juniper)
czy [[https://wiki.mikrotik.com/wiki/Manual:IP/Traffic_Flow|Traffic Flow]] (Mikrotik).
Na bazie protokołu NetFlow (firmy CISCO) powstał otwarty standard [[https://en.wikipedia.org/wiki/IP_Flow_Information_Export|IPFIX]].
Inne rozwiązanie do analizy co się dzieje w sieci wykorzystuje próbkowanie ruchu sieciowego – [[https://en.wikipedia.org/wiki/SFlow|sFlow]]. \\
NetFlow dostarcza informacji wszystkich przepływach w sieci, natomiast sFlow zbiera próbki ruchu (początki pakietów) i pozwala analizować ich zawartość.
==== Architektura ====
Na sprzęcie sieciowym zbierane są informacje o ruchu w **cache**. \\
Zwykle proces zbierający te dane nazywa się próbą (**probe**).
Informacje te są eksportowane – wysyłane z użyciem protokołu NetFlow. \\
Protokół NetFlow używa UDP, nie ma jednego standardowego portu.
Informacje są następnie odbierane i gromadzone przez **kolektor**.
Zgromadzone dane można analizować odpowiednimi narzędziami.
Szczegółowy opis działania NetFlow i różnice między wersjami: [[http://etutorials.org/Networking/network+management/Part+II+Implementations+on+the+Cisco+Devices/Chapter+7.+NetFlow/Fundamentals+of+NetFlow/|[1] ]]
[[http://etutorials.org/Networking/network+management/Part+II+Implementations+on+the+Cisco+Devices/Chapter+7.+NetFlow/New+Features+Supported+with+NetFlow+Version+9/|[2] ]]
==== Prosta próba i kolektor ====
- Zainstaluj i uruchom [[https://sourceforge.net/projects/fprobe/|fprobe]] - prostą próbę NetFlow dla Linuksa:
wget ftp://ftp.pbone.net/mirror/ftp5.gwdg.de/pub/opensuse/repositories/home:/onielsen/openSUSE_Factory/x86_64/fprobe-1.1-3.107.x86_64.rpm
rpm -i fprobe-1.1-3.107.x86_64.rpm
fprobe -i em1 localhost:2055
- Zainstaluj i uruchom [[http://nfdump.sourceforge.net/|nfcapd]] - prosty kolektor NetFlow dla Linuksa:
wget ftp://ftp.pbone.net/mirror/ftp5.gwdg.de/pub/opensuse/repositories/home:/smflood:/SLE_11_SPn_General/SLE_11_SP2/x86_64/nfdump-1.6.10-7.1.x86_64.rpm
rpm -i nfdump-1.6.10-7.1.x86_64.rpm
mkdir /tmp/flows
nfcapd -p 2055 -l /tmp/flows -t 60s -w -D
- Generuj ruch sieciowy przez 2 minuty
- Zobacz przy pomocy programu ''nfdump'' jak wyglądają zebrane dane:
cd /tmp/flows/
nfdump -r nfcapd.…
W pliku ''nfcapd.current.*'' nie należy spodziewać się zawartości.
Przykładowy wynik:
lab-sec-15:/tmp/flows # nfdump -r nfcapd.201710271346
Date first seen Duration Proto Src IP Addr:Port Dst IP Addr:Port Packets Bytes Flows
Verify map id 0: ERROR: Expected 7 elements in map, but found 2!
2017-10-27 13:45:26.079 0.000 UDP 150.254.32.65:53 -> 150.254.32.80:60831 1 160 1
2017-10-27 13:45:26.027 0.000 UDP 150.254.32.80:60831 -> 150.254.32.65:53 1 74 1
2017-10-27 13:45:29.362 0.000 UDP 150.254.32.80:33229 -> 150.254.32.65:53 1 51 1
2017-10-27 13:45:25.992 0.000 UDP 150.254.32.80:40612 -> 150.254.32.65:53 1 53 1
2017-10-27 13:45:26.016 0.000 ICMP 150.254.32.80:0 -> 213.180.141.140:8.0 1 84 1
2017-10-27 13:45:26.016 0.000 UDP 150.254.32.65:53 -> 150.254.32.80:40612 1 228 1
2017-10-27 13:45:26.027 0.000 ICMP 213.180.141.140:0 -> 150.254.32.80:0.0 1 84 1
2017-10-27 13:45:30.447 0.000 ICMP 212.77.98.9:0 -> 150.254.32.80:0.0 1 84 1
2017-10-27 13:45:30.438 0.000 ICMP 150.254.32.80:0 -> 212.77.98.9:8.0 1 84 1
2017-10-27 13:45:30.438 0.000 UDP 150.254.32.65:53 -> 150.254.32.80:33229 1 162 1
2017-10-27 13:45:30.507 0.000 UDP 150.254.32.65:53 -> 150.254.32.80:43414 1 161 1
2017-10-27 13:45:30.447 0.000 UDP 150.254.32.80:43414 -> 150.254.32.65:53 1 70 1
2017-10-27 13:45:39.583 0.000 UDP 150.254.32.80:36886 -> 150.254.32.65:53 2 106 1
2017-10-27 13:45:40.492 0.000 UDP 150.254.32.80:55274 -> 150.254.32.65:53 2 114 1
2017-10-27 13:45:40.664 0.817 TCP 150.254.32.80:45678 -> 184.172.220.163:443 12 1209 1
2017-10-27 13:45:40.662 0.002 UDP 150.254.32.65:53 -> 150.254.32.80:55274 2 414 1
2017-10-27 13:45:40.826 0.655 TCP 184.172.220.163:443 -> 150.254.32.80:45678 11 13341 1
2017-10-27 13:45:40.138 0.001 UDP 150.254.32.65:53 -> 150.254.32.80:36886 2 362 1
2017-10-27 13:45:40.140 1.339 TCP 150.254.32.80:55444 -> 184.172.220.163:80 6 425 1
2017-10-27 13:45:40.302 1.177 TCP 184.172.220.163:80 -> 150.254.32.80:55444 4 649 1
Summary: total flows: 20, total bytes: 17915, total packets: 53, avg bps: 9253, avg pps: 3, avg bpp: 338
Time window: 2017-10-27 13:45:25 - 2017-10-27 13:45:41
Total flows processed: 20, Blocks skipped: 0, Bytes read: 1168
Sys: 0.001s flows/second: 11117.3 Wall: 0.000s flows/second: 33670.0
==== Mikrotik + NetFlow ====
https://wiki.mikrotik.com/wiki/Manual:IP/Traffic_Flow
==== Analiza danych z NetFlow ====
Zdecydowana większość dobrych aplikacji do analizy danych zebranych z użyciem NetFlow jest płatna. \\
Na zajęciach prezentowane są dwa darmowe programy pozwalające na prostą analizę ruchu.
=== ntop ===
[[https://en.wikipedia.org/wiki/Ntop|ntop]] to program (też 'klasyczny') do przeglądania statystyk bieżącego ruchu sieciowego.
Posiada wtyczkę odbierającą komunikaty NetFlow.
Dostępna jest też nowsza inkarnacja programu ([[https://www.ntop.org/|ntopng]]), ta jednak do użycia NetFlow wymaga zakupienia licencji.
- Przeanalizuj konfigurację kolektora NetFlow programu ntop.
- W sebranych danych znajdź:
* wykres bieżącego użycia sieci
* listę połączeń które wymienają najwięcej danych
* jaki jest udział protokołu UDP w ruchu sieciowym
* jaki jest dominujący protokół na warstwie aplikacyjnej
* rozkład wielkości pakietów (porównaj z: [[https://en.wikipedia.org/wiki/Internet_Mix|IMIX]])
=== nfsen ===
Nfsen to aplikacja webowa prezentująca statystyki ruchu, współpracująca z kolektorem nfcapd i programem nfdump.
- Porównaj wykresy ilości: przepływów (flows)/ pakietów / bajtów
- Znajdź jaki flow wymienił najwięcej danych 20÷10 minut temu
- Znajdź jaki flow najszybciej wymieniał dane 20÷10 minut temu
- Zobacz jaki jest rozkład ruchu na protokoły (== porty źródłowe / docelowe)
- Zagreguj strumienie po sieciach IP
- Zobacz który host lokalny wygenerował najwięcej ruchu i z jakiego hosta zdalnego przyszło najwięcej danych
- Podaj jaka była szczytowa przepustowość z ostatniej godziny