Skip to content
Zurück zum Blog
Minecraft-XDP-eBPF: DDoS-Schutz auf Kernel-Ebene

Minecraft-XDP-eBPF: DDoS-Schutz auf Kernel-Ebene

Alexandru Maftei
Alexandru Maftei
@ice
Updated
8 Aufrufe
TL;DR:Minecraft-XDP-eBPF ist eine Kernel-Firewall, die Java-Server vor Layer-7-DDoS-Angriffen schützt, indem sie bösartige Pakete auf Treiberebene abwirft, bevor diese deine Server-Software erreichen. Das Tool ist kostenlos, quelloffen und nutzt eBPF für hocheffizienten Schutz mit minimalem Overhead.
🐙 Quelloffenes Minecraft-Projekt

Outfluencer/Minecraft-XDP-eBPF

Der erste und einzige öffentlich verfügbare Minecraft-XDP-Filter, der deinen Server vor Layer-7-DDoS-Angriffen schützt

⭐ 169 Sterne💻 C📄 BSD-3-Clause
Auf GitHub ansehen ↗

Wenn du je einen öffentlichen Minecraft-Server betrieben hast, kennst du das Gefühl: Jemand bombardiert dich mit Müll-Traffic und plötzlich laggen alle Spieler. Layer-7-DDoS-Angriffe (Anwendungsebene-Attacken) sind billig, einfach zu starten und entsetzlich schwer mit traditionellen Firewalls abzuwehren. Minecraft-XDP-eBPF löst dieses Problem, indem es bösartige Pakete abwirft, bevor sie deine Server-Software überhaupt erreichen - direkt auf Kernel-Ebene.

Was dieses Projekt leistet

Minecraft-XDP-eBPF ist eine XDP-(eXpress-Data-Path)-Firewall, die in C geschrieben wurde und eBPF (extended Berkeley Packet Filter) nutzt, um Minecraft-Traffic auf Treiberebene zu inspizieren. Falls das abschreckend klingt: Statt Müll-Pakete ihren ganzen Weg zu deinem Java-Server nehmen zu lassen, fängt dieses Tool sie an der Netzwerkkarte ab und sagt ein klares "Nein", bevor sie überhaupt Ressourcen deines Servers verbrauchen.

Das Projekt kümmert sich um das, was viele nicht realisieren, das Attacken ausnutzen: fehlerhafte Minecraft-Protocol-Pakete. Es analysiert Handshakes, Status-Pings und Login-Anfragen und wirft dann alles ab, das gegen die Minecraft-Protocol-Spezifikation verstößt oder verdächtig aussieht. Hier ist die Sache: ungültige VarInts, unsinnige Paketsequenzen, fehlerhafte Verbindungsversuche - alles weg.

Derzeit unterstützt es Minecraft 1.8 bis 26.1.2 auf IPv4, mit dem Standard-Port 25565 (natürlich). Es gibt auch ein eingebautes SYN-Limit, das neue Verbindungen auf 10 SYNs pro 3 Sekunden pro IP-Adresse begrenzt. All diese Filterung passiert, ohne dass dein Server-Code auch nur erfährt, dass die Pakete existiert haben.


Warum du das brauchst

Du brauchst das, wenn du einen öffentlichen Server betreibst und nicht von zufälligen Angriffen bombardiert werden möchtest. Layer-7-DDoS ist viel häufiger, als die Leute denken, und es ist genau die Art von Angriff, die schwer zu verteidigen ist, nur mit deinem ISP. Die kümmern sich um Bandbreite; du kümmerst dich um die Responsivität deines Servers.

Stell dir vor: Jemand (oder ein Botnetz) findet die IP-Adresse deines Servers heraus und bombardiert ihn mit Tausenden gefälschten Minecraft-Login-Versuchen pro Sekunde. Dein Server muss jetzt CPU-Zyklen aufbringen, um diese Pakete zu analysieren, abzulehnen und aufzuräumen. Deine echten Spieler laggen, weil der Server mit Müll erstickt. Mit diesem Tool erreichen diese gefälschten Pakete deinen Server nicht einmal.

