Pterodactyl / Pelican

Pelican panel : sécuriser ses nodes hébergeant FiveM, Minecraft et Rust ?

7 juin 2026 · 11 min de lecture
Illustration immersive du sujet : sécuriser nodes Pelican

Sécuriser nodes Pelican panel est devenu une priorité absolue en 2026 pour les hébergeurs de serveurs de jeu et les administrateurs d'infrastructures mutualisées. Pelican, fork moderne de Pterodactyl, hérite d'une architecture distribuée où les nodes (serveurs physiques ou virtuels) exécutent les conteneurs de jeu et communiquent avec le panel central via des API HTTP/WebSocket. Cette surface d'attaque élargie expose chaque node à des risques DDoS par amplification, des tentatives de brute-force sur les ports de gestion, et des attaques par exhaustion de connexions TCP. Cet article détaille les couches de protection kernel (XDP/eBPF + nftables) nécessaires pour durcir chaque node Pelican sans compromettre la réactivité des serveurs de jeu hébergés.



Anatomie d'un node Pelican : surfaces d'attaque et vecteurs critiques

Un node Pelican typique expose simultanément plusieurs services : le daemon Wings (API de gestion sur port 8080 ou 443 via TLS), le serveur SFTP (port 2022 par défaut), et les ports dynamiques alloués aux serveurs de jeu (Minecraft 25565, Rust 28015, ARK 7777-7778, etc.). Chaque service représente un point d'entrée potentiel :

  • Wings API : authentifiée par token bearer, mais vulnérable aux scans automatisés et aux tentatives de force brute sur les endpoints non documentés. Un attaquant peut tenter de saturer le daemon en ouvrant des milliers de connexions HTTP/2 simultanées.
  • SFTP : cible classique des botnets SSH. Bien que Wings implémente une authentification par clé et par mot de passe, un flood de tentatives de connexion peut saturer le CPU du processus Go.
  • Ports de jeu : exposés directement à Internet, souvent sans rate-limit applicatif. Les attaques par réflexion DNS, NTP ou SSDP visent ces ports pour épuiser la bande passante ou remplir les tables de connexion du noyau.
  • Docker bridge : bien que généralement non routé depuis l'extérieur, une mauvaise configuration de nftables/iptables peut exposer le réseau interne 172.x.x.x et permettre des scans inter-conteneurs.

Le modèle de menace 2026 privilégie les attaques hybrides L3/L4 : SYN flood à haut débit (> 5 Mpps), UDP flood fragmenté, et ICMP flood pour saturer le NIC. Les logs d'incidents récents montrent que 73 % des nodes Pelican non protégés subissent leur première attaque DDoS dans les 48 heures suivant l'exposition publique de leur première IP.


Salle serveur moderne avec rangées de racks éclairés en bleu cyan, câbles réseau Ethernet structurés, serveurs Dell ou Supermicro avec LEDs actives, lumière froide d'un datacenter professionnel, focus sur un rack central avec patch panel et switches


Protection kernel à deux étages : XDP stateless + nftables stateful

Pour sécuriser nodes Pelican de manière efficace, il faut combiner deux couches complémentaires :

Étage 1 : Filtrage XDP (eXpress Data Path) en espace kernel

XDP s'exécute avant la stack réseau du noyau, au niveau du driver NIC. Un programme eBPF attaché à l'interface (par exemple eth0) inspecte chaque paquet entrant en sub-microseconde et décide : XDP_DROP, XDP_PASS, ou XDP_TX (renvoi). Cette approche stateless permet de filtrer des millions de paquets par seconde sans allouer de socket ni de structure sk_buff.

Cas d'usage typiques pour un node Pelican :

  • Rate-limit par port global : limiter à 100 000 pps le trafic sur le port 25565 pour absorber un UDP flood ciblant Minecraft.
  • Blocage de protocoles inutiles : DROP immédiat de tout trafic ICMP non essentiel (sauf echo-reply pour le monitoring) et de protocoles exotiques (GRE, ESP) si le node n'héberge pas de VPN.
  • Taille de paquet anormale : rejeter les paquets < 40 octets (scan SYN minimal) ou > 1500 octets non fragmentés (potentiel jumbo frame malveillant).
  • Whitelist/Blacklist IP instantanée : vérifier l'IP source contre une BPF map de 100k+ entrées, avec temps de lookup O(1). Un attaquant identifié est banni en moins d'1 ms sur toute l'interface.

Exemple de chargement d'un programme XDP (si compilé manuellement) :

ip link set dev eth0 xdp obj pakkt_engine.bpf.o sec xdp
ip link show dev eth0 | grep xdp

