Π‘ΡΠΊΠΎΠ½ΠΎΠΌΡŒΡ‚Π΅ 15% Π½Π° всСх хостинговых услугах

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ свои Π½Π°Π²Ρ‹ΠΊΠΈ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ скидку Π½Π° любой Ρ‚Π°Ρ€ΠΈΡ„Π½Ρ‹ΠΉ ΠΏΠ»Π°Π½

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠ΄: Skills ΠΠ°Ρ‡Π°Ρ‚ΡŒ
Π ΡƒΠ±Ρ€ΠΈΠΊΠΈ
Linux Администрация Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ XDP ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π² построСнии Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΡ‚ DDoS-Π°Ρ‚Π°ΠΊ?

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² XDP ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π·Π°Ρ‰ΠΈΡ‚Ρƒ ΠΎΡ‚ DDoS?

whatis

Если Π²Ρ‹ запускаСтС ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ API, ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ прокси, ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΉ сСрвис ΠΈΠ»ΠΈ Π»ΡŽΠ±ΡƒΡŽ Π΄Ρ€ΡƒΠ³ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‡ΡƒΡŽ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ, Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΡƒΡŽ ΠΈΠ· ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π°, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΡ‚ΡŒΡΡ с Π±ΠΎΠ»Π΅Π·Π½Π΅Π½Π½ΠΎΠΉ ситуациСй, ΠΊΠΎΠ³Π΄Π° сСрвСр занят ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π½Π΅ прСдставлял Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ цСнности. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΈΠ· строя ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π΅ справляСтся с Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ. Оно Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΈΠ· строя ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ хост Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ процСссорноС врСмя Π½Π° ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅, Ρ€Π°Π·Π±ΠΎΡ€, ΠΊΠ»Π°ΡΡΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ мусорных ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Π³Π»ΡƒΠ±ΠΆΠ΅ Π² Linux, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Ρ‡Ρ‚ΠΎ-Π»ΠΈΠ±ΠΎ скаТСт Β«Π½Π΅Ρ‚Β». МногиС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с Π·Π°Ρ‰ΠΈΡ‚ΠΎΠΉ ΠΎΡ‚ DDoS Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ здСсь: Π½Π΅ ΠΊΠ°ΠΊ история ΠΎ пропускной способности, Π° ΠΊΠ°ΠΊ история ΠΎ стоимости ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ².

Π­Ρ‚ΠΎ Π²Π°ΠΆΠ½ΠΎ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для спСциалистов ΠΏΠΎ ядру. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ, ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ хостСры, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ VPS ΠΈ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… сСрвСров, ΠΈ Π΄Π°ΠΆΠ΅ бизнСс-Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΠΈ, ΡΡ€Π°Π²Π½ΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ отказоустойчивости, ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ с ΠΎΠ΄Π½ΠΈΠΌ ΠΈ Ρ‚Π΅ΠΌ ΠΆΠ΅ Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ вопросом: насколько Ρ€Π°Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΊΠ»ΠΎΠ½ΠΈΡ‚ΡŒ ΠΏΠ»ΠΎΡ…ΠΎΠΉ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΎΠ½ соТТёт врСмя ΠΈ рСсурсы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ΡŒ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅? НСкоторыС Π°Ρ‚Π°ΠΊΠΈ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ сам ΠΊΠ°Π½Π°Π» связи, Π½ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ врСдоносныС ситуации ΠΏΡ€ΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ€Π°Π½ΡŒΡˆΠ΅ β€” ΠΊΠ°ΠΊ Π΄Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Π² сСкунду Π½Π° хост Π·Π°Π΄ΠΎΠ»Π³ΠΎ Π΄ΠΎ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ насыщСния ΠΊΠ°Π½Π°Π»Π°.

ИмСнно здСсь XDP становится достойным изучСния. Он Π½Π΅ замСняСт Π²Ρ‹ΡˆΠ΅ΡΡ‚ΠΎΡΡ‰ΡƒΡŽ Π·Π°Ρ‰ΠΈΡ‚Ρƒ, мСТсСтСвой экран ΠΈΠ»ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π§Ρ‚ΠΎ ΠΎΠ½ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ β€” это Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π±ΠΎΠ»Π΅Π΅ ранняя ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ Ρ‚ΠΎΡ‡ΠΊΠ° Π² ΠΏΡƒΡ‚ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Linux. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ XDP, ΠΏΠΎΡ‡Π΅ΠΌΡƒ эта Β«Π±ΠΎΠ»Π΅Π΅ ранняя» позиция Π²Π°ΠΆΠ½Π° для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΡ‚ DDoS ΠΈ Π³Π΄Π΅ ΠΎΠ½ вписываСтся Π² рСалистичный стСк. Для понимания ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Π°ΠΌ сначала понадобится лишь нСбольшой Π½Π°Π±ΠΎΡ€ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ².

ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹ XDP Π·Π° 2 ΠΌΠΈΠ½ΡƒΡ‚Ρ‹

НСкоторыС Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹ Π²ΠΎΠΊΡ€ΡƒΠ³ XDP ΠΏΠ΅Ρ€Π΅ΡΠ΅ΠΊΠ°ΡŽΡ‚ΡΡ ΠΈ ΠΏΠΎΠ½Π°Ρ‡Π°Π»Ρƒ Π·Π²ΡƒΡ‡Π°Ρ‚ Π±ΠΎΠ»Π΅Π΅ ΠΏΡƒΠ³Π°ΡŽΡ‰Π΅, Ρ‡Π΅ΠΌ Π΅ΡΡ‚ΡŒ Π½Π° самом Π΄Π΅Π»Π΅. Π­Ρ‚ΠΎ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ. ЦСль этого глоссария β€” Π½Π΅ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ ΡΡ‚Π°Ρ‚ΡŒΡŽ Π² ΡƒΡ€ΠΎΠΊ ΠΏΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΌΡƒ устройству Linux. Π­Ρ‚ΠΎ просто достаточный словарный запас, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅ объяснСниС Π²ΠΎΡΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π»ΠΎΡΡŒ Ρ‡Ρ‘Ρ‚ΠΊΠΎ.

