nftables : le pare-feu Linux qui remplace iptables
Le projet est né des limitations d'iptables. Celui-ci nécessitait quatre commandes différentes pour IPv4, IPv6, les trames Ethernet et ARP. Le modèle de règles était statique et les structures de données internes inefficaces. nftables résout cela avec un seul démon, une seule syntaxe, un seul outil (`nft`) et une seule architecture de noyau.
Historique et développement
La première présentation publique de nftables a eu lieu lors de l'atelier Netfilter en 2008 à Paris. Patrick McHardy, membre du Netfilter Core Team, a publié la première version alpha le 18 mars 2009. C'était une version de développement précoce, mais elle marquait la transition de l'idée vers un logiciel fonctionnel.Le 16 octobre 2013, Pablo Neira Ayuso a soumis une « nftables core pull request » au noyau Linux. La fusion a été achevée le 19 janvier 2014, le même jour que la sortie du noyau 3.13. À partir de ce moment, nftables faisait partie du noyau standard.
La première version pour utilisateurs finaux, la 0.099, est apparue le 20 janvier 2014 — un jour après l'intégration dans le noyau. Cela a donné aux utilisateurs un outil stable pour travailler avec nftables dans des environnements de production.
La version la plus récente est la 1.1.6, publiée le 5 décembre 2025. Le wiki nftables confirme que des versions ont été maintenues jusqu'au moins le 30 avril 2025 (version 1.1.3). Le projet est activement maintenu.
Étapes : commencer avec nftables
1. Vérifiez si nftables est disponible
nft --versionCela affiche la version de l'outil nft. Si la commande n'est pas trouvée, installez d'abord le paquet.
2. Consultez la ruleset actuelle
sudo nft list rulesetCela affiche toutes les tables, chaînes et règles existantes. Sur un nouveau système, c'est vide ou cela affiche uniquement la configuration par défaut de votre distribution.
3. Créez une table
sudo nft add table inet filterCela crée une table nommée « filter » pour la famille « inet ». La famille `inet` traite à la fois IPv4 et IPv6 dans une seule table — c'est le grand avantage par rapport à iptables, où vous aviez besoin de tables séparées.
Les autres familles sont `ip` (IPv4 uniquement), `ip6` (IPv6 uniquement), `arp` et `bridge`.
4. Ajoutez une chaîne
sudo nft add chain inet filter input { type filter hook input priority 0 \; policy accept \; }Cela ajoute une chaîne nommée « input » liée au hook input. La politique est définie sur `accept`, ce qui signifie que tous les paquets sont autorisés par défaut. Les barres obliques inverses sont nécessaires pour échapper les accolades et les points-virgules pour le shell.
Vous avez trois hooks standard : `input` (paquets entrants), `output` (paquets sortants) et `forward` (paquets transférés).
5. Ajoutez une règle
sudo nft add rule inet filter input tcp dport 22 acceptCela accepte le trafic TCP entrant sur le port 22 (SSH). La syntaxe est construite logiquement : d'abord la table, puis la chaîne, puis les critères de correspondance, puis l'action.
Si vous voulez bloquer tout le reste du trafic, ajoutez après cette règle une règle de drop :
sudo nft add rule inet filter input drop
6. Enregistrez la configuration
sudo nft list ruleset > /etc/nftables.confLes règles nftables ne sont pas persistantes après un redémarrage. En écrivant la ruleset dans le fichier de configuration, le système charge les règles automatiquement au démarrage.
7. Rechargez la configuration
sudo nft -f /etc/nftables.confCela lit le fichier de configuration et applique toutes les règles. Utilisez cela après avoir modifié le fichier ou après un redémarrage du service.
8. Utilisez des ensembles pour des règles plus efficaces
sudo nft add set inet filter blacklist { type ipv4_addr \; }
sudo nft add element inet filter blacklist { 192.168.1.100, 10.0.0.5 }
sudo nft add rule inet filter input ip saddr @blacklist dropLes ensembles sont des structures de données avancées plus efficaces que les chaînes de règles linéaires. Le noyau évalue les règles via des tables de hachage ou des arbres radix, ce qui donne des temps de recherche plus rapides pour les grands ensembles de règles. Vous pouvez également mettre à jour les ensembles dynamiquement sans recharger toute la ruleset — essentiel dans les environnements cloud et conteneurisés.
Vérification
Vérifiez que votre pare-feu fonctionne correctement :sudo nft list ruleset
Cela affiche la configuration complète. Vous devriez voir votre table, votre chaîne et vos règles. Testez ensuite la connexion vers une adresse IP bloquée :
ping -c 3 192.168.1.100
Si la règle fonctionne, vous n'obtiendrez aucune réponse. Pour une vérification automatisée avec une sortie JSON :
sudo nft -j list ruleset
Cela génère du JSON que vous pouvez traiter avec des outils de surveillance ou des systèmes de journalisation.
Problèmes fréquents
Problème : commande nft introuvable Installez le paquet :sudo apt install nftables
Sur RHEL/Fedora :
sudo dnf install nftables
Problème : message d'erreur « Operation not permitted » lors de l'ajout de règles Vous avez besoin des droits root. Utilisez sudo ou connectez-vous en tant que root. Vérifiez également si le kernel prend en charge nftables :
cat /proc/net/netfilter/nf_tables
Si ce fichier n'existe pas, votre kernel ne prend pas en charge nftables ou le module n'est pas chargé.
Problème : les règles ont disparu après un redémarrage Écrivez la ruleset dans le fichier de configuration et assurez-vous que le service est actif :
sudo systemctl enable nftables
sudo systemctl start nftables
Intégration avec d'autres systèmes
firewalld, le daemon de pare-feu standard des systèmes basés sur Red Hat, utilise nftables comme backend par défaut. Les utilisateurs qui utilisent firewalld travaillent donc déjà avec nftables sans le savoir.Docker prend en charge nftables expérimentalement à partir de Docker Engine 29.0.0. Vous pouvez configurer le backend avec :
dockerd --firewall-backend=nftables
Cette prise en charge est encore expérimentale. Les règles pour les réseaux overlay (Docker Swarm) n'ont pas encore été migrées, vous ne pouvez donc pas activer nftables lorsque Docker fonctionne en mode Swarm.
Monitoring et débogage
La commande `nft monitor` affiche les modifications du pare-feu en temps réel :sudo nft monitor rules
Cela suit uniquement les modifications de règles — ajouts, suppressions et ajustements. Pour les systèmes automatisés :
sudo nft -j monitor
Cela génère une sortie JSON que vous pouvez intégrer à des outils de monitoring.
Sécurité
nftables simplifie l'interface kernel en un seul appel système (`nft`), ce qui réduit la surface d'attaque. Vous avez un contrôle précis sur les utilisateurs ou processus autorisés à modifier les règles. Cela améliore la gestion de l'accès au pare-feu.Le développement de nftables se poursuit. Le projet s'adapte aux exigences des environnements réseau modernes — des serveurs sur site à l'infrastructure cloud et aux conteneurs. Avec le soutien de Red Hat via firewalld, Docker et le kernel Linux lui-même, nftables n'est plus une alternative, mais la norme. La question n'est pas de savoir si vous passerez, mais quand vous ferez la transition — et si vous avez encore besoin des configurations iptables héritées au moment où le dernier support iptables disparaîtra.