Кампанія 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

Дадаць каментар