Π’Π΅Ρ€ΠΌΠΈΠ½Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ простым языком
πŸ“¦ XDPΠ₯ΡƒΠΊ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Π² Linux, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ Ρ€Π°Π½Π½Π΅Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΎ входящСм ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ сСтСвой стСк Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ Π½Π°Π΄ Π½ΠΈΠΌ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ.
🧩 eBPFБСзопасный ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Π²Π½ΡƒΡ‚Ρ€ΠΈ ядра Linux, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ нСбольшим ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Ρ… Ρ‚ΠΎΡ‡ΠΊΠ°Ρ… ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Π°.
πŸ”Œ NIC driverΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ Linux Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с сСтСвой ΠΊΠ°Ρ€Ρ‚ΠΎΠΉ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΎΡ‚ Π½Π΅Ρ‘ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹.
πŸ› οΈ kernel networking stackΠžΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Linux ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² послС ΠΈΡ… прибытия, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΡŽ, мСТсСтСвоС экранированиС, сокСты ΠΈ доставку прилоТСниям.
🐧 native modeΠ‘ΠΎΠ»Π΅Π΅ быстрый ΠΏΡƒΡ‚ΡŒ XDP, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° выполняСтся Π² ΠΏΡƒΡ‚ΠΈ ΠΏΡ€ΠΈΡ‘ΠΌΠ° Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π°Π½ΠΎ, насколько ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠ΅ обСспСчСниС ΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€.
πŸ“₯ skb / generic modeΠ Π΅ΠΆΠΈΠΌ совмСстимости, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ XDP ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π½ΠΎ ΠΏΠΎΠ·ΠΆΠ΅ Π² ΠΏΡƒΡ‚ΠΈ ΠΈ с мСньшим Π²Ρ‹ΠΈΠ³Ρ€Ρ‹ΡˆΠ΅ΠΌ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с native mode.
πŸ”‘ BPF mapsΠžΠ±Ρ‰ΠΈΠ΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Β«ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅Β», ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ XDP ΠΈ инструмСнтам ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ пространства ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΈΠ»ΠΈ счётчики.
🚦 xdp-loaderΠ˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ пространства для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΈ управлСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ XDP Π½Π° интСрфСйсах.
🧹 xdp-filterΠŸΡ€ΠΎΡΡ‚Π°Ρ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ Π½Π° основС XDP, ΡƒΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‰Π°Ρ Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€Π°Ρ†ΠΈΡŽ повСдСния XDP Π±Π΅Π· написания ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° eBPF.

Если Π²Ρ‹ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅ ΠΈΠ· этой Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ: eBPF β€” это ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ, Π° XDP β€” ΠΎΠ΄Π½ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ΅ мСсто, Π³Π΄Π΅ этот ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ. ИмСя это Π² Π²ΠΈΠ΄Ρƒ, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ шаг β€” Π±ΠΎΠ»Π΅Π΅ простой ΠΈ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ вопрос: Ρ‡Ρ‚ΠΎ ΠΆΠ΅ Π½Π° самом Π΄Π΅Π»Π΅ Π΄Π΅Π»Π°Π΅Ρ‚ XDP?

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ XDP Π½Π° самом Π΄Π΅Π»Π΅

whatis

XDP β€” это Ρ€Π°Π½Π½ΠΈΠΉ Ρ…ΡƒΠΊ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Π² Linux. Он позволяСт систСмС Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π½Π΅Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ eBPF Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ сразу послС Π΅Π³ΠΎ прибытия Π½Π° сСтСвой интСрфСйс. Π’ этот ΠΌΠΎΠΌΠ΅Π½Ρ‚ Linux ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ быстроС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅: ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚ дальшС (XDP_PASS), Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ ΠΎΡ‚Π±Ρ€ΠΎΡΠΈΡ‚ΡŒ Π΅Π³ΠΎ (XDP_DROP) ΠΈΠ»ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΌ способом. Для этой ΡΡ‚Π°Ρ‚ΡŒΠΈ ваТная Ρ‡Π°ΡΡ‚ΡŒ проста: XDP ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ Β«ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒΒ» ΠΈΠ»ΠΈ Β«ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ здСсь» ΠΎΡ‡Π΅Π½ΡŒ Ρ€Π°Π½ΠΎ.

Linux ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ eBPF Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… контСкстах, Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² сСтСвых. XDP β€” это сСтСвая вСрсия, созданная для ΠΎΡ‡Π΅Π½ΡŒ Ρ€Π°Π½Π½Π΅ΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ входящих ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ². Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, XDP β€” это Π½Π΅ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ слово для eBPF. Π­Ρ‚ΠΎ ΠΎΠ΄ΠΈΠ½ инструмСнт Π½Π° основС eBPF с ΠΎΡ‡Π΅Π½ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Ρ€ΠΎΠ»ΡŒΡŽ.

ИмСнно эта Ρ€ΠΎΠ»ΡŒ Π΄Π΅Π»Π°Π΅Ρ‚ XDP ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΡ‚ DDoS. XDP выполняСтся Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ проходят Ρ‡Π΅Ρ€Π΅Π· ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅, Π±ΠΎΠ»Π΅Π΅ тяТёлыС части сСтСвого ΠΏΡƒΡ‚ΠΈ Linux. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Linux ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ΅ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΠΎΡ‚Ρ€Π°Ρ‚ΠΈΡ‚ большС усилий Π½Π° мСТсСтСвоС экранированиС, отслСТиваниС соСдинСний, сокСты ΠΈ Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ счётС само ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π’ΠΎΡ‚ ΠΏΠΎΡ‡Π΅ΠΌΡƒ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ΅ прСимущСство XDP β€” Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ, Π° Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ Π½Π° Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π½Π½Π΅ΠΌ этапС.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, XDP ΠΏΠΎΠ»Π΅Π·Π΅Π½ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΡ‚ DDoS. Он Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠΎΠΌ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ². Но Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS β€” это самоС простоС мСсто, Π³Π΄Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π΅Π³ΠΎ Ρ†Π΅Π½Π½ΠΎΡΡ‚ΡŒ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ прСимущСство сводится ΠΊ ΠΎΠ΄Π½ΠΎΠΉ практичСской ΠΈΠ΄Π΅Π΅: Ρ‡Π΅ΠΌ Ρ€Π°Π½ΡŒΡˆΠ΅ отклоняСтся ΠΏΠ»ΠΎΡ…ΠΎΠΉ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ, Ρ‚Π΅ΠΌ мСньшС бСсполСзной Ρ€Π°Π±ΠΎΡ‚Ρ‹ приходится Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ сСрвСру. И Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ это Ρ‚Π°ΠΊ Π²Π°ΠΆΠ½ΠΎ, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ шаг β€” Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚ΠΎ мСсто, Π³Π΄Π΅ XDP находится Π² ΠΏΡƒΡ‚ΠΈ ΠΏΡ€ΠΈΡ‘ΠΌΠ° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ².

ΠœΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Π°Ρ модСль: XDP β€” это Π²ΠΎΡ€ΠΎΡ‚Π°, Π° Π½Π΅ стойка рСгистрации

model

ΠŸΡ€ΠΎΡ‰Π΅ всСго ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ XDP ΠΊΠ°ΠΊ ΠΎΡ…Ρ€Π°Π½Π½ΠΈΠΊΠ° Ρƒ Π²ΠΎΡ€ΠΎΡ‚, Π° Π½Π΅ ΠΊΠ°ΠΊ администратора Π³Π»ΡƒΠ±ΠΆΠ΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ здания. Если явно Π½Π΅ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ посСтитСля Ρ€Π°Π·Π²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°ΡŽΡ‚ Ρƒ Π²ΠΎΡ€ΠΎΡ‚, Π·Π΄Π°Π½ΠΈΠ΅ ΠΈΠ·Π±Π΅Π³Π°Π΅Ρ‚ Π΄Π»ΠΈΠ½Π½ΠΎΠΉ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ бСссмыслСнной Ρ€Π°Π±ΠΎΡ‚Ρ‹. Никто Π½Π΅ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΡŽΡŽ Π΄Π²Π΅Ρ€ΡŒ, Π½Π΅ рСгистрируСт Π΅Π³ΠΎ Π² систСмС ΠΈ Π½Π΅ Π²Π΅Π΄Ρ‘Ρ‚ ΠΏΠΎ ΠΊΠΎΡ€ΠΈΠ΄ΠΎΡ€Ρƒ. Если ΠΆΠ΄Π°Ρ‚ΡŒ Π΄ΠΎ стойки рСгистрации, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒ Π΅ΠΌΡƒ, Π·Π΄Π°Π½ΠΈΠ΅ ΡƒΠΆΠ΅ ΠΏΠΎΡ‚Ρ€Π°Ρ‚ΠΈΠ»ΠΎ врСмя ΠΈ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π΅ Π½Π° Ρ‚ΠΎΠ³ΠΎ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ°.

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Π² Linux Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚Π°ΠΊ ΠΆΠ΅. Π’ ΡƒΠΏΡ€ΠΎΡ‰Ρ‘Π½Π½ΠΎΠΌ ΠΏΡƒΡ‚ΠΈ ΠΏΡ€ΠΈΡ‘ΠΌΠ° ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΏΡ€ΠΈΠ±Ρ‹Π²Π°Π΅Ρ‚ ΠΎΡ‚ NIC ΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°, достигаСт XDP, ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ ΠΏΡƒΡ‚ΡŒ Π² Π±ΠΎΠ»Π΅Π΅ Π±ΠΎΠ³Π°Ρ‚Ρ‹ΠΉ сСтСвой стСк ядра, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΈΡ‚Π°Π΅Ρ‚ conntrack, мСТсСтСвоС экранированиС, сокСты ΠΈ Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ счётС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π’ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎ ΠΏΡƒΡ‚ΡŒ выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

NIC / driver
    ↓
XDP  ← earliest checkpoint
    ↓
kernel networking stack
    ↓
conntrack / firewall
    ↓
socket
    ↓
application

Π’ native mode XDP ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Linux Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ ΠΈ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ ΠΎΠ±Ρ‹Ρ‡Π½ΡƒΡŽ структуру sk_buff β€” Π±ΠΎΠ»Π΅Π΅ Π±ΠΎΠ³Π°Ρ‚Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΏΠ°ΠΊΠ΅Ρ‚Π° ядра, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ ΠΎΡΡ‚Π°Π»ΡŒΠ½Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ стСка. Π­Ρ‚Π° Π΄Π΅Ρ‚Π°Π»ΡŒ каТСтся Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ, Π½ΠΎ ΠΎΠ½Π° являСтся ΡΡƒΡ‚ΡŒΡŽ истории ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Если ΠΏΠ°ΠΊΠ΅Ρ‚ явно Π½Π΅ΠΆΠ΅Π»Π°Ρ‚Π΅Π»Π΅Π½, Π΅Π³ΠΎ отбрасываниС Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Linux построит эту ΠΎΠ±Ρ‹Ρ‡Π½ΡƒΡŽ структуру, ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ мСньшС Ρ€Π°Π±ΠΎΡ‚Ρ‹ CPU, мСньшС Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π½Π° ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΈ мСньшС давлСния Π½Π° ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ этапы. XDP_PASS сущСствуСт ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π½Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΏΠ»ΠΎΡ…ΠΎΠΉ; это дСйствиС Β«ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒΒ», ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ позволяСт Π»Π΅Π³ΠΈΡ‚ΠΈΠΌΠ½ΠΎΠΌΡƒ Ρ‚Ρ€Π°Ρ„ΠΈΠΊΡƒ Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒΡΡ дальшС. XDP_DROP β€” Π·Π²Π΅Π·Π΄Π° Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΡ‚ DDoS, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ ΠΏΡƒΡ‚ΡŒ Π΄ΠΎ Π½Π°Ρ‡Π°Π»Π° дорогостоящСй части. Π”Ρ€ΡƒΠ³ΠΈΠ΅ дСйствия, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ REDIRECT, Ρ‚ΠΎΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚, Π½ΠΎ ΠΎΠ½ΠΈ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌΠΈ для этого объяснСния.

Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ располоТСниС становится понятным, Ρ†Π΅Π½Π½ΠΎΡΡ‚ΡŒ для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΡ‚ DDoS β€” ΠΈ ограничСния β€” становятся Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π»Π΅Π³Ρ‡Π΅ ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ рСалистично.

Как XDP ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π² Π·Π°Ρ‰ΠΈΡ‚Π΅ ΠΎΡ‚ DDoS β€” ΠΈ Π³Π΄Π΅ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ Π΅Π³ΠΎ ограничСния

model

