Dydaktyka:
Feedback
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.
IP
/ Pool
IP
/ DHCP Server
/ Networks
z bramą przez routerIP
/ Firewall
/ NAT
dodaj regułę z celem masquerade
dla pakietów wychodzących po eth1System
/ NTP Client
IP
/ Traffic Flow
/ Targets
/ Add
IP
/ Traffic Flow
: zaznacz enabled
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
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
ntop
:plugins
/ netflow
/ activate
set port
MRTG jest prostym i klasycznym1) 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. RRD) i może na tej podstawie narysować wykresy zużycia łącza. Wykresy są typowo udostępniane na stronie www.
# mv /etc/apache2/conf.d/nagios.conf /etc/apache2/conf.d/nagios.conf.disabled systemctl start apache2
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
mkdir /srv/www/htdocs/mrtg mrtg --daemon /tmp/mrtg.cfg
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
/tmp/mrtg.cfg
)
(Jeśli potrzebujesz ponownie uruchomić mrtg, wyłącz stare np. komendą: pkill -TERM mrtg
.)
NetFlow to własnościowy protokół wprowadzony przez firmę CISCO do przesyłania informacji o ruchu sieciowym [1] ,[2] . NetFlow operuje na przepływach (flows)[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.
J-Flow (Juniper)
czy Traffic Flow (Mikrotik).
Na bazie protokołu NetFlow (firmy CISCO) powstał otwarty standard IPFIX.
Inne rozwiązanie do analizy co się dzieje w sieci wykorzystuje próbkowanie ruchu sieciowego – sFlow.
NetFlow dostarcza informacji wszystkich przepływach w sieci, natomiast sFlow zbiera próbki ruchu (początki pakietów) i pozwala analizować ich zawartość.
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: [1] [2]
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
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
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
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 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 (ntopng), ta jednak do użycia NetFlow wymaga zakupienia licencji.
Nfsen to aplikacja webowa prezentująca statystyki ruchu, współpracująca z kolektorem nfcapd i programem nfdump.