Skip to content
Terug naar Blog
Minecraft-XDP-eBPF: Kernelbeveiliging tegen DDoS-aanvallen

Minecraft-XDP-eBPF: Kernelbeveiliging tegen DDoS-aanvallen

Alexandru Maftei
Alexandru Maftei
@ice
Updated
7 weergaven
TL;DR:Minecraft-XDP-eBPF is een firewall op kernelniveau die Java-servers beschermt tegen DDoS-aanvallen op laag 7 door schadelijke pakketten al bij de netwerkdriver weg te gooien, voordat ze je servicesoftware bereiken. Het is gratis, open-source en gebruikt eBPF voor zero-copy-bescherming met minimale overhead.
🐙 Open-source Minecraft-project

Outfluencer/Minecraft-XDP-eBPF

Het enige openbaar beschikbare Minecraft XDP-filter dat je server beschermt tegen DDoS-aanvallen op laag 7

⭐ 169 sterren💻 C📄 BSD-3-Clause
Bekijk op GitHub ↗

Als je ooit een openbare Minecraft-server hebt gerund, ken je dit gevoel: iemand stuurt een golf rommelverkeer jouw kant op en ineens hebben iedereen lag-spikes. DDoS-aanvallen op laag 7 (het type op applicatieniveau) zijn goedkoop, makkelijk uit te voeren en ongelooflijk vervelend om mee traditionele firewalls te verdedigen. Minecraft-XDP-eBPF lost dit op door schadelijke pakketten weg te gooien voordat ze je servicesoftware bereiken - rechtstreeks op kernelniveau.

Wat doet dit project

Minecraft-XDP-eBPF is een XDP (eXpress Data Path) firewall geschreven in C die eBPF (extended Berkeley Packet Filter) gebruikt om Minecraft-verkeer op het niveau van de netwerkdriver te inspecteren. Als dat intimiderend klinkt, denk er dan zo over na: in plaats van rotzooi-pakketten helemaal naar je Java-server te laten gaan, onderschept deze tool ze bij de netwerkkaart en zegt "nee" voordat ze servermiddelen verbruiken.

Het project behandelt wat veel mensen niet realiseren dat aanvallen exploiteren: verminkte Minecraft-protocolpakketten. Het analyseert handshakes, statuspings en inlogverzoeken, en gooit alles weg wat het Minecraft-protocolspecificatie schendt of verdacht eruit ziet. Dit is het punt, ongeldige VarInts, onzin-pakketsequenties, verminkte verbindingspogingen - allemaal weg.

Momenteel ondersteunt het Minecraft 1.8 tot en met 26.1.2 op IPv4, met poort 25565 als standaard (uiteraard). Er is ook ingebouwde SYN-snelheidsbeperking, die verbindingen beperkt tot 10 SYN's per 3 seconden per IP-adres standaard. Al deze filtering gebeurt zonder dat je servercode zelfs maar weet dat de pakketten bestonden.


Waarom je dit nodig hebt

Je hebt dit nodig als je een openbare server runt en niet voortdurend door willekeurige aanvallen getroffen wilt worden. DDoS op laag 7 is veel vaker dan mensen denken, en het is het soort iets dat moeilijk te verdedigen is met alleen je upstream ISP. Zij kijken naar bandbreedte, jij kijkt naar het responsive houden van je server.

Stel je dit voor: iemand (of een botnet) ontdekt het IP-adres van je server en begint duizenden nepMicecraft-inlogpogingen per seconde te sturen. Je server moet nu CPU-cycli besteden aan het parseren van deze pakketten, het afwijzen ervan en opruiming. Je echte spelers laggen omdat de server verdronken is in rotzooi. Met deze tool bereiken die nepaketten je server helemaal niet.

De echte winst hier is zero-copy-droppen. Schadelijk verkeer wordt verwijderd op de XDP-laag (XDP_DROP) voordat de kernel zelfs maar geheugen ervoor toewijst. Dat is niet alleen snel, dat is "we hebben het over microseconden" snel.

Als je een kleine survivalserver met vrienden runt, heb je dit waarschijnlijk niet nodig. Als je iets openbaars of competitief runt - vooral een PvP-server waar mensen je misschien willen lastigvallen - is het overwegen waard.


Het werkend krijgen

Installatie heeft verschillende onderdelen, maar het is niet gek. Je hebt een Linux-systeem (de tool is alleen voor Linux) met rootaccess nodig.

Installeer eerst de vereisten. Als je Ubuntu of Debian gebruikt:

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

Pak dan LLVM/Clang. Het project heeft een recente versie nodig (CI test met LLVM 21):

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

Je hebt ook de Rust-toolchain nodig. Zodra je alles hebt, clone je de repo en voer je het buildscript uit:

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

Nadat het succesvol is gebouwd, heb je een binary op `target/release/xdp-loader`. Om de firewall daadwerkelijk op je netwerkinterface te laden:

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

(Vervang eth0 door wat je daadwerkelijke netwerkinterface is. Als je het niet weet, `ip link show` vertelt het je.)

En dat is het. De firewall is nu actief en filtert verkeer. Wil je zien wat het doet? Voeg een Prometheus-metricseindpunt toe:

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

