Cloudflare on avaldanud XDP alamsüsteemil põhineva liiklusanalüsaatori xdpcap

Cloudflare'i ettevõte esitatakse avatud projekt xdpcap, mille raames arendatakse tcpdumpiga sarnast võrgupaketianalüsaatorit, mis on ehitatud alamsüsteemi baasil XDP (eXpress Data Path). Projekti kood on kirjutatud Go ja jaotatud BSD litsentsi alusel. Projekt samuti ette valmistatud teek eBPF-i liikluskäsitlejate sidumiseks Go rakendustest.

Utiliit xdpcap ühildub tcpdump/libpcap filtreerimisavaldistega ja võimaldab töödelda samal riistvaral oluliselt suuremaid liiklusmahtusid. Xdpcapi saab kasutada ka silumiseks keskkondades, kus tavaline tcpdump ei ole rakendatav, näiteks filtreerimine, DoS kaitse ja koormuse tasakaalustamise süsteemid, mis kasutavad Linuxi kerneli XDP alamsüsteemi, mis töötleb pakette enne, kui neid töötleb Linuxi tuuma võrgupinn (tcpdump ei näe XDP-käsitleja poolt maha visatud pakette).

Kõrge jõudlus saavutatakse eBPF ja XDP alamsüsteemide kasutamisega. eBPF on Linuxi kernelisse sisseehitatud baitkooditõlk, mis võimaldab teil luua sissetulevate/väljaminevate pakettide suure jõudlusega töötlejaid nende edastamise või äraviskamise otsustega. JIT-kompilaatori abil tõlgitakse eBPF-i baitkood käigult masinakäskudeks ja käivitatakse natiivse koodi jõudlusega. XDP (eXpress Data Path) alamsüsteem täiendab eBPF-i võimalusega käivitada BPF-programme võrgudraiveri tasemel, toetades otsejuurdepääsu DMA-pakettpuhvrile ja töötades etapis, enne kui võrgupinn eraldab skbuff-puhvri.

Nagu tcpdump, tõlgib utiliit xdpcap esmalt kõrgetasemelised liikluse filtreerimise reeglid klassikaliseks BPF-i esituseks (cBPF), kasutades standardset libpcap teeki ja seejärel teisendab need kompilaatori abil eBPF-i rutiinidena. cbpfc, kasutades LLVM/Clangi arendusi. Väljundis salvestatakse liiklusteave standardses pcap-vormingus, mis võimaldab kasutada xdpcap-is ettevalmistatud liiklustõmmist edaspidiseks uurimiseks tcpdumpis ja teistes olemasolevates liiklusanalüsaatorites. Näiteks DNS-i liiklusteabe hõivamiseks võite selle asemel, et kasutada käsku "tcpdump ip ja udp port 53", käivitada "xdpcap /path/to/hook capture.pcap "ip ja udp port 53" ja seejärel kasutada püüdmist. .pcap faili, nt käsuga "tcpdump -r" või Wiresharkis.

Allikas: opennet.ru

Lisa kommentaar