Offre Durée limitée : -10% sur tout le site avec le code WELCOME10

Sécuriser son VPS Linux avec nftables : pare-feu essentiel pour un serveur de jeu

Mis à jour le 30 septembre 2026 7 min de lecture 8 sections

Par défaut, un VPS Linux fraîchement livré n'a souvent aucun firewall actif : toutes les connexions entrantes sont acceptées, ce qui expose votre serveur de jeu aux scans, tentatives d'intrusion et saturation de ports. Ce guide d'administration réseau vous montre comment configurer nftables, le successeur officiel d'iptables sur Debian 10+ et Ubuntu 20.04+, pour n'autoriser que les protocoles et ports strictement nécessaires et bloquer tout le reste en tant que root.

Pourquoi nftables plutôt qu'iptables ?

nftables est le framework firewall par défaut dans les distributions Linux modernes. Debian l'utilise depuis la version 10 Buster, Ubuntu depuis la 20.04. Contrairement à iptables, nftables gère IPv4 et IPv6 dans un seul jeu de règles via la famille inet, supporte nativement les ensembles de valeurs (sets) pour grouper plusieurs ports dans une seule règle, et est plus performant sur les serveurs dédiés avec un trafic réseau important. Les règles sont stockées dans un fichier de config (/etc/nftables.conf) persisté entre les redémarrages via systemd.

Si votre hébergeur a installé Fail2ban, UFW ou firewalld sur votre VPS Linux, ces outils utilisent souvent iptables ou nftables en arrière-plan. Ce guide configure nftables directement, en ligne de commande, sans surcouche, ce qui donne un contrôle total sur les règles appliquées aux interfaces réseau.

Installer et activer nftables

Sur un VPS Debian ou Ubuntu, nftables est généralement déjà disponible. Pour l'installer et l'activer en tant qu'administrateur :

sudo apt install nftables
sudo systemctl enable nftables.service
sudo systemctl start nftables.service

Vérifiez l'état du service :

sudo systemctl status nftables.service