Der echte Gewinn hier ist Zero-Copy-Dropping. Bösartige Traffic wird auf der XDP-Ebene (XDP_DROP) abgeworfen, bevor der Kernel überhaupt Speicher dafür reserviert. Das ist nicht nur schnell; das ist "wir sprechen von Mikrosekunden" schnell.

Wenn du einen kleinen Survival-Server mit Freunden betreibst, brauchst du das wahrscheinlich nicht. Wenn du etwas Öffentliches oder Wettbewerbs-orientiertes betreibst - besonders einen PvP-Server, wo Leute dich belästigen könnten - ist es überdenkenswert.


So bekommst du es zum Laufen

Die Installation hat mehrere Teile, aber es ist nicht verrückt. Du brauchst ein Linux-System (das Tool ist nur für Linux) mit Root-Zugriff.

Zunächst installierst du die Voraussetzungen. Falls du Ubuntu oder Debian nutzt:

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

Dann holst du dir LLVM/Clang. Das Projekt braucht eine aktuelle Version (CI testet mit LLVM 21):

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

Du brauchst auch die Rust-Toolchain installiert. Sobald du alles hast, klonst du das Repository und führst das Build-Skript aus:

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

Nachdem das erfolgreich kompiliert wurde, hast du eine Binary bei `target/release/xdp-loader`. Um die Firewall tatsächlich auf deine Netzwerk-Schnittstelle zu laden:

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

(Ersetze eth0 mit deiner tatsächlichen Netzwerk-Schnittstelle. Falls du nicht weißt, welche es ist, sagt dir `ip link show` Bescheid.)

Und das war's. Die Firewall ist jetzt aktiv und filtert Traffic. Willst du sehen, was sie tut? Füge einen Prometheus-Metrics-Endpoint hinzu:

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

Dann ruf `http://deine-server-ip:1999/metrics` auf, um Paket-Zählungen, Drops und andere interessante Statistiken zu sehen.


Features, die zählen

Tiefe Paketanalyse

Das Tool schaut sich nicht nur Paket-Header an; es gräbt sich in das echte Minecraft-Protokoll ein. Es validiert VarInt-Kodierung (die viele Attack-Tools falsch machen), prüft Paket-Struktur und erzwingt Sequenz-Regeln. Pakete, die syntaktisch ungültig für das Minecraft-Protokoll sind, werden sofort abgeworfen.

Verbindungs-Drosselung

Standardmäßig begrenzt es neue TCP-Verbindungen auf 10 SYNs pro 3 Sekunden pro Quell-IP. Du kannst das in der `build.rs`-Datei anpassen, falls dein echtes legitimes Traffic stark bombardiert wird (vielleicht migrierst du Server und hast einen Spike), aber der Standard ist für die meisten Setups angemessen.

Zero-Copy-Dropping

Der coolste Teil, ehrlich gesagt. XDP arbeitet auf Treiberebene, bevor der normale Netzwerk-Stack des Kernels überhaupt involviert ist. Bösartige Pakete werden abgeworfen, ohne jemals in Kernel-Speicher kopiert zu werden. Dein Server wacht nicht deswegen auf. Das ist echte Performance-Verbesserung, nicht nur theoretisch.


Fallstricke und wie man sie vermeidet

Du musst das als Root oder mit passenden eBPF-Berechtigungen ausführen. Falls du Berechtigungs-Fehler bekommst, prüfe, dass du `sudo` nutzt. Keine Überraschung dort, aber es ist das häufigste Problem.