АргумСнт Π² ΠΏΠΎΠ»ΡŒΠ·Ρƒ XDP для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΡ‚ DDoS прост: это Π΄Π΅ΡˆΡ‘Π²Ρ‹ΠΉ способ ΠΎΡ‚ΠΊΠ»ΠΎΠ½ΠΈΡ‚ΡŒ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΉ мусор Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Linux ΠΏΠΎΡ‚Ρ€Π°Ρ‚ΠΈΡ‚ рСсурсы Π½Π° conntrack, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ сокСтов ΠΈ доставку Π² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ΅ пространство. Если хост подвСргаСтся Π±ΠΎΠΌΠ±Π°Ρ€Π΄ΠΈΡ€ΠΎΠ²ΠΊΠ΅ высокоскоростным Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² любом случаС Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π΄ΠΎΡΡ‚ΠΈΠ³Π°Ρ‚ΡŒ прилоТСния, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π½ΠΎ ΠΎΡ‚Π±Ρ€ΠΎΡˆΠ΅Π½Π½Ρ‹ΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚ β€” это Ρ€Π°Π±ΠΎΡ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ сСрвСру большС Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΏΠΎΠ·ΠΆΠ΅. Π’ΠΎΡ‚ ΠΏΠΎΡ‡Π΅ΠΌΡƒ XDP Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ эффСктивСн Π½Π° Π³Ρ€Π°Π½ΠΈΡ†Π΅ L3/L4 ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹: исходныС адрСса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π²Ρ‹ ΡƒΠΆΠ΅ Π½Π΅ довСряСтС, ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹, ΠΈΠ»ΠΈ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ явно Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π»Π΅Π³ΠΈΡ‚ΠΈΠΌΠ½Ρ‹ΠΌΠΈ для Π΄Π°Π½Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ.

Π­Ρ‚ΠΎ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½ΠΎ Π²ΠΎ врСмя мусорных Ρ„Π»ΡƒΠ΄ΠΎΠ², Π³Π΄Π΅ болСзнСнная Ρ‡Π°ΡΡ‚ΡŒ β€” Π½Π΅ ΠΎΠ±ΡŠΡ‘ΠΌ сырых Π΄Π°Π½Π½Ρ‹Ρ…, Π° повторная ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ². ΠžΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ прокси, UDP-интСнсивный сСрвис ΠΈΠ»ΠΈ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ API ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°ΠΌΠ΅Π΄Π»ΠΈΡ‚ΡŒΡΡ Π·Π°Π΄ΠΎΠ»Π³ΠΎ Π΄ΠΎ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ насыщСния ΠΊΠ°Π½Π°Π»Π°, Ссли хост занят классификациСй бСссмыслицы. XDP Π΄Π°Ρ‘Ρ‚ Π²Π°ΠΌ способ ΠΎΡ‚ΡΠ΅Ρ‡ΡŒ Ρ‡Π°ΡΡ‚ΡŒ этих ΠΏΠΎΡ‚Π΅Ρ€ΡŒ Π±Π»ΠΈΠ·ΠΊΠΎ ΠΊ Π²Ρ…ΠΎΠ΄Ρƒ.

πŸ“ ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: XDP Π»ΡƒΡ‡ΡˆΠ΅ Π·Π°Ρ‰ΠΈΡ‰Π°Π΅Ρ‚ рСсурсы хоста, Ρ‡Π΅ΠΌ насыщСнный Π²Ρ‹ΡˆΠ΅ΡΡ‚ΠΎΡΡ‰ΠΈΠΉ ΠΊΠ°Π½Π°Π». Если ΠΊΠ°Π½Π°Π» ΠΊ ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Ρƒ ΡƒΠΆΠ΅ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½, Ρ€Π°Π½Π½Π΅Π΅ отбрасываниС Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ хоста слишком Π·Π°ΠΏΠΎΠ·Π΄Π°Π»ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ сСтСвой ΠΏΡƒΡ‚ΡŒ.

Π­Ρ‚ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ являСтся Π³Π»Π°Π²Π½ΠΎΠΉ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ XDP ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ ΠΊ ΠΌΠ½ΠΎΠ³ΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅, Π° Π½Π΅ стоит Π½Π° ΠΏΡŒΠ΅Π΄Π΅ΡΡ‚Π°Π»Π΅. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ Ρ‚Π°Π±Π»ΠΈΡ†Π° β€” практичСская вСрсия сравнСния XDP vs nftables vs upstream/provider mitigation:

Π£Ρ€ΠΎΠ²Π΅Π½ΡŒΠ“Π΄Π΅ дСйствуСтЧто Π·Π°Ρ‰ΠΈΡ‰Π°Π΅Ρ‚ Π»ΡƒΡ‡ΡˆΠ΅ всСгоЧто Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π² ΠΎΠ΄ΠΈΠ½ΠΎΡ‡ΠΊΡƒΠ›ΡƒΡ‡ΡˆΠ°Ρ Ρ€ΠΎΠ»ΡŒ Π² стСкС
XDPНа самой Ρ€Π°Π½Π½Π΅ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠ΅ ΠΏΡ€ΠΈΡ‘ΠΌΠ° Ρ…ΠΎΡΡ‚Π°Π‘Ρ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ CPU ΠΈ ΠΏΡƒΡ‚ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΎΡ‚ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ Π½Π΅ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ трафикаНасыщСнный ΠΊΠ°Π½Π°Π», ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° с отслСТиваниСм состояния ΠΈΠ»ΠΈ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ с ΡƒΡ‡Ρ‘Ρ‚ΠΎΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Ρ€Π°Π½Π½Π΅Π³ΠΎ отбрасывания
nftablesΠ“Π»ΡƒΠ±ΠΆΠ΅ Π² сСтСвом стСкС Ρ…ΠΎΡΡ‚Π°ΠœΠ΅ΠΆΡΠ΅Ρ‚Π΅Π²ΠΎΠ΅ экранированиС с отслСТиваниСм состояния, Π±ΠΎΠ»Π΅Π΅ богатая ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°, хост-ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ с ΡƒΡ‡Ρ‘Ρ‚ΠΎΠΌ ΡΠ΅Ρ€Π²ΠΈΡΠΎΠ²Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Ρ€Π°Π±ΠΎΡ‚Π° хоста, ΡƒΠΆΠ΅ потрачСнная Π½Π° доставку ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Π΄ΠΎ этого ΡƒΡ€ΠΎΠ²Π½ΡΠžΡΠ½ΠΎΠ²Π½ΠΎΠΉ мСТсСтСвой экран хоста ΠΈ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊ
Π’Ρ‹ΡˆΠ΅ΡΡ‚ΠΎΡΡ‰Π°Ρ / провайдСрская Π·Π°Ρ‰ΠΈΡ‚Π°Π”ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ достигаСт вашСго сСрвСраНасыщСниС ΠΊΠ°Π½Π°Π»Π°, Π±ΠΎΠ»Π΅Π΅ ΠΊΡ€ΡƒΠΏΠ½Ρ‹Π΅ ΠΎΠ±ΡŠΡ‘ΠΌΠ½Ρ‹Π΅ Ρ„Π»ΡƒΠ΄Ρ‹, Π±ΠΎΠ»Π΅Π΅ ΡˆΠΈΡ€ΠΎΠΊΠ°Ρ граничная Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡΠ”Π΅Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ контСкст хоста ΠΈΠ»ΠΈ локальная ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°, спСцифичная для ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠ’Π½Π΅ΡˆΠ½ΠΈΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄ сСрвСром

Π˜Π½Ρ‹ΠΌΠΈ словами, XDP ΠΈ nftables β€” Π½Π΅ Π²Ρ€Π°Π³ΠΈ. Они Ρ€Π΅ΡˆΠ°ΡŽΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅ части ΠΏΡƒΡ‚ΠΈ. nftables Π±ΠΎΠ³Π°Ρ‡Π΅ ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с отслСТиваниСм состояния. xdp-filter β€” дСмонстрационный инструмСнт, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ β€” Π½Π°ΠΌΠ΅Ρ€Π΅Π½Π½ΠΎ прост ΠΈ Π½Π΅ отслСТиваСт состояниС, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ поэтому ΠΏΠΎΠ»Π΅Π·Π΅Π½ для дСмонстрации ΠΌΠΎΠ΄Π΅Π»ΠΈ XDP Π±Π΅Π· ΠΏΡ€Π΅Ρ‚Π΅Π½Π·ΠΈΠΉ Π½Π° Π·Π°ΠΌΠ΅Π½Ρƒ ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎΠ³ΠΎ мСТсСтСвого экрана. Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ отслСТиваниС соСдинСний, ΠΌΠ½ΠΎΠ³ΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Π΅ списки Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° состояния ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ² ΠΈΠ»ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π° с ΡƒΡ‡Ρ‘Ρ‚ΠΎΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π²Ρ‹ ΡƒΠΆΠ΅ описываСтС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ Π³Π»ΡƒΠ±ΠΆΠ΅, Ρ‡Π΅ΠΌ эта дСмонстрационная ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π°.

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡ‚Π²Π΅Π½Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ отбрасываниС Π² стилС XDP, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ€Π°Π½Π½Π΅Π΅ отбрасываниС сниТаСт Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Π½Π° ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ этапы. Π˜ΡΡ‚ΠΎΡ€ΠΈΡ L4Drop ΠΎΡ‚ Cloudflare β€” Ρ…ΠΎΡ€ΠΎΡˆΠΎ извСстный ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΠΎΠ³ΠΎ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ эта модСль стала ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π² Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… опСрациях. Но Π²Π°ΠΆΠ½Ρ‹ΠΉ ΡƒΡ€ΠΎΠΊ β€” Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΠΎΠ΅ число ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Π² сСкунду. Π­Ρ‚ΠΎ Π»ΠΎΠ³ΠΈΠΊΠ° проСктирования: отклоняйтС ΠΏΠ»ΠΎΡ…ΠΎΠΉ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ Ρ€Π°Π½ΡŒΡˆΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡΡ‚Π°Π»ΡŒΠ½Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ ΠΌΠΎΠ³Π»Π° дольшС ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ.

Π Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ сильно зависят ΠΎΡ‚ срСды. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° NIC ΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°, Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π»ΠΈ XDP Π² native ΠΈΠ»ΠΈ skb Ρ€Π΅ΠΆΠΈΠΌΠ΅, ΠΈ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ входящСго Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° β€” всё это влияСт Π½Π° Ρ‚ΠΎ, ΠΊΠ°ΠΊΡƒΡŽ Ρ€Π΅Π°Π»ΡŒΠ½ΡƒΡŽ Π²Ρ‹Π³ΠΎΠ΄Ρƒ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅. Π’ΠΎΡ‚ ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Π΅ Ρ†ΠΈΡ„Ρ€Ρ‹ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Π² сСкунду ΠΎΡ‚ Π²Π΅Π½Π΄ΠΎΡ€ΠΎΠ² ΠΈΠ»ΠΈ гипСрскСйлСров Π»ΡƒΡ‡ΡˆΠ΅ Π²ΠΎΡΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΊΠ°ΠΊ Π΄ΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ модСль Ρ€Π°Π½Π½Π΅Π³ΠΎ отбрасывания Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π° Π½Π΅ ΠΊΠ°ΠΊ числа, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… слСдуСт ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ VPS. ИмСя это Π² Π²ΠΈΠ΄Ρƒ, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π°Π·Π΄Π΅Π» ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊ XDP выглядит Π½Π° Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ хостС Ubuntu Ρ‡Π΅Ρ€Π΅Π· нСсколько бСзопасных опСраторских снимков.

Как XDP выглядит Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ β€” снимки ΠΊΠΎΠΌΠ°Π½Π΄

practice

Π­Ρ‚ΠΎΡ‚ Ρ€Π°Π·Π΄Π΅Π» прСдставляСт собой снимок подтвСрТдСния ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ. ЦСль β€” ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ XDP Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΌ Π½Π° Ubuntu 24.04 с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ Π½Π°Π±ΠΎΡ€ΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄: достаточно для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΠΎΡΡŒ, добавлСния ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π° с Π½ΠΈΠ·ΠΊΠΈΠΌ риском ΠΈ чтСния Π²Π°ΠΆΠ½Ρ‹Ρ… счётчиков.

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ ΠΊ настройкС XDP, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ сначала ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ ΠΈ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ имя интСрфСйса.

ip -br link

interfaces

УстановитС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹.

sudo apt update
sudo apt install -y xdp-tools

install

Π’ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ Π½ΠΈΠΆΠ΅ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ <ifname> Π½Π° фактичСскоС имя вашСго сСтСвого интСрфСйса, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ eth0 ΠΈΠ»ΠΈ ens3.

sudo xdp-filter load -m skb <ifname>

ΠŸΠ΅Ρ€Π²Ρ‹Π΅ Π΄Π²Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‚ Π·Π° установку Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… инструмСнтов, обСспСчивая Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π² срСдС всСго Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ для запуска дСмонстрации.

Π’Ρ€Π΅Ρ‚ΡŒΡ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π·Π°Ρ‚Π΅ΠΌ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ xdp-filter Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ skb с ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΎΠΉ allow ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. На хостС Ubuntu, использованном для этой ΡΡ‚Π°Ρ‚ΡŒΠΈ, это Π΄Π°Π»ΠΎ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ xdpfilt_alw_all с ΠΏΠΎΠ»Π½Ρ‹ΠΌ Π½Π°Π±ΠΎΡ€ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ tcp,udp,ipv6,ipv4,ethernet,allow. Π’Ρ‹Π±ΠΎΡ€ -m skb позволяСт ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ΅ native XDP Π² вашСм NIC ΠΈΠ»ΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π΅, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Π΅Π³ΠΎ Π±ΠΎΠ»Π΅Π΅ бСзопасным ΠΏΡƒΡ‚Ρ‘ΠΌ для ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ подтвСрТдСния ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ.

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΠ»Π°ΡΡŒ, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅:

