Skip to content
Înapoi la Blog
Minecraft-XDP-eBPF: Protecție DDoS pentru servere Java

Minecraft-XDP-eBPF: Protecție DDoS pentru servere Java

Alexandru Maftei
Alexandru Maftei
@ice
Updated
4 vizualizări
TL;DR:Minecraft-XDP-eBPF este un firewall la nivel de kernel care protejează serverele Java de atacuri DDoS Layer 7 prin eliminarea pachetelor malware la nivelul driverului de rețea înainte ca acestea să ajungă la software-ul serverului. Este gratuit, open-source și folosește eBPF pentru a oferi protecție zero-copy cu overhead minimal.
🐙 Proiect Minecraft cu cod deschis

Outfluencer/Minecraft-XDP-eBPF

Singurul filtru Minecraft XDP disponibil public, care protejează serverul tău de atacurile DDoS layer 7

⭐ 169 stele💻 C📋 BSD-3-Clause
Vezi pe GitHub ↗

Dacă ai condus vreodată un server Minecraft public, știi bine senzația - cineva trimite o avalanșă de trafic nefolositor în direcția ta și brusc toți jucătorii au lag. Atacurile DDoS Layer 7 (de nivel aplicație) sunt ieftine, ușor de lansat și incredibil de greu de apărat cu firewall-uri tradiționale. Minecraft-XDP-eBPF rezolvă asta prin eliminarea pachetelor malware înainte ca acestea să ajungă la software-ul serverului tău - chiar la nivel de kernel.

Ce face acest proiect

Minecraft-XDP-eBPF este un firewall XDP (eXpress Data Path) scris în C care folosește eBPF (extended Berkeley Packet Filter) pentru a inspecta traficul Minecraft la nivel de driver de rețea. Dacă asta sună intimidant, gândește-te la asta: în loc să lași pachetele nefolosite să meargă până la serverul Java, acest instrument le interceptează la placa de rețea și spune "nu" înainte ca ele să consume resurse serverului.

Proiectul se ocupă de ceea ce mulți oameni nu-și dau seama că atacurile exploatează - pachete malformate ale protocolului Minecraft. Analizează handshake-uri, ping-uri de status și cereri de conectare, apoi elimină orice care violează specificațiile protocolului Minecraft sau arată suspect. Iată chestia - VarInt-uri nevalide, secvențe de pachete nelogice, încercări de conexiune malformate - toate eliminate.

În prezent suportă Minecraft 1.8 până la 26.1.2 pe IPv4, cu portul implicit fiind 25565 (evident). Există și limitare de rată SYN încorporată, limitând conexiunile la 10 SYN-uri la fiecare 3 secunde per adresă IP implicit. Toată această filtrare se întâmplă fără ca serverul să știe că pachetele existau.


De ce ai vrea asta

Ai nevoie de asta dacă rulezi un server public și vrei să nu te iei de atacuri aleatorii. DDoS Layer 7 este mult mai frecvent decât cred oamenii, și este genul de lucru care este greu de apărat cu doar ISP-ul tău. Ei se uită la lățimea de bandă, tu te uiți la menținerea responsivității serverului.

Imaginează-ți asta: cineva (sau o botnet) află adresa IP serverului tău și începe să trimită mii de false cereri de conectare Minecraft pe secundă. Serverul tău trebuie să cheltuiască cicluri CPU pentru a parsa aceste pachete, a le respinge și a curăța după ele. Jucătorii tăi reali au lag pentru că serverul este ocupat să se înece în gunoaie. Cu acest instrument, acele pachete false nu ajung niciodată la serverul tău.

Adevărata victorie aici este eliminarea zero-copy. Traficul malitios se elimină la stratul XDP (XDP_DROP) înainte ca kernel-ul să aloce memorie pentru asta. Asta nu este doar rapid - vorbim de microsecunde.

Dacă rulezi un mic server de survival cu prietenii, probabil că nu ai nevoie de asta. Dacă rulezi ceva public sau competitiv - în special un server PvP unde oamenii ar putea să te hărțuiască - merită să te gândești la asta.


Punerea în funcțiune

Instalarea are câteva componente, dar nu este craziness. Vei avea nevoie de un sistem Linux (instrumentul este doar Linux) cu acces root.

Mai întâi, instalează cerințele preliminare. Dacă ești pe Ubuntu sau Debian:

bash
sudo apt update
sudo apt install -y gcc-multilib wget gnupg software-properties-common git libbpf-dev

După asta, ia LLVM/Clang. Proiectul necesită o versiune recentă (testele CI folosesc LLVM 21):

bash
wget https://apt.llvm.org/llvm.sh
chmod +x llvm.sh
sudo./llvm.sh 21 all

Vei avea nevoie și de toolchain-ul Rust instalat. Odată ce ai totul, clonează repo-ul și rulează script-ul de build:

bash
git clone https://github.com/Outfluencer/Minecraft-XDP-eBPF.git
cd Minecraft-XDP-eBPF./build.sh

După ce se compilează cu succes, ai un binar la `target/release/xdp-loader`. Pentru a încărca efectiv firewall-ul pe interfața de rețea:

bash
sudo./target/release/xdp-loader eth0

(Înlocuiește eth0 cu orice interfață de rețea actuală a ta. Dacă nu știi, `ip link show` ți-o va spune.)

Și atât. Firewall-ul este acum activ și filtrează traficul. Vrei să monitorizezi ce face? Adaugă un endpoint de metrici Prometheus:

