Skip to content
Torna al Blog
Minecraft-XDP-eBPF: Protezione DDoS a Livello Kernel per Ser

Minecraft-XDP-eBPF: Protezione DDoS a Livello Kernel per Ser

Alexandru Maftei
Alexandru Maftei
@ice
Updated
11 visualizzazioni
TL;DR:Minecraft-XDP-eBPF è un firewall a livello kernel che protegge i server Java dagli attacchi DDoS di Layer 7 bloccando i pacchetti malevoli a livello del driver di rete, prima che raggiungano il tuo software server. È gratuito, open-source, e utilizza eBPF per fornire una protezione a zero-copy con un overhead minimo.
🐙 Progetto Minecraft open-source

Outfluencer/Minecraft-XDP-eBPF

Il primo e unico Minecraft XDP Filter disponibile pubblicamente, che protegge il tuo server dagli attacchi DDoS di Layer 7

⭐ 169 stelle💻 C📄 BSD-3-Clause
Visualizza su GitHub ↗

Se hai mai gestito un server Minecraft pubblico, conosci bene la sensazione: qualcuno invia una valanga di traffico spazzatura e improvvisamente tutti gli altri giocatori vedono i loro personaggi muoversi a scatti. Gli attacchi DDoS di Layer 7 (il tipo a livello applicazione) sono economici, facili da lanciare e incredibilmente difficili da difendere con firewall tradizionali. Minecraft-XDP-eBPF risolve questo problema bloccando i pacchetti malevoli prima ancora che raggiungano il tuo software server, direttamente a livello kernel.

Cosa Fa Questo Progetto

Minecraft-XDP-eBPF è un firewall XDP (eXpress Data Path) scritto in C che utilizza eBPF (extended Berkeley Packet Filter) per ispezionare il traffico Minecraft a livello del driver di rete. Se sembra intimidatorio, pensala così: invece di lasciare che i pacchetti spazzatura raggiungano il tuo server Java, questo strumento li intercetta nella scheda di rete e dice "no" prima che consumino risorse del server.

Il progetto gestisce quello che molte persone non si rendono conto che gli attacchi sfruttano: pacchetti Minecraft malformati. Analizza handshake, ping di stato e richieste di login, poi butta via tutto ciò che viola la specifica del protocollo Minecraft o sembra sospetto. VarInt non validi, sequenze nonsensate, tentativi di connessione malformati - tutto sparisce.

Attualmente supporta Minecraft dalla versione 1.8 alla 26.1.2 su IPv4, con la porta predefinita 25565 (ovviamente). C'è anche un rate limiting SYN incorporato, che limita le connessioni a 10 SYN per 3 secondi per indirizzo IP per impostazione predefinita. Tutto questo filtraggio avviene senza che il tuo server sappia nemmeno che i pacchetti esistevano.


Perché Ti Servirebbe

Ti serve se gestisci un server pubblico e vuoi smettere di essere bombardato da attacchi casuali. Il DDoS di Layer 7 è molto più comune di quanto la gente pensi, ed è il tipo di cosa difficile da difendere con solo la protezione del tuo ISP. Loro guardano la larghezza di banda; tu stai cercando di mantenere il tuo server responsivo.

Immagina questo: qualcuno (o una botnet) scopre l'indirizzo IP del tuo server e inizia a inviare migliaia di falsi tentativi di login Minecraft al secondo. Il tuo server adesso deve spendere cicli di CPU per analizzare questi pacchetti, rifiutarli e fare pulizia. I tuoi veri giocatori si trovano con lag perché il server sta annegando nella spazzatura. Con questo strumento, quei pacchetti falsi non raggiungono mai il tuo server.

Il vero vantaggio è lo zero-copy dropping. Il traffico malevolo viene eliminato a livello XDP (XDP_DROP) prima che il kernel allocchi memoria per esso. Non è solo veloce; stiamo parlando di microsecondi. È così che va.

Se gestisci un piccolo server survival con gli amici, probabilmente non ti serve. Se gestisci qualcosa di pubblico o competitivo, specialmente un server PvP dove le persone potrebbero volerti molestare, vale la pena considerarlo.


Come Farlo Funzionare

L'installazione ha diversi passaggi, ma non è complicata. Ti servirà un sistema Linux (lo strumento è solo per Linux) con accesso root.

Innanzitutto, installa i prerequisiti. Se usi Ubuntu o Debian:

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

Poi prendi LLVM/Clang. Il progetto ha bisogno di una versione recente (i test CI usano LLVM 21):

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

Ti servirà anche la toolchain Rust installata. Una volta che hai tutto, clona il repo ed esegui lo script di build:

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

Dopo il completamento del build, hai un binario in `target/release/xdp-loader`. Per caricare effettivamente il firewall sulla tua interfaccia di rete:

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

(Sostituisci eth0 con la tua interfaccia di rete effettiva. Se non la conosci, `ip link show` te lo dirà.)

E fatto. Il firewall è ora attivo e sta filtrando il traffico. Vuoi monitorare quello che sta facendo? Aggiungi un endpoint di metriche Prometheus:

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