sudo xdp-filter status
ip -details link show dev <ifname>

Π’ Π²Ρ‹Π²ΠΎΠ΄Π΅ xdp-filter status Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ваш интСрфСйс, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ с skb mode; Π½Π° тСстовом хостС здСсь Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΏΠΎΠΊΠ°Π·Π°Π» tcp,udp,ipv6,ipv4,ethernet,allow. Π’ Π²Ρ‹Π²ΠΎΠ΄Π΅ ip -details link show ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ xdpgeneric ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° xdp_dispatcher ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ generic XDP Π°ΠΊΡ‚ΠΈΠ²Π΅Π½ Π½Π° этом интСрфСйсС.

check

⚠️ ΠŸΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅: НС тСстируйтС ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ Π·Π°ΠΏΡ€Π΅Ρ‚Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΠ»ΠΈ ΡˆΠΈΡ€ΠΎΠΊΠΈΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° отбрасывания Π½Π° ΠΆΠΈΠ²ΠΎΠΌ ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΠΎΠΌ интСрфСйсС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ нСсёт Π²Π°ΡˆΡƒ SSH-сСссию, Ссли Ρƒ вас Π½Π΅Ρ‚ консольного восстановлСния. ИмСнно ΠΏΠΎ этой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° allow ΠΈ ΠΎΠ΄Π½ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ с адрСсом ΠΈΠ· Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ.

Π”Π°Π»Π΅Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ возмоТностСй. Π­Ρ‚ΠΎ сообщаСт Π²Π°ΠΌ, Ρ‡Ρ‚ΠΎ NIC ΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Π² повСрхности XDP, Π° Π½Π΅ ΠΊΠ°ΠΊΠΎΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ваша конСчная ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ.

sudo xdp-loader features <ifname>

Π’ΠΎΡ‡Π½Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄ зависит ΠΎΡ‚ оборудования, Π½ΠΎ Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ часто содСрТит строки Π²Ρ€ΠΎΠ΄Π΅ этих:

feature

НаиболСС Π²Π°ΠΆΠ½Ρ‹ΠΌ здСсь являСтся NETDEV_XDP_ACT_BASIC, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ Π²Π°ΠΌ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡƒΡ‚ΡŒ прСдоставляСт Π±Π°Π·ΠΎΠ²ΡƒΡŽ модСль дСйствий XDP. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„Π»Π°Π³ΠΈ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° пСрСнаправлСния, ΠΏΠΎΠ»Π΅Π·Π½Ρ‹, Π½ΠΎ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ для простого подтвСрТдСния ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΡ‚ DDoS.

Π”Π°Π»Π΅Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅, ΠΊΠ°ΠΊ Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ XDP управляСт ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ ΠΈ Π² ΠΊΠ°ΠΊΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΎΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.

sudo xdp-loader status

На Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅ΠΉ систСмС прСдставлСниС статуса ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

loader

Π­Ρ‚ΠΎ нСбольшая, Π½ΠΎ ваТная ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° для ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°. Она ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ XDP β€” Π½Π΅ просто концСпция ΠΏΡ€Π°Π²ΠΈΠ»Π°, Тивущая Π² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ пространствС β€” Π½Π° интСрфСйсС Π΅ΡΡ‚ΡŒ загруТСнная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, ΠΈ столбСц Ρ€Π΅ΠΆΠΈΠΌΠ° Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ Π²Π°ΠΌ, смотритС Π»ΠΈ Π²Ρ‹ Π½Π° native ΠΈΠ»ΠΈ skb.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΎΠ΄Π½ΠΎ бСзопасноС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ IP-адрСс. Π€Π»Π°Π³ -s ΠΏΠΎΠ»Π΅Π·Π΅Π½, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅Π΅ состояниС ΠΏΡ€Π°Π²ΠΈΠ»Π°, вмСсто Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ вас с ΠΌΠΎΠ»Ρ‡Π°Π»ΠΈΠ²Ρ‹ΠΌ успСхом.

sudo xdp-filter ip -s -m src 192.0.2.1

Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

filter

πŸ“ ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: xdp-filter ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΡƒ allow. Π˜Π½Ρ‹ΠΌΠΈ словами, ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Ρƒ, ΠΎΡ‚Π±Ρ€Π°ΡΡ‹Π²Π°ΡŽΡ‚ΡΡ, Π° ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹, Π½Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Ρƒ, ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡŽΡ‚ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌΡƒ ΠΏΡƒΡ‚ΠΈ.

Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π½Π°ΠΌΠ΅Ρ€Π΅Π½Π½ΠΎ скучСн. Π’ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ… Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΡ‚ DDoS ΠΎΠ½ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΡƒΡŽ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ ΠΏΡ€Π°Π²ΠΈΠ»Π° Ρ€Π°Π½Π½Π΅Π³ΠΎ отбрасывания: Ρ‚Ρ€Π°Ρ„ΠΈΠΊ ΠΈΠ· источника, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ΅Π½, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΊΠ»ΠΎΠ½Ρ‘Π½ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΡΡ‚Π°Π»ΡŒΠ½Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ хоста Π²Π»ΠΎΠΆΠΈΡ‚ Π² Π½Π΅Π³ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹.

НаконСц, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ ΠΎΠ±Ρ‰Π΅Π΅ состояниС Π² ΠΎΠ΄Π½ΠΎΠΌ мСстС.

sudo xdp-filter status

На Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΎΠΉ систСмС шаблон Π²Ρ‹Π²ΠΎΠ΄Π° являСтся Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌ.

filter-status