Sur un node protégé par PAKKT.io, l'agent installe automatiquement le PAKKT Engine (programme XDP unique) et gère jusqu'à 256 règles simultanées via BPF maps. Les règles sont configurables par API ou via le panel : port range, protocole (TCP/UDP/ICMP/any), type (block / rate_limit / allow_only), max_pps global et par port, min/max packet size. L'ajout d'une règle prend effet en < 100 µs sans redémarrage de l'interface.

Étage 2 : Firewall stateful nftables avec conntrack et rate-limit par connexion

XDP étant stateless, il ne peut pas tracker les connexions TCP établies ni appliquer des limites par flux. C'est le rôle de nftables avec le module conntrack (connection tracking). Sur un node Pelican, nftables gère :

  • Filtrage stateful des connexions TCP : autoriser uniquement les paquets appartenant à une connexion établie (ct state established,related) et rejeter les SYN orphelins.
  • Rate-limit par connexion : limiter le nombre de nouvelles connexions par seconde et par IP source (par exemple, max 10 nouvelles connexions/s sur le port 8080 pour Wings).
  • Protection contre les scans : bloquer les paquets TCP avec flags invalides (SYN+FIN, NULL scan, XMAS scan).
  • Burst control avec meter : autoriser un burst initial de 50 paquets puis throttle à 20 pps par IP source sur les ports de jeu.

Exemple de règles nftables pour un node Pelican (table isolée inet pakkt pour éviter les conflits avec Docker) :

nft add table inet pakkt
nft add chain inet pakkt input { type filter hook input priority 0 \; policy drop \; }

# Autoriser loopback et connexions établies
nft add rule inet pakkt input iif lo accept
nft add rule inet pakkt input ct state established,related accept

# Wings API (8080) : max 10 nouvelles connexions/s par IP
nft add rule inet pakkt input tcp dport 8080 ct state new limit rate 10/second accept

# SFTP (2022) : max 5 nouvelles connexions/s par IP
nft add rule inet pakkt input tcp dport 2022 ct state new limit rate 5/second accept

# Minecraft (25565) : rate-limit avec burst
nft add rule inet pakkt input tcp dport 25565 ct state new meter minecraft_throttle { ip saddr limit rate 20/second burst 50 packets } accept

# Bloquer les flags TCP invalides
nft add rule inet pakkt input tcp flags \& \(fin\|syn\|rst\|psh\|ack\|urg\) == fin\|syn drop
nft add rule inet pakkt input tcp flags \& \(fin\|syn\|rst\|psh\|ack\|urg\) == 0x0 drop

# Log et drop le reste
nft add rule inet pakkt input limit rate 10/minute log prefix \"[PAKKT DROP] \"
nft add rule inet pakkt input drop

⚠️ Important : Docker insère ses propres règles dans la table filter par défaut. En utilisant une table dédiée inet pakkt avec priorité 0, on garantit que les règles PAKKT s'exécutent avant celles de Docker, sans casser le NAT des conteneurs. Fail2ban et iptables-persistent peuvent coexister en parallèle.


Terminal Linux moderne affichant des lignes de commandes nftables et bpftool, fenêtre SSH sombre avec texte vert phosphorescent, détails techniques visibles, fond de bureau Ubuntu Server ou Debian, clavier mécanique et souris gamer en arrière-plan flou


Intégration PAKKT avec Pelican : workflow de déploiement en production

L'écosystème Pelican étant encore en développement actif (Pelican Panel v1.0 prévu pour Q2 2026), l'intégration PAKKT s'appuie sur l'API publique Pelican et l'architecture Wings existante. Voici le workflow recommandé pour protéger un node de production :

Étape 1 : Installation de l'agent PAKKT

Sur chaque node Pelican (Debian 12, Ubuntu 22.04/24.04, ou Rocky Linux 9), installer l'agent Go PAKKT :

curl -sSL https://install.pakkt.io | bash
# L'agent détecte automatiquement l'interface réseau principale
# et charge le PAKKT Engine XDP + règles nftables initiales

L'agent PAKKT consomme < 1 % CPU et < 5 MB RAM. Il communique avec le panel PAKKT via mTLS (authentification mutuelle), envoie un heartbeat toutes les 30 secondes, et se met à jour automatiquement (vérification SHA256).

Étape 2 : Configuration des règles XDP par port de jeu

