Cloudflare opublikowało xdpcap, analizator ruchu oparty na podsystemie XDP

Firma Cloudflare представила otwarty projekt xdpcap, w ramach którego rozwijany jest analizator pakietów sieciowych podobny do tcpdump, zbudowany w oparciu o podsystem XDP (ścieżka danych eXpress). Kod projektu jest napisany w Go i dystrybuowane przez na licencji BSD. Projekt także przygotowany biblioteka do wiązania procedur obsługi ruchu eBPF z aplikacji Go.

Narzędzie xdpcap jest kompatybilne z wyrażeniami filtrującymi tcpdump/libpcap i umożliwia przetwarzanie znacznie większych ilości ruchu na tym samym sprzęcie. Xdpcap może być również używany do debugowania w środowiskach, w których zwykły tcpdump nie ma zastosowania, takich jak filtrowanie, ochrona DoS i systemy równoważenia obciążenia korzystające z podsystemu XDP jądra Linuksa, który przetwarza pakiety przed ich przetworzeniem przez stos sieciowy jądra Linuksa (tcpdump nie widzi pakietów odrzucanych przez procedurę obsługi XDP).

Wysoka wydajność została osiągnięta dzięki zastosowaniu podsystemów eBPF i XDP. eBPF to interpreter kodu bajtowego wbudowany w jądro Linuksa, który umożliwia tworzenie wysokowydajnych procedur obsługi pakietów przychodzących/wychodzących z decyzjami o ich przekazywaniu lub odrzucaniu. Za pomocą kompilatora JIT kod bajtowy eBPF jest tłumaczony w locie na instrukcje maszynowe i wykonywany z wydajnością kodu natywnego. Podsystem XDP (eXpress Data Path) uzupełnia eBPF o możliwość uruchamiania programów BPF na poziomie sterowników sieciowych, z obsługą bezpośredniego dostępu do bufora pakietów DMA i pracą na etapie przed alokacją bufora skbuff przez stos sieciowy.

Podobnie jak tcpdump, narzędzie xdpcap najpierw tłumaczy reguły filtrowania ruchu wysokiego poziomu na klasyczną reprezentację BPF (cBPF) przy użyciu standardowej biblioteki libpcap, a następnie konwertuje je do postaci procedur eBPF przy użyciu kompilatora cbpfc, korzystając z rozwiązań LLVM/Clang. Na wyjściu informacje o ruchu zapisywane są w standardowym formacie pcap, co pozwala na wykorzystanie zrzutu ruchu przygotowanego w xdpcap do późniejszego badania w tcpdump i innych istniejących analizatorach ruchu. Na przykład, aby przechwycić informacje o ruchu DNS, zamiast używać polecenia „tcpdump ip and udp port 53”, możesz uruchomić polecenie „xdpcap /path/to/hook Capture.pcap 'ip and udp port 53′”, a następnie użyć przechwytywania plik .pcap, np. poleceniem „tcpdump -r” lub w Wireshark.

Źródło: opennet.ru

Dodaj komentarz