perl i python
Transkrypt
perl i python
Monitoring ruchu sieciowego w nk.pl w oparciu o protokół netflow oraz rozwiązania opensource Marcin Szukała PLNOG 2013 Warszawa 01.03.2013 [email protected] 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-7600netflow-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ę