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

Компания Cloudflare прСдставСни ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ xdpcap, Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° ΠΊΠΎΠΉΡ‚ΠΎ сС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π° Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ Π½Π° ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ, ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π° tcpdump, ΠΈΠ·Π³Ρ€Π°Π΄Π΅Π½ Π½Π° Π±Π°Π·Π°Ρ‚Π° Π½Π° подсистСмата XDP (ΠΏΡŠΡ‚ Π½Π° Π΄Π°Π½Π½ΠΈ eXpress). ΠšΠΎΠ΄ΡŠΡ‚ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π΅ написан Π½Π° Go ΠΈ разпространява сС ΠΎΡ‚ ΠΏΠΎΠ΄ BSD Π»ΠΈΡ†Π΅Π½Π·. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΡŠΡ‚ ΡΡŠΡ‰ΠΎ ΠΏΠΎΠ΄Π³ΠΎΡ‚Π²Π΅Π½ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π·Π° ΠΎΠ±Π²ΡŠΡ€Π·Π²Π°Π½Π΅ Π½Π° eBPF ΠΌΠ°Π½ΠΈΠΏΡƒΠ»Π°Ρ‚ΠΎΡ€ΠΈ Π½Π° Ρ‚Ρ€Π°Ρ„ΠΈΠΊ ΠΎΡ‚ Go прилоТСния.

ΠŸΠΎΠΌΠΎΡ‰Π½Π°Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° xdpcap Π΅ ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠ° с tcpdump/libpcap Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π°Ρ‰ΠΈ ΠΈΠ·Ρ€Π°Π·ΠΈ ΠΈ Π²ΠΈ позволява Π΄Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π°Ρ‚Π΅ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΏΠΎ-Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΎΠ±Π΅ΠΌΠΈ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ Π½Π° ΡΡŠΡ‰ΠΈΡ Ρ…Π°Ρ€Π΄ΡƒΠ΅Ρ€. Xdpcap ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΈ Π·Π° отстраняванС Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ Π² срСди, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ обикновСният tcpdump Π½Π΅ Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈΠΌ, ΠΊΠ°Ρ‚ΠΎ Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π°Π½Π΅, DoS Π·Π°Ρ‰ΠΈΡ‚Π° ΠΈ систСми Π·Π° балансиранС Π½Π° Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅Ρ‚ΠΎ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ подсистСмата XDP Π½Π° ядрото Π½Π° Linux, която ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ, ΠΏΡ€Π΅Π΄ΠΈ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π΅Π½ΠΈ ΠΎΡ‚ мрСТовия стСк Π½Π° ядрото Π½Π° 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 ΠΈ udp ΠΏΠΎΡ€Ρ‚ 53", ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° стартиратС "xdpcap /path/to/hook capture.pcap 'ip ΠΈ udp ΠΏΠΎΡ€Ρ‚ 53β€²" ΠΈ слСд Ρ‚ΠΎΠ²Π° Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ улавянС .pcap Ρ„Π°ΠΉΠ», Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ с ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° "tcpdump -r" ΠΈΠ»ΠΈ Π² Wireshark.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€