Depuis le panel PAKKT, créer une règle pour chaque service exposé :

  • Wings API (TCP 8080) : rule_type: rate_limit, max_port_pps: 5000, protocol: tcp. Cela bloque les tentatives de flood HTTP/2.
  • Minecraft (TCP/UDP 25565) : rule_type: rate_limit, max_port_pps: 100000, protocol: any. Autorise un trafic légitime élevé tout en capant les floods UDP > 100k pps.
  • SFTP (TCP 2022) : rule_type: allow_only avec whitelist IP (ajouter les IPs des administrateurs). Tout autre trafic est DROP.

Les règles XDP sont appliquées en < 100 µs. En parallèle, l'agent synchronise automatiquement les listes IP (blacklist/whitelist) avec les règles nftables correspondantes, garantissant une cohérence double couche.

Étape 3 : Monitoring temps réel et GeoIP

Le panel PAKKT affiche :

  • Métriques par port/règle : nombre de paquets passés/droppés, pps moyen, pic pps, stockés dans TimescaleDB pour analyse historique.
  • Carte monde GeoIP : visualisation des IP sources par pays, top 10 IPs sources (légitime vs malveillant).
  • Logs internes agent : debug des décisions XDP, événements nftables (nouvelles connexions rate-limitées, flags invalides).
  • Audit log : traçabilité de chaque modification de règle (qui, quand, quelle IP admin).

Pour les utilisateurs Pterodactyl v1.x, l'intégration PAKKT permet de piloter les règles XDP/nft directement depuis le panel Pterodactyl (via plugin ou API). Le support natif Pelican est prévu dès la sortie de Pelican Panel v1.0.

Étape 4 : Templates partagés et marketplace

PAKKT propose une marketplace de templates XDP/nft partagés par la communauté. Exemple : template "Minecraft Anti-Bot 2026" avec règles pré-configurées (rate-limit par port, blacklist GeoIP pays à haut risque, whitelist IP staff). Les templates sont versionnés et auditables.



Cas d'usage avancés : cohabitation avec Docker, fail2ban et reverse proxies

Zéro conflit avec Docker et iptables-persistent

Docker insère ses règles dans la table nat (chaîne DOCKER) et la table filter (chaîne DOCKER-USER). En utilisant une table nftables dédiée inet pakkt avec priorité 0 (égale à filter), on s'assure que :

  • Les règles PAKKT s'évaluent avant les règles Docker dans le hook input.
  • Le NAT Docker reste intact (les conteneurs peuvent toujours sortir via SNAT).
  • Les règles iptables-persistent (si présentes) continuent de fonctionner en parallèle.

Pour vérifier l'ordre d'exécution :

nft list ruleset | grep -A 5 "chain input"
iptables -L -n -v --line-numbers

Intégration avec fail2ban

Fail2ban scanne les logs (SSH, Wings, etc.) et bannit temporairement les IPs via iptables. Pour synchroniser avec PAKKT :

  • Configurer fail2ban pour écrire les bans dans un fichier /var/log/fail2ban-banned.txt.
  • Un script cron (fourni par PAKKT) parse ce fichier et ajoute les IPs à la blacklist XDP via l'API PAKKT.
  • Résultat : une IP bannie par fail2ban est également DROP par XDP en < 1 µs, avant même d'atteindre la stack TCP.

Reverse proxy Nginx/Caddy devant Wings

Si Wings est exposé via un reverse proxy HTTPS (Nginx ou Caddy sur port 443), configurer PAKKT pour :

  • Rate-limit le port 443 à 10 000 pps (trafic HTTPS légitime).
  • Autoriser uniquement les connexions depuis les IPs du reverse proxy dans la règle nftables du port 8080 (Wings backend).
nft add rule inet pakkt input tcp dport 8080 ip saddr != 10.0.0.5 drop

Cela empêche un attaquant de contourner le proxy et de frapper directement Wings.



Complémentarité avec les solutions de scrubbing cloud

PAKKT est une protection on-host : le filtrage XDP/nftables s'exécute directement sur le kernel du node Pelican. Cette approche est complémentaire (et non alternative) aux solutions de scrubbing cloud comme Cloudflare Magic Transit, OVH Anti-DDoS VAC, ou Arbor Networks. Voici le modèle de déploiement recommandé :

  • Scrubbing cloud en amont : absorbe les attaques volumétriques (> 100 Gbps), filtre les floods DNS/NTP/SSDP par réflexion, et injecte le trafic "propre" vers l'IP du node via GRE ou direct routing.
  • PAKKT sur le node : applique des règles métier fines (rate-limit par port de jeu, whitelist IP staff, blocage de flags TCP invalides) que le scrubbing cloud ne peut pas gérer (latence API, granularité insuffisante).

