Cloudflare zveřejnil xdpcap, analyzátor provozu založený na subsystému XDP

Společnost Cloudflare prezentovány otevřený projekt xdpcap, v rámci kterého se vyvíjí síťový analyzátor paketů podobný tcpdump, postavený na bázi subsystému XDP (eXpress Data Path). Kód projektu je napsán v Go a distribuovány pod licencí BSD. Projekt také připravený knihovna pro vazbu obslužných rutin provozu eBPF z aplikací Go.

Obslužný program xdpcap je kompatibilní s filtrovacími výrazy tcpdump/libpcap a umožňuje zpracovávat výrazně větší objemy provozu na stejném hardwaru. Xdpcap lze také použít k ladění v prostředích, kde nelze použít běžný tcpdump, jako je filtrování, ochrana DoS a systémy vyvažování zátěže, které používají subsystém XDP jádra Linuxu, který zpracovává pakety předtím, než jsou zpracovány síťovým zásobníkem jádra Linuxu (tcpdump nevidí pakety zahozené obslužnou rutinou XDP).

Vysokého výkonu je dosaženo použitím subsystémů eBPF a XDP. eBPF je interpret bajtového kódu zabudovaný do linuxového jádra, který vám umožňuje vytvářet vysoce výkonné obslužné nástroje příchozích/odchozích paketů s rozhodováním o jejich předání nebo vyřazení. Pomocí kompilátoru JIT je bajtový kód eBPF za běhu překládán do strojových instrukcí a vykonáván s výkonem nativního kódu. Subsystém XDP (eXpress Data Path) doplňuje eBPF o možnost spouštět programy BPF na úrovni síťového ovladače, s podporou přímého přístupu k vyrovnávací paměti paketů DMA a práci ve fázi před přidělením vyrovnávací paměti skbuff síťovým zásobníkem.

Podobně jako tcpdump obslužný program xdpcap nejprve převede pravidla filtrování provozu na vysoké úrovni do klasické reprezentace BPF (cBPF) pomocí standardní knihovny libpcap a poté je převede do podoby rutin eBPF pomocí kompilátoru. cbpfc, pomocí vývoje LLVM/Clang. Na výstupu jsou dopravní informace ukládány ve standardním formátu pcap, což umožňuje použít výpis provozu připravený v xdpcap pro následné studium v ​​tcpdump a dalších existujících analyzátorech provozu. Chcete-li například zaznamenat informace o provozu DNS, místo použití příkazu „tcpdump ip a udp port 53“ můžete spustit „xdpcap /path/to/hook capture.pcap 'ip a udp port 53′“ a poté použít zachycení .pcap, např. příkazem "tcpdump -r" nebo ve Wiresharku.

Zdroj: opennet.ru

Přidat komentář