Π­Ρ‚ΠΎ прСдставлСниС статуса β€” Ρ‚ΠΎ мСсто, Π³Π΄Π΅ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ становится ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹ΠΉ интСрфСйс, Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ, Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ xdp-filter, эффСктивный Π½Π°Π±ΠΎΡ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ состояниС счётчиков для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π° Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π΅. XDP_ABORTED, Ссли ΠΎΠ½ появляСтся, являСтся Π³Π»Π°Π²Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΊΠΎΡ€Π·ΠΈΠ½ΠΎΠΉ ошибок/ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ, Π° Π½Π΅ дСйствиСм, Π²ΠΎΠΊΡ€ΡƒΠ³ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π²Ρ‹ строитС ΠΏΠ»Π°Π½Ρ‹. Π§Ρ‚ΠΎ Π±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½ΠΎ, Ссли счётчик отбрасывания остаётся Π½Π° 0, это Π½Π΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ Π½Π΅ сработал. Π­Ρ‚ΠΎ лишь ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚ Π½Π΅ ΠΏΠΎΠΏΠ°Π» ΠΏΠΎΠ΄ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠΊΠ½Π° Π·Π°Ρ…Π²Π°Ρ‚Π°.

πŸ’‘ Π’Ρ‹Π²ΠΎΠ΄: ΠžΡ‚Π½ΠΎΡΠΈΡ‚Π΅ΡΡŒ ΠΊ xdp-filter ΠΊΠ°ΠΊ ΠΊ простому, Π½Π΅ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°ΡŽΡ‰Π΅ΠΌΡƒ состояниС инструмСнту подтвСрТдСния ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ, Π° Π½Π΅ ΠΊΠ°ΠΊ ΠΊ Π·Π°ΠΌΠ΅Π½Π΅ nftables. Π’Π°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅ΠΉΡ‚Π΅ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹, ΠΎΡ‚Π±Ρ€ΠΎΡˆΠ΅Π½Π½Ρ‹Π΅ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ XDP, ΠΌΠΎΠ³ΡƒΡ‚ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΏΠΎΡΠ²ΠΈΡ‚ΡŒΡΡ Π² ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌ ΠΏΡƒΡ‚ΠΈ tcpdump, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ статуса ΠΈ счётчики, спСцифичныС для XDP, Π±ΠΎΠ»Π΅Π΅ Π½Π°Π΄Ρ‘ΠΆΠ½Ρ‹ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΆΠΈΠ²ΠΎΠΉ Π²ΠΈΠ΄ ΠΏΠΎΠ·ΠΆΠ΅, sudo xdp-filter poll -i 2000 β€” Ρ€Π°Π·ΡƒΠΌΠ½Ρ‹ΠΉ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ шаг β€” Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠ³Π΄Π° Π½Π° интСрфСйсС ΡƒΠΆΠ΅ достаточно интСрСсного Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ этот Π²Ρ‹Π²ΠΎΠ΄ Π±Ρ‹Π» ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ.

ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ бСзопасной дСмонстрации Π΄Π΅Π»Π°Π΅Ρ‚ идСю ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ. РСальноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, ΠΎΠ΄Π½Π°ΠΊΠΎ, Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π½Π΅ Π² Ρ‚ΠΎΠΌ, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π»ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹. Оно Π² Ρ‚ΠΎΠΌ, стоит Π»ΠΈ этот Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ слоТности Π½Π° Ρ‚ΠΎΠΌ Π²ΠΈΠ΄Π΅ инфраструктуры, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π²Ρ‹ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ управляСтС.

Когда XDP стоит Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ для VPS ΠΈ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… сСрвСров

choice

XDP становится интСрСсным, ΠΊΠΎΠ³Π΄Π° ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎ доступная рабочая Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ° тСряСт Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ процСссорноС врСмя Π½Π° Π½Π΅ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ. Π₯ΠΎΡ€ΠΎΡˆΠΈΠΌΠΈ ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚Π°ΠΌΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Π΅ API, ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Π΅ прокси, ΡˆΠ»ΡŽΠ·Ρ‹, UDP-интСнсивныС сСрвисы, доступныС ΠΈΠ· ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π°, ΠΈ хосты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ рСгулярно видят достаточно мусорного Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ сСтСвой ΠΏΡƒΡ‚ΡŒ, Π΄Π°ΠΆΠ΅ ΠΊΠΎΠ³Π΄Π° само ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ являСтся ΡƒΠ·ΠΊΠΈΠΌ мСстом. Π’ Ρ‚Π°ΠΊΠΈΡ… срСдах Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π½Π½Π΅Π΅ ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ запас рСсурсов сСрвСра.

Π•ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ΠΌΠ°Π»ΠΎ случаСв, ΠΊΠΎΠ³Π΄Π° достаточно Π±ΠΎΠ»Π΅Π΅ простой Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ. ΠœΠ°Π»ΠΎΠ½Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹ΠΉ Π²Π΅Π±-сайт, Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ инструмСнт, ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ сСрвСр ΠΈΠ»ΠΈ сСрвис, Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ΅ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ β€” мСТсСтСвоС экранированиС хоста с отслСТиваниСм состояния, Π° Π½Π΅ сниТСниС скорости ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ нуТдаСтся Π² XDP Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ. Если nftables ΡƒΠΆΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ риск Π±Π΅Π· Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎΠ³ΠΎ давлСния Π½Π° ΠΏΡƒΡ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π΅Ρ‰Ρ‘ ΠΎΠ΄Π½ΠΎΠ³ΠΎ уровня ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ большС двиТущихся частСй, Ρ‡Π΅ΠΌ цСнности.