Klik dan op `http://your-server-ip:1999/metrics` om pakkettellingen, drops en ander leuk statistieken te zien.


Functies die eraan doen

Diep pakketinspectie

De tool kijkt niet alleen naar pakketheaders, het graaft in het echte Minecraft-protocol. Het valideert VarInt-codering (wat veel aanvaltools verkeerd doen), controleert pakketstructuur en dwingt sequentieregels af. Pakketten die syntactisch ongeldig zijn voor het Minecraft-protocol worden onmiddellijk verwijderd.

Verbindingsbeperking

Standaard beperkt het nieuwe TCP-verbindingen tot 10 SYN's per 3 seconden per bron-IP. Je kunt dit aanpassen in het `build.rs`-bestand als je daadwerkelijk legitieme verkeer extreem hoog is (misschien migreer je servers en heb je een piek), maar de standaardwaarde is redelijk voor de meeste instellingen.

Zero-Copy-droppen

Het coolste onderdeel, eigenlijk. XDP werkt op het driverniveau voordat de normale netwerkstack van de kernel zelfs maar betrokken is. Schadelijke pakketten worden verwijderd zonder ooit in kernelgeheugen te worden gekopieerd. Je server ontwaait er niet van. Dat is echte prestatieverbetering, niet alleen theoretisch.


Valkuilen en hoe ze te vermijden

Je moet dit als root of met passende eBPF-machtigingen uitvoeren. Als je machtigingsfouten krijgt, controleer dat je `sudo` gebruikt. Geen verrassing daar, maar het is het meest voorkomende probleem.

Als je de configuratie in `build.rs` aanpast (poorten, snelheidslimieten, enz.), onthoud dat je na het bewerken opnieuw moet compileren. Voer niet zomaar het binaire bestand opnieuw uit en verwacht dat het je wijzigingen oppikt. Het doet dat niet. Ik maakte dat fout eenmaal en besteedde tien minuten zich af te vragen waarom mijn poortconfiguratie geen effect had (eigenlijk, dat was niet ik, gewoon, hypothetisch gesproken).

De andere valkuil: als je kaartconfiguratie verandert - zeg, je schakelt Per-CPU-kaarten in of rommelt met datastructurengrootten - soms raakt het BPF-bestandssysteem in verwarring bij herstart. De oplossing is nucleair maar het werkt:

bash
sudo rm -r /sys/fs/bpf

Dat wist het BPF-bestandssysteem uit. Wanneer je de loader opnieuw start, maakt het verse kaarten aan. Doe dit alleen als je kaartaanmaakfouten krijgt, het is niet iets dat je regelmatig hoeft te doen.

Onthoud ook dat het gebruikersruimteprogramma actief moet blijven om de eBPF-kaarten te beheren. Als je het loaderproces beëindigt, wordt de firewall onmiddellijk verwijderd. Je wilt waarschijnlijk ervoor zorgen dat het onder systemd of een ander toezicht loopt, zodat het opnieuw start als het crasht.


Hoe zit het met alternatieven

Er zijn niet veel tools die precies doen wat dit doet. De meeste mensen vertrouwen op de DDoS-bescherming van hun ISP, gebruiken een commerciële service zoals Cloudflare, of aanvaarden gewoon dat ze af en toe geraakt worden.

Cloudflare heeft een Minecraft-specifieke service die je verkeer proxyt, maar je betaalt ervoor en het IP-adres van je server wordt achter een proxy verborgen. Deze tool wordt zelf gehost en is gratis (BSD-gelicentieerd, dus open source). Verschillende afwegingen.

Sommige mensen gebruiken basissnelheidsbeperking in hun serversoftware of firewall, maar dat gebeurt nadat pakketten je server bereiken. Deze tool stopt ze op het driverniveau, wat sneller en efficiënter is.

Als je net begint met serverhoting, controleer eerst de ingebouwde DDoS-bescherming van je host. Maar als je bare metal runt of meer controle nodig hebt, is Minecraft-XDP-eBPF echt uniek in wat het biedt.


Voordat je deployt

Test het in een stagingomgeving als je kunt. Voer het uit op een niet-productieserver of test-VPS om er zeker van te zijn dat het niet per ongeluk legitiem verkeer filtert (dat zou niet moeten, maar configuratiefouten gebeuren). Verifieer ook dat het werkt met je specifieke Minecraft-serverversie voordat je het inschakelt voor echte spelers.

Als je een survivalserver beschermt, is het laagrisico. Als je een competitieve PvP- of factionserver runt waar legitieme spelers al gefrustreerd zijn, kan een misconfiguratie die hun inlogpakketten blokkeert een ramp zijn.

Het project heeft 169 sterren op GitHub en wordt actief onderhouden. Die nieuwste release verbeterde de varint-leesmethode, wat precies het soort saaie-maar-kritieke dingen zijn die je in een beveiligingstool wilt zien. Dit is solide werk.

Stel die Prometheus-metricexport in. Monitor het. Hou je pakketdropsnelheden in de gaten - als iets raar lijkt, spot je het vroeg. En als je je echt zorgen maakt over DDoS en een legitieme openbare server runt, is deze tool je tijd waard.

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!