Компания Cloudflare ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π»Π° xdpcap, Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° Π½Π° основС подсистСмы XDP

Компания Cloudflare прСдставила ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ xdpcap, Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ развиваСтся ΠΏΠΎΡ…ΠΎΠΆΠΈΠΉ Π½Π° tcpdump Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ сСтСвых ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², построСнный Π½Π° основС подсистСмы XDP (eXpress Data Path). Код ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° написан Π½Π° языкС Go ΠΈ распространяСтся ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ BSD. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° для привязки eBPF-ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° ΠΈΠ· ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° языкС Go.

Π£Ρ‚ΠΈΠ»ΠΈΡ‚Π° xdpcap совмСстима с выраТСниями Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ tcpdump/libpcap ΠΈ позволяСт ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° Ρ‚ΠΎΠΌ ΠΆΠ΅ ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠΈ сущСствСнно большиС ΠΎΠ±ΡŠΡ‘ΠΌΡ‹ Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ°. Xdpcap Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ Π² условиях, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ tcpdump Π½Π΅ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ систСмы Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ, Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΡ‚ DoS-Π°Ρ‚Π°ΠΊ ΠΈ балансировки Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ подсистСму ядра Linux XDP, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ Π½Π° стадии Π΄ΠΎ ΠΈΡ… ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ сСтСвым стСком ядра Linux (tcpdump Π½Π΅ Π²ΠΈΠ΄ΠΈΡ‚ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹, ΠΎΡ‚Π±Ρ€ΠΎΡˆΠ΅Π½Π½Ρ‹Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ 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