Компанія Cloudflare опублікувала xdpcap, аналізатор трафіку на основі підсистеми XDP

Компанія Cloudflare представила відкритий проект xdpcap, у рамках якого розвивається схожий на tcpdump аналізатор мережевих пакетів, побудований на основі підсистеми XDP (eXpress Data Path). Код проекту написаний мовою Go та поширюється під ліцензією BSD. Проектом також підготовлена бібліотека для прив'язування eBPF-обробників трафіку з програм на мові Go.

Утиліта xdpcap сумісна з виразами фільтрації tcpdump/libpcap і дозволяє обробляти на тому ж обладнанні значно більші обсяги трафіку. Xdpcap також може застосовуватися для налагодження в умовах, в яких звичайний tcpdump не застосовується, наприклад, коли застосовуються системи фільтрації, захисту від DoS-атак і балансування навантаження, що використовують підсистему ядра Linux XDP, що обробляє пакети на стадії до обробки мережевим стеком ядра Linux (tcd не бачить пакети, відкинуті обробником XDP).

Висока продуктивність досягається завдяки застосуванню підсистем eBPF та XDP. eBPF є вбудованим в ядро ​​Linux інтерпретатором байткоду, що дозволяє створювати високопродуктивні обробники вхідних/вихідних пакетів з прийняттям рішень про їх перенаправлення або відкидання. За допомогою JIT-компілятора байткод eBPF на льоту транслюється в машинні інструкції та виконується з продуктивністю нативного коду. Підсистема XDP (eXpress Data Path) доповнює eBPF можливістю запускати BPF-програми на рівні мережного драйвера, з підтримкою прямого доступу до DMA-буфера пакетів та роботою на стадії до виділення буфера skbuff мережевим стеком.

Як і tcpdump утиліта xdpcap спочатку транслює високорівневі правила фільтрації трафіку в класичну виставу BPF (cBPF) за допомогою штатної бібліотеки libpcap, після чого перетворює їх у форму підпрограм eBPF, використовуючи компілятор cbpfc, що використовує напрацювання LLVM/Clang На виході відомості про трафік зберігаються в стандартному форматі pcap, що дозволяє використовувати підготовлений в xdpcap дамп трафіку для подальшого вивчення tcpdump та інших існуючих аналізаторів трафіку. Наприклад, для захоплення відомостей про трафік DNS замість команди "tcpdump ip and udp port 53" можна запустити "xdpcap /path/to/hook capture.pcap 'ip and udp port 53'", після чого використовувати файл capture.pcap, наприклад, з командою "tcpdump -r" або у Wireshark.

Джерело: opennet.ru

Додати коментар або відгук