Cloudflare zverejnil xdpcap, analyzátor návštevnosti založený na subsystéme XDP

Spoločnosť Cloudflare представила otvorený projekt xdpcap, v rámci ktorej sa vyvíja sieťový analyzátor paketov podobný tcpdump, postavený na báze subsystému XDP (eXpress Data Path). Kód projektu je napísaný v Go a distribuovaný pod licenciou BSD. Projekt tiež pripravený knižnica na viazanie obslužných programov prevádzky eBPF z aplikácií Go.

Pomôcka xdpcap je kompatibilná s výrazmi filtrovania tcpdump/libpcap a umožňuje vám spracovať výrazne väčšie objemy prevádzky na rovnakom hardvéri. Xdpcap je možné použiť aj na ladenie v prostrediach, kde nie je možné použiť bežný tcpdump, ako je filtrovanie, ochrana DoS a systémy vyvažovania záťaže, ktoré používajú subsystém XDP jadra Linuxu, ktorý spracováva pakety pred ich spracovaním sieťovým zásobníkom jadra Linuxu (tcpdump nevidí pakety zahodené obslužným programom XDP).

Vysoký výkon sa dosahuje použitím subsystémov eBPF a XDP. eBPF je interpret bajtového kódu zabudovaný do linuxového jadra, ktorý vám umožňuje vytvárať vysokovýkonné obslužné programy prichádzajúcich/ochádzajúcich paketov s rozhodnutiami o ich preposielaní alebo vyhadzovaní. Pomocou kompilátora JIT sa bajtový kód eBPF za behu preloží do strojových inštrukcií a vykoná sa s výkonom natívneho kódu. Subsystém XDP (eXpress Data Path) dopĺňa eBPF o možnosť spúšťať BPF programy na úrovni sieťového ovládača, s podporou priameho prístupu do vyrovnávacej pamäte paketov DMA a práce vo fáze pred pridelením vyrovnávacej pamäte skbuff sieťovým zásobníkom.

Podobne ako tcpdump, pomôcka xdpcap najprv preloží pravidlá filtrovania návštevnosti na vysokej úrovni do klasickej reprezentácie BPF (cBPF) pomocou štandardnej knižnice libpcap a potom ich pomocou kompilátora prevedie do podoby rutín eBPF. cbpfcpomocou vývoja LLVM/Clang. Na výstupe sa dopravné informácie uložia v štandardnom formáte pcap, čo umožňuje použiť výpis prevádzky pripravený v xdpcap na následné štúdium v ​​tcpdump a iných existujúcich analyzátoroch návštevnosti. Ak chcete napríklad zachytiť informácie o prevádzke DNS, namiesto použitia príkazu „tcpdump ip a udp port 53“ môžete spustiť „xdpcap /path/to/hook capture.pcap 'ip a udp port 53′“ a potom použiť zachytávanie .pcap, napríklad pomocou príkazu "tcpdump -r" alebo v programe Wireshark.

Zdroj: opennet.ru

Pridať komentár