bash
sudo./target/release/xdp-loader eth0 --metrics-addr 0.0.0.0:1999

După asta accesează `http://your-server-ip:1999/metrics` pentru a vedea numărări de pachete, eliminări și alte statistici distractive.


Caracteristici care conteaza

Inspecție profundă a pachetelor

Instrumentul nu doar se uită la anteturile pachetelor - aprofundează în protocolul Minecraft real. Validează codificarea VarInt (care mulți instrumente de atac o greșesc), verifică structura pachetelor și aplică reguli de secvență. Pachetele care sunt sintactic nevalide pentru protocolul Minecraft se elimină imediat.

Limitarea conexiunilor

Implicit, limitează conexiunile TCP noi la 10 SYN-uri la fiecare 3 secunde per adresă IP sursă. Poți ajusta asta în fișierul `build.rs` dacă traficul tău legitim se lovește (poate că migrezi servere și ai un vârf), dar implicit este rezonabil pentru majoritatea configurațiilor.

Eliminare zero-copy

Cea mai interesantă parte, sincer. XDP operează la nivel de driver înainte ca chiar stiva de rețea normală a kernel-ului să fie implicată. Pachetele malitioase se elimină fără a fi vreodată copiate în memoria kernel. Serverul tău nu se trezește din cauza asta. Asta este o adevărată îmbunătățire a performanței, nu doar teoretică.


Gotcha-uri și cum să le eviți

Trebuie să rulezi asta ca root sau cu permisiuni eBPF corespunzătoare. Dacă primești erori de permisiune, verifică că folosești `sudo`. Nimic surprinzător acolo, dar este cea mai frecventă problemă.

Dacă ajustezi configurația în `build.rs` (schimbând porturi, rate de limitare etc.), aminteș-ți că trebuie să recompilezi după editare. Nu doar re-rula binar-ul și așteptă-te să preia modificările. Nu o va face. Am făcut greșeala asta o dată și am petrecut zece minute întrebând-mă de ce configurația portului meu nu a avut niciun efect (de fapt, asta nu eram eu, doar - ipotetic vorbind).

Cealaltă gotcha - dacă configurația hărții se schimbă - spune că activezi hărți Per-CPU sau te joci cu dimensiunile structurii de date - uneori sistemul de fișiere BPF se confundă la restartare. Remediul este nuclear dar funcționează:

bash
sudo rm -r /sys/fs/bpf

Asta șterge sistemul de fișiere BPF. Când restartezi loader-ul, va crea hărți proaspete. Doar fă asta dacă primești erori despre crearea hărții - nu este ceva pe care trebuie să-l faci regulat.

De asemenea, amintește-ți că programul userspace trebuie să rămână în funcțiune pentru a gestiona hărțile eBPF. Dacă închizi procesul loader, firewall-ul se descarcă imediat. Probabil vrei să-l rulezi sub systemd sau sub un alt supervisor pentru a se reporni dacă cade.


Dar alternativele?

Nu sunt mulți instrumente care fac exact ceea ce face asta. Majoritatea oamenilor fie se bazează pe protecția DDoS a ISP-ului, fie folosesc un serviciu comercial cum ar fi Cloudflare, fie pur și simplu acceptă că vor fi loviti ocazional.

Cloudflare are un serviciu specific Minecraft care proxy-ează traficul tău, dar plătești pentru asta și adresa IP serverului tău este ascunsă în spatele unui proxy. Acest instrument este self-hosted și gratuit (sub licență BSD, deci open source). Compromisuri diferite.

Unii oameni folosesc limitare de rată de bază în software-ul serverului sau firewall, dar asta se întâmplă după ce pachetele ajung la serverul tău. Acest instrument le oprește la nivel de driver, ceea ce este mai rapid și mai eficient.

Dacă tocmai începi cu găzduire de servere, verifică mai întâi protecția DDoS încorporată a furnizorului. Dar dacă rulezi pe bare metal sau ai nevoie de mai mult control, Minecraft-XDP-eBPF este cu adevărat unic în ceea ce oferă.


Înainte de implementare

Testează-l într-un mediu de staging dacă poți. Rulează-l pe un server non-producție sau un VPS de test pentru a te asigura că nu filtrează accidental traficul legitim (nu ar trebui, dar greșelile de configurație se întâmplă). De asemenea, verifică că funcționează cu versiunea specifică a serverului Minecraft înainte de a-l activa pentru jucători reali.

Dacă protejezi un server de survival, este risc scăzut. Dacă rulezi un server PvP sau facțiune competitiv unde jucători legitimi sunt deja frustrați, o greșeală de configurație care blochează pachetele lor de conectare ar putea fi un dezastru.

Proiectul are 169 stele pe GitHub și este activ întreținut. Cea mai recentă versiune a îmbunătățit metoda de citire a varint-ului, ceea ce este exact genul de chestie plictisitoare dar critică pe care vrei s-o vezi într-un instrument de securitate. Asta este muncă solidă.

Configurează acea export de metrici Prometheus. Monitorizează-o. Ține-ți ochii pe ratele de eliminare de pachete - dacă ceva arată ciudat, o vei vedea devreme. Și dacă chiar te îngrijorează DDoS și rulezi un server public legitim, acest instrument merită timpul tău.

About the author
Alexandru Maftei
Alexandru MafteiLead Writer

Lead writer at minecraft.how. Long-time Minecraft player running a small SMP server, testing every build, mod, and seed before writing about it.

Share with your friends!