Skip to content
VDS · Réseau, adresse IP et domaines

nftables : des règles plus complexes

Quand ufw ne suffit plus : la structure des tables et chaînes nftables, une configuration fonctionnelle prête à l'emploi, les ensembles d'adresses, la limitation de débit et la redirection de ports.

Mis à jour le 23 août 2026

nftables est le mécanisme même du noyau sur lequel repose ufw. Vous devez l'utiliser directement lorsque vous avez besoin d'ensembles d'adresses nommés, de limitation de débit, de politiques différentes par interface ou de redirection de ports — autrement dit, lorsque vos règles ne tiennent plus dans « autoriser un port ».

Vous n'avez pas besoin d'utiliser les deux outils en même temps : avant de basculer, désactivez ufw avec ufw disable, sinon les règles se chevaucheront et vous embrouilleront lors du débogage.

Structure

Les règles résident dans des tables, les tables contiennent des chaînes, et les chaînes contiennent des règles. Une chaîne est liée à une étape de traitement des paquets (input, forward, output) et possède une politique par défaut.

apt install -y nftables
systemctl enable --now nftables
nft list ruleset

Configuration fonctionnelle

Fichier /etc/nftables.conf :

#!/usr/sbin/nft -f
flush ruleset

table inet filter {
    set admins {
        type ipv4_addr
        elements = { 203.0.113.5, 198.51.100.7 }
    }

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

        iif lo accept
        ct state established,related accept
        ct state invalid drop

        ip protocol icmp icmp type echo-request limit rate 5/second accept

        tcp dport 22 ip saddr @admins accept
        tcp dport 22 ct state new limit rate 6/minute accept
        tcp dport { 80, 443 } accept
    }

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

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

Appliquer et enregistrer :

nft -c -f /etc/nftables.conf
nft -f /etc/nftables.conf
systemctl restart nftables

L'option -c vérifie uniquement la syntaxe sans appliquer les règles. Utilisez-la systématiquement : une politique drop avec une faute de frappe coupe l'accès, et vous devrez revenir via la console dans le panneau /hosting/vds/m/<id>.

Ensembles d'adresses et limitation de débit

Un ensemble nommé se modifie à la volée, sans recharger les règles :

nft add element inet filter admins { 192.0.2.10 }
nft delete element inet filter admins { 198.51.100.7 }
nft list set inet filter admins

Un ensemble dynamique avec un délai d'expiration est pratique pour les blocages personnalisés :

set blocked {
    type ipv4_addr
    flags timeout
    timeout 1h
}

Redirection et substitution d'adresses

Nécessaire si un conteneur ou un tunnel tourne à l'intérieur :

table ip nat {
    chain prerouting {
        type nat hook prerouting priority -100;
        tcp dport 8443 dnat to 10.10.0.2:443
    }
    chain postrouting {
        type nat hook postrouting priority 100;
        oifname "eth0" masquerade
    }
}

Erreurs courantes

ErreurConséquenceSolution
Absence de règle ct state establishedLes réponses aux requêtes sortantes sont coupéesAjoutez-la en première règle
Oubli de iif lo acceptLes services locaux et les bases de données tombent en panneAutorisez l'interface loopback
Règles appliquées mais non enregistréesTout est ouvert après un redémarrageÉcrivez dans /etc/nftables.conf
ufw et nftables ensembleRésultat imprévisibleNe gardez qu'un seul outil

Testez un nouvel ensemble de règles dans une session séparée sans fermer votre session de travail. Une protection simple : sleep 300 && nft flush ruleset en arrière-plan — si vous vous coupez l'accès, il revient tout seul.

Si vous n'avez pas besoin de ces détails, revenez à ufw : il couvre la plupart des tâches.