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ę