Skip to content
Retour au Blog
Minecraft-XDP-eBPF: Protection DDoS au niveau noyau

Minecraft-XDP-eBPF: Protection DDoS au niveau noyau

Alexandru Maftei
Alexandru Maftei
@ice
Updated
11 vues
TL;DR:Minecraft-XDP-eBPF est un pare-feu au niveau du noyau qui protège les serveurs Java des attaques DDoS de couche 7. Il supprime les paquets malveillants au niveau du pilote réseau avant qu'ils n'atteignent votre serveur. C'est gratuit, open-source, et utilise eBPF pour une protection sans copie avec surcharge minimale.
🐙 Projet Minecraft open-source

Outfluencer/Minecraft-XDP-eBPF

Le premier et seul filtre XDP Minecraft disponible publiquement, protégeant votre serveur des attaques DDoS de couche 7

⭐ 169 étoiles💻 C📄 BSD-3-Clause
Voir sur GitHub ↗

Si vous avez déjà exploité un serveur Minecraft public, vous connaissez cette sensation: quelqu'un vous envoie un flot de trafic inutile et soudainement tout le monde lag. Les attaques DDoS de couche 7 (au niveau de l'application) sont bon marché, faciles à lancer, et incroyablement difficiles à défendre avec les pare-feu traditionnels. Minecraft-XDP-eBPF résout ce problème en supprimant les paquets malveillants avant même qu'ils n'atteignent votre logiciel serveur - directement au niveau du noyau.

Ce que fait ce projet

Minecraft-XDP-eBPF est un pare-feu XDP (eXpress Data Path) écrit en C qui utilise eBPF (extended Berkeley Packet Filter) pour inspecter le trafic Minecraft au niveau du pilote réseau. Si cela semble intimidant, pensez-y de cette façon: au lieu de laisser les paquets inutiles voyager jusqu'à votre serveur Java, cet outil les intercepte au niveau de la carte réseau et arrête tout avant qu'ils ne consomment des ressources serveur.

Le projet traite ce que beaucoup de gens ne réalisent pas que les attaques exploitent: les paquets de protocole Minecraft malformés. Il analyse les poignées de main, les pings de statut et les demandes de connexion, puis supprime tout ce qui viole la spécification du protocole Minecraft ou semble suspect. Voilà, les VarInts invalides, les séquences de paquets absurdes, les tentatives de connexion malformées - tout disparaît.

Actuellement, il supporte Minecraft 1.8 jusqu'à 26.1.2 sur IPv4, le port par défaut étant 25565 (évidemment). Il y a aussi un limitation de taux de SYN intégrée, limitant les connexions à 10 SYN par 3 secondes par adresse IP par défaut. Tout ce filtrage se fait sans que votre serveur ne sache même que ces paquets ont existé.


Pourquoi vous en auriez besoin

Vous en avez besoin si vous exploitez un serveur public et que vous voulez arrêter de vous faire absolument marteler par des attaques aléatoires. Les DDoS de couche 7 sont bien plus courants que les gens ne le pensent, et c'est le genre de chose qui est difficile à défendre avec juste votre ISP en amont. Ils regardent la bande passante, vous regardez à garder votre serveur réactif.

Imaginez ceci: quelqu'un (ou un botnet) découvre l'adresse IP de votre serveur et commence à envoyer des milliers de fausses tentatives de connexion Minecraft par seconde. Votre serveur doit maintenant dépenser des cycles CPU pour analyser ces paquets, les rejeter, et nettoyer. Vos vrais joueurs lag parce que le serveur est occupé à se noyer dans les ordures. Avec cet outil, ces faux paquets n'atteignent jamais votre serveur du tout.

Le vrai gain ici est la suppression sans copie. Le trafic malveillant est supprimé au niveau XDP (XDP_DROP) avant même que le noyau n'alloue de la mémoire pour lui. Ce n'est pas seulement rapide, c'est du style "nous parlons de microsecondes" rapide.

Si vous exploitez un petit serveur de survie avec des amis, vous n'en avez probablement pas besoin. Si vous exploitez quelque chose de public ou compétitif - surtout un serveur PvP où les gens pourraient vouloir vous harceler - cela vaut la peine d'y réfléchir.


Le mettre en marche

L'installation a quelques éléments mobiles, mais ce n'est pas dingue. Vous aurez besoin d'un système Linux (l'outil est Linux uniquement) avec accès root.

Tout d'abord, installez les prérequis. Si vous êtes sur Ubuntu ou Debian:

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

Ensuite, procurez-vous LLVM/Clang. Le projet a besoin d'une version récente (les tests CI utilisent LLVM 21):

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

Vous aurez également besoin de la chaîne d'outils Rust installée. Une fois que vous avez tout, clonez le repo et exécutez le script de construction:

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

Après cette construction réussie, vous avez un binaire à `target/release/xdp-loader`. Pour charger effectivement le pare-feu sur votre interface réseau:

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

(Remplacez eth0 par votre interface réseau réelle. Si vous ne savez pas, `ip link show` vous le dira.)

Et c'est tout. Le pare-feu est maintenant actif et filtre le trafic. Vous voulez surveiller ce qu'il fait? Ajoutez un point de terminaison des métriques Prometheus:

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

Ensuite, accédez à `http://your-server-ip:1999/metrics` pour voir les compteurs de paquets, les suppressions, et d'autres statistiques amusantes.