Falls du die Konfiguration in `build.rs` anpasst (Ports wechseln, Drosselungs-Raten ändern usw.), denk dran, dass du nach dem Bearbeiten neu kompilieren musst. Führe die Binary nicht einfach erneut aus und erwarte, dass sie deine Änderungen übernimmt. Das wird sie nicht. Ich habe diesen Fehler einmal gemacht und zehn Minuten überlegt, warum meine Port-Konfiguration keine Wirkung hatte (eigentlich war das nicht ich, nur... hypothetisch gesprochen).

Der andere Fallstrick: Falls sich deine Map-Konfiguration ändert - sag, du aktivierst Per-CPU-Maps oder spielst mit Datenstruktur-Größen - manchmal wird das BPF-Dateisystem beim Neustart verwirrt. Die Lösung ist nuklear, aber sie funktioniert:

bash
sudo rm -r /sys/fs/bpf

Das löscht das BPF-Dateisystem. Wenn du den Loader neu startest, erstellt er neue Maps. Mach das nur, wenn du Fehler bei der Map-Erstellung bekommst; es ist nichts, das du regelmäßig machen musst.

Denk auch dran, dass das Userspace-Programm am Laufen bleiben muss, um die eBPF-Maps zu verwalten. Falls du den Loader-Prozess killst, wird die Firewall sofort entladen. Du wirst wahrscheinlich wollen, dass es unter systemd oder einem anderen Supervisor läuft, damit es neu startet, wenn es crasht.


Was ist mit Alternativen?

Es gibt nicht viele Tools, die genau das machen, was dieses tut. Die meisten Leute verlassen sich entweder auf DDoS-Schutz ihres ISPs, nutzen einen kommerziellen Service wie Cloudflare, oder akzeptieren einfach, dass sie gelegentlich getroffen werden.

Cloudflare hat einen Minecraft-spezifischen Service, der deinen Traffic proxied, aber du zahlst dafür und deine Server-IP ist hinter einem Proxy versteckt. Dieses Tool ist selbst-gehostet und kostenlos (BSD-lizenziert, also quelloffen). Unterschiedliche Trade-offs.

Manche Leute nutzen einfaches Rate-Limiting in ihrer Server-Software oder Firewall, aber das passiert, nachdem Pakete bei deinem Server ankommen. Dieses Tool stoppt sie auf Treiberebene, was schneller und effizienter ist.

Falls du gerade erst mit Server-Hosting anfängst, prüfe zuerst den eingebauten DDoS-Schutz deines Hosters. Aber falls du auf Bare Metal läufst oder mehr Kontrolle brauchst, ist Minecraft-XDP-eBPF wirklich einzigartig in dem, was es bietet.


Bevor du es bereitstellst

Teste es in einer Staging-Umgebung, falls du kannst. Führe es auf einem nicht-Production-Server oder Test-VPS aus, um sicherzustellen, dass es nicht versehentlich legitimen Traffic filtert (sollte nicht sein, aber Konfigurationsfehler passieren). Verifiziere auch, dass es mit deiner spezifischen Minecraft-Server-Version funktioniert, bevor du es für echte Spieler anschaltest.

Falls du einen Survival-Server schützt, ist das niedrig-Risiko. Falls du einen kompetitiven PvP- oder Faction-Server betreibst, wo echte Spieler bereits frustriert sind, könnte eine Fehlkonfiguration, die ihre Login-Pakete blockiert, ein Desaster sein.

Das Projekt hat 169 Sterne auf GitHub und wird aktiv gepflegt. Das letzte Release verbesserte die VarInt-Lese-Methode, was genau die Art von langweilig-aber-kritisch ist, die du in einem Security-Tool sehen willst. Das ist solide Arbeit.

Richte den Prometheus-Metrics-Export auf. Überwache ihn. Behalt deine Paket-Drop-Raten im Auge - falls etwas komisch aussieht, wirst du es früh bemerken. Und falls du wirklich Angst vor DDoS hast und einen legitimen öffentlichen Server betreibst, ist dieses Tool deine Zeit wert.

Über den Autor
Alexandru Maftei
Alexandru MafteiHauptautor

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

Teile es mit deinen Freunden!