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