Pour afficher les règles actuellement actives (vide si c'est une installation fraîche) :

sudo nft list ruleset

Sur AlmaLinux ou Rocky Linux (basés CentOS), nftables est également disponible :

sudo dnf install nftables
sudo systemctl enable --now nftables.service

Principe des règles nftables

Une configuration nftables s'organise en tables, chaînes et règles :

  • Une table est un conteneur de chaînes. La famille inet couvre à la fois IPv4 et IPv6.
  • Une chaîne correspond à un point d'accroche dans le traitement des paquets au niveau des interfaces réseau. Pour filtrer les connexions entrantes, on utilise le hook input.
  • Une règle définit une action (accept, drop, log) pour les paquets qui correspondent à ses critères : adresse IP source, adresse IP de destination, port, protocole.

La politique par défaut (policy) d'une chaîne détermine le sort des paquets qui ne correspondent à aucune règle. Mettre cette politique à drop instaure le principe du moindre privilège : tout ce qui n'est pas explicitement autorisé est rejeté. C'est la base d'une configuration firewall sécurisée pour un serveur exposé sur Internet.

Configuration pare-feu pour un serveur de jeu

Structure du fichier de configuration

Le fichier principal est /etc/nftables.conf. Voici une configuration complète adaptée à un serveur de jeu Linux hébergeant FiveM (port 30120 UDP/TCP) et Minecraft (port 25565 TCP), avec accès SSH et authentification maintenus :

#!/usr/sbin/nft -f

flush ruleset

table inet filter {
    chain input {
        type filter hook input priority 0; policy drop;

        # Autoriser le trafic sur l'interface loopback (réseau local interne)
        iifname "lo" accept

        # Autoriser les connexions déjà établies et connexions liées
        ct state established,related accept

        # Rejeter les connexions invalides (protection contre certaines attaques)
        ct state invalid drop

        # Autoriser les ping ICMP (diagnostic réseau, adresse IP distante)
        icmp type echo-request accept
        icmpv6 type { echo-request, nd-neighbor-solicit } accept

        # Autoriser SSH (port 22) - authentification administrateurs
        tcp dport 22 accept

        # Autoriser FiveM (port 30120 TCP et UDP)
        tcp dport 30120 accept
        udp dport 30120 accept

        # Autoriser Minecraft (port 25565 TCP)
        tcp dport 25565 accept
    }

    chain forward {
        type filter hook forward priority 0; policy drop;
    }

    chain output {
        type filter hook output priority 0; policy accept;
    }
}

Points essentiels de cette configuration :

  • flush ruleset au début : efface les règles existantes avant d'appliquer les nouvelles, pour éviter les doublons.
  • iifname "lo" accept : indispensable pour ne pas casser les communications sur le réseau local interne du serveur (base de données, scripts, APIs locales).
  • ct state established,related accept : autorise les réponses aux connexions sortantes initiées par le serveur (mises à jour, DNS, appels API).
  • policy drop sur la chaîne input : tout ce qui n'est pas listé est bloqué.
  • policy accept sur la chaîne output : le serveur peut établir des connexions sortantes librement pour les scripts et services.

Appliquer la configuration

Après avoir modifié le fichier de config, rechargez les règles depuis la ligne de commande :

sudo nft -f /etc/nftables.conf

Ou via systemd (qui recharge automatiquement depuis le fichier de config) :

sudo systemctl reload nftables.service

Vérifiez immédiatement que les règles sont actives et que toutes les interfaces sont bien couvertes :

sudo nft list ruleset

Adapter les ports selon votre serveur

Ports courants pour les serveurs de jeu

Ajoutez ou remplacez les règles de port dans la section chain input selon vos protocoles :

# Rust (port 28015 UDP et TCP)
tcp dport 28015 accept
udp dport 28015 accept

# Garry's Mod (port 27015 UDP)
udp dport 27015 accept

# Pterodactyl panel (HTTPS/HTTP admin)
tcp dport 443 accept
tcp dport 80 accept

# VPN WireGuard (port 51820 UDP)
udp dport 51820 accept

Pour ouvrir une plage de ports d'un coup (APIs de voix, proxys, etc.) :

# Plage de ports UDP 20000-20100
udp dport 20000-20100 accept

Sur un serveur dédié hébergeant plusieurs serveurs de jeu via Pterodactyl, utilisez des ensembles de valeurs pour grouper tous les ports dans une seule règle, ce qui simplifie la gestion des scripts de déploiement :

# Plusieurs ports TCP en une règle
tcp dport { 22, 80, 443, 25565, 30120 } accept

Changer le port SSH sans se couper l'accès

Si vous avez déplacé SSH sur un port non standard (par exemple 2222) pour désactiver les scans automatiques, remplacez la règle SSH par :

tcp dport 2222 accept

Attention : appliquez toujours les nouvelles règles depuis une session SSH active et conservez une deuxième connexion ouverte avant de recharger. En cas d'erreur, vous pourrez corriger depuis la session existante sans perdre l'accès distant en tant qu'admin. Consultez notre guide pour configurer les clés SSH sans perdre l'accès avant de modifier les règles SSH.

Opérations courantes avec nftables

Ajouter une règle à chaud

Sans modifier le fichier de config (la règle disparaît au prochain rechargement) :

sudo nft add rule inet filter input tcp dport 8080 accept

Lister les règles avec leurs handles

sudo nft -a list ruleset

Chaque règle affiche son handle. Utilisez-le pour supprimer une règle spécifique sans devoir la désactiver entièrement :

sudo nft delete rule inet filter input handle 7

Effacer toutes les règles (urgence)

Si vous êtes bloqué hors du serveur, votre hébergeur fournit généralement un accès console KVM ou IPMI. Depuis cet accès root, effacez toutes les règles pour restaurer la connexion :

sudo nft flush ruleset

Sur un VPS Linux, vérifiez dans votre espace client la disponibilité d'un accès console de secours avant de modifier les règles firewall. C'est votre filet de sécurité en cas de mauvaise configuration des interfaces.

Rendre les règles persistantes au redémarrage

Après avoir validé votre config, sauvegardez le ruleset actuel dans le fichier de config :

# Sauvegarder le ruleset dans nftables.conf
sudo nft list ruleset > /etc/nftables.conf

Le service systemd rechargera automatiquement ce fichier à chaque démarrage du serveur :

sudo systemctl enable nftables.service

Vérifiez que le service est bien configuré pour démarrer automatiquement :

sudo systemctl is-enabled nftables.service

Pour une protection multicouche, combinez nftables avec Fail2ban qui bloque automatiquement les adresses IP après plusieurs échecs d'authentification SSH. Fail2ban s'intègre nativement avec nftables depuis sa version 0.11 et ajoute des règles dynamiques dans la table firewall sans interférer avec vos règles statiques.

Surveiller et déboguer les règles

Pour vérifier si des connexions sont bloquées par le firewall, ajoutez un compteur à une règle :

sudo nft add rule inet filter input ct state invalid counter drop

Listez les compteurs pour voir combien de paquets ont été bloqués sur chaque règle :

sudo nft list ruleset | grep counter

Combinez nftables avec journalctl pour analyser les connexions bloquées enregistrées dans les journaux systemd, et avec les règles de limitation SSH pour compléter la protection d'authentification de votre serveur.

Hébergez votre serveur de jeu sur un VPS Linux sécurisé avec une infrastructure réseau dédiée.

Découvrir nos VPS Linux