Poi visita `http://your-server-ip:1999/metrics` per vedere i conteggi dei pacchetti, gli drops e altre statistiche interessanti.


Funzionalità Che Contano

Ispezione Profonda dei Pacchetti

Lo strumento non guarda solo le intestazioni dei pacchetti, scava nel protocollo Minecraft effettivo. Convalida la codifica VarInt (che molti strumenti di attacco sbagliano), controlla la struttura dei pacchetti ed applica regole di sequenza. I pacchetti che sono sintatticamente non validi per il protocollo Minecraft vengono eliminati immediatamente.

Limitazione della Connessione

Per impostazione predefinita, limita le nuove connessioni TCP a 10 SYN per 3 secondi per indirizzo IP di origine. Puoi modificare questo nel file `build.rs` se il tuo traffico legittimo effettivo viene martellato (magari stai migrando server e hai un picco), ma l'impostazione predefinita è ragionevole per la maggior parte dei setup.

Zero-Copy Dropping

La parte più interessante, onestamente. XDP opera a livello driver prima che lo stack di rete normale del kernel sia anche coinvolto. I pacchetti malevoli vengono eliminati senza mai essere copiati nella memoria del kernel. Il tuo server non si sveglia a causa di questo. È un reale miglioramento delle prestazioni, non solo teorico.


Problemi e Come Evitarli

Devi eseguire questo come root o con le autorizzazioni eBPF appropriate. Se ricevi errori di permesso, verifica di usare `sudo`. Niente di sorprendente lì, ma è il problema più comune.

Se stai modificando la configurazione in `build.rs` (cambiando porte, tassi di throttle, ecc.), ricorda che devi ricompilare dopo aver modificato. Non limitarti a eseguire nuovamente il binario e aspettarti che raccoglierà le tue modifiche. Non lo farà. Ho commesso questo errore una volta e ho speso dieci minuti chiedendomi perché la mia configurazione della porta non aveva effetto (in realtà non ero io, solo... ipoteticamente parlando).

L'altro problema: se la configurazione della mappa cambia, diciamo che abiliti mappe Per-CPU o modifichi le dimensioni della struttura dei dati, a volte il filesystem BPF si confonde al riavvio. La soluzione è nucleare ma funziona:

bash
sudo rm -r /sys/fs/bpf

Questo cancella il filesystem BPF. Quando riavvii il loader, creerà mappe fresche. Fallo solo se ricevi errori sulla creazione della mappa; non è qualcosa che devi fare regolarmente.

Ricorda anche che il programma userspace deve rimanere in esecuzione per gestire le mappe eBPF. Se uccidi il processo del loader, il firewall si scarica immediatamente. Probabilmente vorrai eseguirlo sotto systemd o un altro supervisor in modo che si riavvii se si blocca.


E Le Alternative?

Non ci sono molti strumenti che fanno esattamente quello che fa questo. La maggior parte delle persone si affida alla protezione DDoS del proprio ISP, utilizza un servizio commerciale come Cloudflare, o semplicemente accetta che occasionalmente verrà colpito.

Cloudflare ha un servizio specifico per Minecraft che effettua il proxy del tuo traffico, ma paghi per esso e l'indirizzo IP del tuo server è nascosto dietro un proxy. Questo strumento è self-hosted e gratuito (con licenza BSD, quindi open source). Diversi compromessi.

Alcune persone usano rate limiting di base nel loro software server o firewall, ma questo accade dopo che i pacchetti arrivano al tuo server. Questo strumento li ferma a livello driver, il che è più veloce e efficiente.

Se stai iniziando con l'hosting di server, controlla prima la protezione DDoS incorporata del tuo host. Ma se stai eseguendo su bare metal o hai bisogno di più controllo, Minecraft-XDP-eBPF è genuinamente unico in quello che offre.


Prima Di Distribuire

Testalo in un ambiente di staging se puoi. Eseguilo su un server non in produzione o su un test VPS per assicurarti che non filtri accidentalmente il traffico legittimo (non dovrebbe, ma gli errori di configurazione accadono). Inoltre verifica che funzioni con la tua versione specifica di server Minecraft prima di attivarlo per i veri giocatori.

Se stai proteggendo un server survival, è a basso rischio. Se gestisci un server PvP competitivo o faction dove i giocatori legittimi sono già frustrati, una configurazione errata che blocca i loro pacchetti di login potrebbe essere un disastro.

Il progetto ha 169 stelle su GitHub ed è attivamente mantenuto. L'ultimo rilascio ha migliorato il metodo di lettura varint, che è esattamente il tipo di cosa noiosa ma critica che vuoi vedere in uno strumento di sicurezza. È un lavoro solido.

Configura l'export delle metriche Prometheus. Monitoralo. Tieni d'occhio i tuoi tassi di drop dei pacchetti - se qualcosa sembra strano, lo noterai presto. E se sei genuinamente preoccupato per il DDoS e gestisci un server pubblico legittimo, questo strumento vale il tuo tempo.

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!