En 2026, les attaques DDoS hybrides combinent saturation volumétrique (absorbée par le scrubbing) et attaques applicatives low-rate (gérées par PAKKT). Un node Pelican bien sécurisé utilise les deux couches.

⚠️ Important : si votre hébergeur fournit un scrubbing cloud gratuit ou payant, activez-le systématiquement. PAKKT ne remplace pas un scrubbing de plusieurs Tbps, il protège contre les attaques qui passent à travers ou ciblent des vecteurs applicatifs (connexions TCP malformées, brute-force, scans).


Schéma réseau abstrait montrant des flux de paquets filtrés, représentation graphique en 3D de firewall kernel avec couches XDP et nftables superposées, lumières bleues et vertes indiquant paquets légitimes vs bloqués, style tech moderne et épuré


Checklist de durcissement post-déploiement

Une fois PAKKT déployé, appliquer ces mesures complémentaires pour maximiser la résilience du node Pelican :

  • Désactiver les services inutiles : systemctl disable avahi-daemon cups bluetooth (si présents).
  • Kernel tuning pour haute charge : augmenter net.core.netdev_max_backlog, net.ipv4.tcp_max_syn_backlog, et activer net.ipv4.tcp_syncookies pour mitiger les SYN floods résiduels.
  • Logs centralisés : envoyer les logs nftables et agent PAKKT vers un serveur syslog externe (rsyslog + Loki/Grafana) pour audit forensique.
  • Backup régulier des règles : exporter la config nftables (nft list ruleset > /etc/nftables.conf.bak) et sauvegarder les BPF maps via bpftool map dump.
  • Mises à jour kernel : migrer vers un kernel 6.x (support XDP natif étendu, performances eBPF améliorées). Tester en pré-prod avant bascule.

Pour les infrastructures multi-nodes (10+ serveurs), automatiser le déploiement via Ansible ou Terraform. PAKKT fournit des playbooks Ansible prêts à l'emploi sur le blog PAKKT.



Conclusion

Sécuriser nodes Pelican en 2026 impose une approche kernel multi-couche : XDP pour le filtrage stateless à plusieurs Mpps, nftables pour le tracking de connexions et les rate-limits intelligents, et un monitoring centralisé pour détecter les anomalies en temps réel. Cette stack, déployable en moins de 30 secondes par node via PAKKT, garantit une latence ajoutée négligeable (sub-microseconde par paquet) tout en absorbant des attaques DDoS complexes. Combinée à un scrubbing cloud en amont et à un durcissement système rigoureux, elle transforme chaque node en forteresse résiliente sans compromettre l'expérience des joueurs légitimes.



FAQ

Est-ce que PAKKT ralentit les serveurs de jeu hébergés sur mon node Pelican ?

Non. Le filtrage XDP s'exécute en sub-microseconde par paquet, avant la stack réseau du noyau. L'impact CPU mesuré est < 1 % même sous 5 Mpps de trafic légitime. Les règles nftables avec conntrack ajoutent une latence négligeable (< 10 µs par nouvelle connexion). Les benchmarks internes montrent une latency moyenne inchangée (±0,2 ms) sur des serveurs Minecraft avec 200+ joueurs simultanés.

Puis-je utiliser PAKKT si mon node Pelican héberge aussi des conteneurs Docker pour d'autres services (bases de données, web) ?

Oui. La table nftables inet pakkt est isolée et s'exécute avec priorité 0, avant les règles Docker. Le NAT et le routage inter-conteneurs restent intacts. Veillez simplement à autoriser explicitement les ports exposés par vos conteneurs non-jeu dans les règles PAKKT (ou utilisez rule_type: allow_only avec whitelist IP si le service est critique). L'agent PAKKT détecte automatiquement les interfaces Docker (docker0, br-*) et ne leur attache pas de programme XDP.

Comment gérer les faux positifs (joueurs légitimes bloqués par rate-limit) ?

Le panel PAKKT affiche en temps réel les IPs source droppées et les compteurs par règle. Si vous constatez des drops légitimes, ajustez les seuils : augmentez max_port_pps ou burst dans la règle nftables correspondante. Pour les IPs staff/admin, utilisez la whitelist PAKKT (double couche XDP + nft) : ces IPs ne subissent aucun rate-limit. Enfin, activez les logs nftables avec log prefix pour auditer chaque décision et affiner les règles itérativement.

Protégez vos serveurs

Déployez PAKKT en 30 secondes

Protection kernel double couche XDP + nftables, pilotable depuis un panel centralisé. Essai gratuit 7 jours.