Monitoring ruchu sieciowego w nk.pl w oparciu o protokół netflow oraz rozwiązania opensource Marcin Szukała PLNOG 2013 Warszawa 01.03.2013 marcin@szukala.org
Agenda Problemy czyli po co nam to? Dlaczego nie hardware? Rozwiązania opensource: nprobe, pf_ring nfsen, nfdump zabbix perl i python Wydajność systemu Case studies Pytania?
Problemy Tylko statystyki ruchu z interfejsów zbierane po SNMP Brak informacji o ruchu od operatorów ISP (źródłowe sieci IP, AS-y itp.) Brak informacji o ruchu przychodzącym od uczestników IX-ów Brak możliwości analizy ruchu i wykrywania anomalii (skanowanie portów, DDoS itp.) Brak szczegółowej historii ruchu
Problem z RSP720-3CXL NetFlow Table Size - 256K Problem z TCAM table overflow Brak flag TCP w eksportowanych flow-ach http://www.lovemytool. com/blog/2009/12/netflow-overflow-with-tcamtables-by-michael-patterson.html http://www.plixer.com/blog/general/cisco-7600- netflow-problems/
nprobe Sonda generująca NetFlow v5/v9/ipfix Aplikacja dla Linux/Unix i Windows Na zwykłym sprzęcie można osiągnąć bardzo dużo Wire speed dla intefejsów 1/10Gbps (z pf_ring i DNA) Informacje o AS-ach z pliku lub sesji BGP Generowanie ID interfejsów wej/wyj na podstawie adresu MAC http://www.ntop.org/products/nprobe/
pf_ring Moduł jądra Umożliwia przechwytywanie pakietów z prędkością wire rate dla interfejsów 1/10Gbps (1488 Kpps/14.8 Mpps) Dedykowane sterowniki e1000, e1000e, igb, ixgbe http://www.ntop.org/products/pf_ring/
nfsen, nfdump Webowy front-end dla narzędzi nfdump Szybki podgląd podstawowych informacji o ruchu, wykresy fps, pps, bps Dostęp do szczegółowych danych (list flows), generowanie statystyk (per src/dst IP, per src/dst AS, id interfejsu i inne) Brak rozróżnienia ruch wchodzący/wychodzący Wolny przy przetwarzaniu dużej ilości danych (proces jednowątkowy)
nfsen, nfdump nfcapd - obsługuje netflow w wersji 5/7/9 i zapisuje na dysku (rotuje domyślnie co 5 minut) nfdump - przetwarza dane zapisane na dysku przez nfcapd. Wyświetla poszczególne flow-y jak również generuje statystyki TopN per src/dst IP, per src/dst AS, id interfejsu i inne. Fitrowanie danych - składnia podobna do tcpdump
nfsen, nfdump
nfsen, nfdump
zabbix Aplikacja opensource do monitorowania urządzeń sieciowych, serwerów, aplikacji, procesów, baz danych itd. Tworzenie wykresów, alarmów (trigger), powiadamianie via email, sms, XMPP Pobieranie danych po SNMP, przy użyciu zabbix_agent i zabbix_sender API pozwalające w pełni kontrolować zabbixa (tworzenie, usuwanie, modyfikowanie itemów, triggerów, wykresów, screenów itd.)
perl i python Problem z identyfikacją interfejsów wejściowych/wyjściowych Problem z rozdzieleniem ruchu wchodzącego/wychodzącego Generowanie statystyk ruchu dla ISP i IX-ów Generowanie statystyk ruchu dla wybranych AS-ów źródłowych Generowanie danych dla detektora syn_flood
perl i python Problem z identyfikacją interfejsów wejściowych/wyjściowych nprobe tworzy id interfejsu na postawie 3 ostatnich bajtów MAC-a dla naszych urządzeń sprawa prosta dla urządzeń ISP sprawa prosta dla urządzeń w IX-ach jest problem
perl i python Problem z rozdzieleniem ruchu wchodzącego/wychodzącego nprobe nie wie który ruch jest wchodzący/wychodzący można użyć opcji --local-networks i --local-trafficdirection, nam to jednak nie zadziałało problem rozwiązany poprzez odpowiednie zastosowanie filtrów nfdump "in if 54144 or in if 10560 or in if 35328 or in if 35200" #ruch wychodzący od naszych urządzeń out if 54144 or out if 10560 or out if 35328 or out if 35200" #ruch przychodzący do naszych urządzeń
perl i python Problem z rozdzieleniem ruchu wchodzącego/wychodzącego nprobe nie wie który ruch jest wchodzący/wychodzący można użyć opcji --local-networks i --local-trafficdirection, nam to jednak nie zadziałało problem rozwiązany poprzez odpowiednie zastosowanie filtrów nfdump "in if 54144 or in if 10560 or in if 35328 or in if 35200" #ruch wychodzący od naszych urządzeń out if 54144 or out if 10560 or out if 35328 or out if 35200" #ruch przychodzący do naszych urządzeń
perl i python Generowanie statystyk ruchu dla ISP i IX-ów Mamy id wszystkich interfejsów, można generować statystki z nfdump i wysyłać do zabbixa
perl i python Generowanie statystyk ruchu dla ISP i IX-ów Mamy id wszystkich interfejsów, można generować statystki z nfdump i wysyłać do zabbixa
perl i python Generowanie statystyk ruchu dla wybranych AS-ów źródłowych -s dstas/flows, filtr "src as 43447" -s srcas/flows, filtr "dst as 43447"
perl i python Generowanie statystyk ruchu dla wybranych AS-ów źródłowych -s dstas/flows, filtr "src as 43447" -s srcas/flows, filtr "dst as 43447"
perl i python Generowanie danych dla detektora syn_flood Ilość flow TCP z flagą S (inne nieistotne) Ilość flow TCP z flagą SRF (inne nieistotne) Ilość flow TCP z flagą SF bez R (inne nieistotne) Ilość flow TCP z flagą SR bez F (inne nieistotne) Ilość flow TCP z flagą S bez AFRPU - syn flood filtry nfdump: proto tcp and flags S proto tcp and flags SF and not flags R proto tcp and flags SR and not flags F proto tcp and flags SRF proto tcp and flags S and not flags AFRPU
perl i python Generowanie danych dla detektora syn_flood Item w zabbixie który oblicza stosunek ilości flow z poprawnymi flagami (+SRF, +SR -F, +SF -R) do ilości wszystkich flow z flagą S (ilość flow z flagami +S -AFRPU nie jest brany pod uwagę) Przy normalnym ruchu ww. stosunek oscyluje w okolicach 0.97-0.99 W przypadku wystąpienia anomalii, tj. pojawienia się dużej ilości flow z flagami +S -AFRPU stosunek dąży do zera Trigger powiązany z tym item-em informuje o wystąpieniu anomalii
perl i python Generowanie danych dla detektora syn_flood
perl i python Generowanie danych dla detektora syn_flood
Wydajność systemu Sondy zbierają w szczycie łącznie ruch na poziomie 4.5Gbps, 1Mpps i eksportują około 140kfps 4 sondy nprobe w punktach styku z ISP i IX Ruch z sond do kolektora w szycie dochodzi do 100Mbps 1 kolektor nfsen z 10Tb dyskiem zapewniającym dostęp do danych historycznych z z ponad 2 miesięcy
Wydajność systemu Obciążenie kolektora procesami nfsen i przetwarzaniem danych przez skrypty
Wydajność systemu Obciążenie sondy przetwarzającej najwięcej ruchu - sonda-plix
Wydajność systemu Obciążenie sondy przetwarzającej najwięcej ruchu - sonda-plix
Case studies Redundantne połączenia w IX-ach
Case studies Redundantne połączenia w IX-ach
Case studies Redundantne połączenia w IX-ach
Case studies Redundantne połączenia w IX-ach
Case studies Redundantne połączenia w IX-ach
Case studies Redundantne połączenia w IX-ach
Case studies Redundantne połączenia w IX-ach
Pytania?
Dziękuję za uwagę