Π’ качСствС быстрой схСмы принятия Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ:

  • ΠœΠ΅ΠΆΡΠ΅Ρ‚Π΅Π²ΠΎΠ³ΠΎ экранирования ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ достаточно, ΠΊΠΎΠ³Π΄Π° Ρ‚Ρ€Π°Ρ„ΠΈΠΊ Π½Π΅Π²Π΅Π»ΠΈΠΊ, ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ состояния ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ Π±ΠΎΠ³Π°Ρ‚ΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠΈ сСрвиса, ΠΈ хост явно Π½Π΅ сТигаСт CPU Π½Π° мусорных ΠΏΠ°ΠΊΠ΅Ρ‚Π°Ρ….
  • XDP становится достойным ΠΎΡ†Π΅Π½ΠΊΠΈ, ΠΊΠΎΠ³Π΄Π° Π½Π΅ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ достигаСт хоста достаточно часто, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π½Π½Π΅Π΅ отбрасываниС ΠΌΠΎΠ³Π»ΠΎ Π·Π°Ρ‰ΠΈΡ‚ΠΈΡ‚ΡŒ CPU, conntrack ΠΈ Ρ‘ΠΌΠΊΠΎΡΡ‚ΡŒ сокСтов.
  • Π’Ρ‹ΡˆΠ΅ΡΡ‚ΠΎΡΡ‰Π°Ρ Π·Π°Ρ‰ΠΈΡ‚Π° остаётся ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ, ΠΊΠΎΠ³Π΄Π° Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ ΠΎΡ‚ΠΊΠ°Π·Π° β€” насыщСниС ΠΊΠ°Π½Π°Π»Π° ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π° ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΊΡ€ΡƒΠΏΠ½Ρ‹Π΅ ΠΎΠ±ΡŠΡ‘ΠΌΠ½Ρ‹Π΅ Ρ„Π»ΡƒΠ΄Ρ‹ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π΄ΠΎΡΡ‚ΠΈΠ³Π°ΡŽΡ‚ вашСго сСрвСра.

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ VPS слСдуСт ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ ΠΎΠ± ΠΎΠ΄Π½ΠΎΠΉ ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΊΠ΅: Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡƒΡ‚ΠΈ NIC ΠΈ абстракция ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π° ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ оТидания ΠΎΡ‚ native mode, Π΄Π°ΠΆΠ΅ ΠΊΠΎΠ³Π΄Π° Ρ€Π΅ΠΆΠΈΠΌ skb Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ для дСмонстрации. Π’Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ сСрвСры ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π΄Π°ΡŽΡ‚ Π²Π°ΠΌ большС контроля Π½Π°Π΄ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°ΠΌΠΈ, ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈ Π½Π°Π±Π»ΡŽΠ΄Π°Π΅ΠΌΠΎΡΡ‚ΡŒΡŽ, поэтому ΡˆΠ°Π½ΡΡ‹ Π½Π° Π·Π½Π°Ρ‡ΠΈΠΌΡƒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ native mode Ρ‚Π°ΠΌ Π²Ρ‹ΡˆΠ΅ β€” Π½ΠΎ Π΄Π°ΠΆΠ΅ Π½Π° bare metal XDP всё Ρ€Π°Π²Π½ΠΎ являСтся ΠΎΠ΄Π½ΠΈΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ΠΌ, Π° Π½Π΅ ΠΏΠΎΠ»Π½Ρ‹ΠΌ ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠΌ. Если Π²Ρ‹ ΠΎΡ†Π΅Π½ΠΈΠ²Π°Π΅Ρ‚Π΅ AlexHost ΠΈΠ»ΠΈ любого Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π°, Π·Π°Π΄Π°ΠΉΡ‚Π΅ Ρ‚Ρ€ΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… вопроса вмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒ ΠΈΡ…: какая Π²Ρ‹ΡˆΠ΅ΡΡ‚ΠΎΡΡ‰Π°Ρ Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS сущСствуСт, сколько запаса рСсурсов хоста Π΄Π°Ρ‘Ρ‚ Π²Π°ΠΌ Ρ‚Π°Ρ€ΠΈΡ„Π½Ρ‹ΠΉ ΠΏΠ»Π°Π½, ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ хост-ΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Π΅ элСмСнты управлСния рСалистичны Π½Π° этой ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅?

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅: XDP β€” это ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Ρ€Π°Π½Π½Π΅Π³ΠΎ отбрасывания, Π° Π½Π΅ вСсь Ρ‰ΠΈΡ‚

decisions

НаиболСС Ρ‡Ρ‘Ρ‚ΠΊΠΈΠΉ способ Π΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎΠ± XDP Ρ‚Π°ΠΊΠΎΠ²: ΠΎΠ½ Π΄Π°Ρ‘Ρ‚ Linux Π±Ρ‹ΡΡ‚Ρ€ΡƒΡŽ ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ для ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ ΠΏΠ»ΠΎΡ…ΠΎΠ³ΠΎ Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π½Ρ‹Ρ… Ρ„Π»ΡƒΠ΄ΠΎΠ², Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π»ΡƒΡ‡ΡˆΠ΅ Π·Π°Ρ‰ΠΈΡ‰Π°Π΅Ρ‚ рСсурсы сСрвСра, Ρ‡Π΅ΠΌ насыщСнный Π²Ρ‹ΡˆΠ΅ΡΡ‚ΠΎΡΡ‰ΠΈΠΉ ΠΊΠ°Π½Π°Π». Π’ΠΎΡ‚ ΠΏΠΎΡ‡Π΅ΠΌΡƒ XDP Π²Π°ΠΆΠ΅Π½ Π² Ρ€Π°Π·Π³ΠΎΠ²ΠΎΡ€Π°Ρ… ΠΎ Π·Π°Ρ‰ΠΈΡ‚Π΅ ΠΎΡ‚ DDoS. Он Π½Π΅ замСняСт Π²Ρ‹ΡˆΠ΅ΡΡ‚ΠΎΡΡ‰ΡƒΡŽ Π·Π°Ρ‰ΠΈΡ‚Ρƒ, мСТсСтСвоС экранированиС с отслСТиваниСм состояния ΠΈΠ»ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Он ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚, заставляя хост Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ мСньшС бСссмыслСнной Ρ€Π°Π±ΠΎΡ‚Ρ‹.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, практичСскоС ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ простоС. Если Π½Π΅ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ CPU хоста Π²ΠΏΡƒΡΡ‚ΡƒΡŽ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ Ρ€Π°Π±ΠΎΡ‡ΠΈΠ΅ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ, XDP стоит ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Ρ€Π°Π½Π½Π΅Π³ΠΎ отбрасывания. Если основная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° β€” ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΊΠ°Π½Π°Π» ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°, зависящая ΠΎΡ‚ состояния ΠΈ Π»ΠΎΠ³ΠΈΠΊΠΈ прилоТСния, XDP ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ Π·Π° Π²Ρ‹ΡˆΠ΅ΡΡ‚ΠΎΡΡ‰Π΅ΠΉ Π·Π°Ρ‰ΠΈΡ‚ΠΎΠΉ ΠΈ Π±ΠΎΠ»Π΅Π΅ Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠΉ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠ΅ΠΉ, Π° Π½Π΅ ΠΏΠ΅Ρ€Π΅Π΄ Π½ΠΈΠΌΠΈ Π² качСствС ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΎΡ‚Π²Π΅Ρ‚Π°. ЕстСствСнным ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ шагом ΠΎΡ‚ΡΡŽΠ΄Π° Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ ΠΎ написании ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ XDP ΠΈΠ»ΠΈ построСнии Π±ΠΎΠ»Π΅Π΅ Π±ΠΎΠ³Π°Ρ‚ΠΎΠΉ ΠΌΠ½ΠΎΠ³ΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠΉ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ Π²ΠΎΠΊΡ€ΡƒΠ³ Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΈΠ΄Π΅ΠΈ Ρ€Π°Π½Π½Π΅Π³ΠΎ отбрасывания.