Caractéristiques qui comptent

Inspection approfondie des paquets

L'outil ne regarde pas seulement les en-têtes de paquets, il creuse dans le protocole réel de Minecraft. Il valide l'encodage VarInt (que beaucoup d'outils d'attaque obtiennent mal), vérifie la structure des paquets, et applique les règles de séquence. Les paquets qui sont syntaxiquement invalides pour le protocole Minecraft sont supprimés immédiatement.

Limitation de connexion

Par défaut, il limite les nouvelles connexions TCP à 10 SYN par 3 secondes par adresse IP source. Vous pouvez modifier ceci dans le fichier `build.rs` si votre trafic légitime réel est martelé (peut-être que vous migrez les serveurs et avez un pic), mais le défaut est raisonnable pour la plupart des configurations.

Suppression sans copie

La partie la plus cool, honnêtement. XDP fonctionne au niveau du pilote avant que la pile réseau normale du noyau ne s'implique même. Les paquets malveillants sont supprimés sans jamais être copiés dans la mémoire du noyau. Votre serveur ne se réveille pas à cause de cela. C'est une véritable amélioration des performances, pas juste théorique.


Les pièges et comment les éviter

Vous devez exécuter ceci en tant que root ou avec les permissions eBPF appropriées. Si vous obtenez des erreurs de permission, vérifiez que vous utilisez `sudo`. Pas de surprise là, mais c'est le problème le plus courant.

Si vous modifiez la configuration dans `build.rs` (changement de ports, taux d'étranglement, etc.), n'oubliez pas que vous devez recompiler après édition. Ne relancez pas simplement le binaire et ne vous attendez pas à ce qu'il reprenne vos modifications. Il ne le fera pas. J'ai commis cette erreur une fois et j'ai passé dix minutes à me demander pourquoi ma configuration de port n'avait aucun effet (en fait, ce n'était pas moi, juste... hypohtétiquement parlant).

L'autre piège: si votre configuration de map change - disons que vous activez les maps par CPU ou que vous tripatouille les tailles de structure de données - parfois le système de fichiers BPF s'embrouille au redémarrage. La solution est nucléaire mais elle fonctionne:

bash
sudo rm -r /sys/fs/bpf

Cela efface le système de fichiers BPF. Quand vous redémarrez le chargeur, il créera des maps fraîches. Faites ceci uniquement si vous obtenez des erreurs sur la création de map, ce n'est pas quelque chose que vous devez faire régulièrement.

Rappelez-vous également que le programme en espace utilisateur doit continuer à fonctionner pour gérer les maps eBPF. Si vous tuez le processus du chargeur, le pare-feu se décharge immédiatement. Vous voudrez probablement l'exécuter sous systemd ou un autre superviseur afin qu'il redémarre s'il plante.


Et les alternatives?

Il n'y a pas beaucoup d'outils faisant exactement ce que celui-ci fait. La plupart des gens comptent soit sur la protection DDoS de leur ISP, soit utilisent un service commercial comme Cloudflare, soit acceptent simplement qu'ils seront occasionnellement frappés.

Cloudflare a un service spécifique à Minecraft qui proxifie votre trafic, mais vous payez pour cela et l'adresse IP de votre serveur est cachée derrière un proxy. Cet outil est auto-hébergé et gratuit (sous licence BSD, donc open source). Des compromis différents.

Certaines personnes utilisent la limitation de débit basique dans leur logiciel serveur ou pare-feu, mais cela se produit après que les paquets arrivent à votre serveur. Cet outil les arrête au niveau du pilote, ce qui est plus rapide et plus efficace.

Si vous commencez tout juste à l'hébergement de serveurs, vérifiez d'abord la protection DDoS intégrée de votre hôte. Mais si vous travaillez sur du matériel nu ou avez besoin de plus de contrôle, Minecraft-XDP-eBPF est véritablement unique dans ce qu'il offre.


Avant de déployer

Testez-le dans un environnement de test si vous le pouvez. Exécutez-le sur un serveur non-production ou un VPS de test pour vous assurer qu'il ne filtre pas accidentellement le trafic légitime (il ne devrait pas, mais les erreurs de configuration se produisent). Vérifiez également qu'il fonctionne avec votre version spécifique de serveur Minecraft avant de l'activer pour de vrais joueurs.

Si vous protégez un serveur de survie, c'est à faible risque. Si vous exploitez un serveur PvP ou de faction compétitif où les joueurs légitimes sont déjà frustrés, une mauvaise configuration qui bloque leurs paquets de connexion pourrait être un désastre.

Le projet compte 169 étoiles sur GitHub et est activement maintenu. Cette dernière version a amélioré la méthode de lecture varint, ce qui est exactement le type de truc ennuyeux mais critique que vous voulez voir dans un outil de sécurité. C'est du travail solide.

Configurez cette exportation de métriques Prometheus. Surveillez-la. Gardez un oeil sur vos taux de suppression de paquets - si quelque chose semble bizarre, vous le repérerez tôt. Et si vous êtes véritablement préoccupé par les DDoS et que vous exploitez un serveur public légitime, cet outil vaut votre temps.

À propos de l auteur
Alexandru Maftei
Alexandru MafteiRédacteur principal

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

Partage avec tes amis !