← Sommaire SkyLinux

nftables — Le pare-feu nouvelle génération

Si iptables est le pare-feu historique de Linux, nftables est son héritier moderne. Introduit avec le noyau Linux 3.13, il simplifie la gestion des règles tout en offrant des performances accrues et des fonctionnalités avancées comme le suivi de connexion étatisé et la NAT intégrés.

Pourquoi passer à nftables ?

iptables utilise quatre outils distincts (iptables, ip6tables, arptables, ebtables) pour gérer IPv4, IPv6, ARP et les bridges. nftables unifie tout cela dans un seul outil cohérent. De plus, les règles iptables sont directement convertibles vers nftables.

Concepts fondamentaux

Tables, chaînes et règles

nftables organise les règles en trois niveaux :

Famille réseau

Premiers pas avec nftables

Vérifier si nftables est installé

which nft
sudo nft list ruleset

Affiche les règles actuelles (vide si aucune règle n'est définie).

Créer une table de base

sudo nft add table inet mon_parefeu

Crée une table nommée mon_parefeu dans la famille inet (IPv4 + IPv6).

Créer une chaîne INPUT

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

Crée une chaîne INPUT de type filter accrochée sur le hook input, avec priorité 0 et politique par défaut drop.

Ajouter des règles

Autoriser le loopback

sudo nft add rule inet mon_parefeu input iif lo accept

Autoriser les connexions établies et connexes

sudo nft add rule inet mon_parefeu input ct state established,related accept

Autoriser SSH (port 22)

sudo nft add rule inet mon_parefeu input tcp dport 22 accept

Autoriser HTTP et HTTPS (ports 80 et 443)

sudo nft add rule inet mon_parefeu input tcp dport 80 accept
sudo nft add rule inet mon_parefeu input tcp dport 443 accept

Afficher les règles

sudo nft list ruleset

Affiche toutes les règles actives.

sudo nft list table inet mon_parefeu

Affiche uniquement les règles de la table demandée.

sudo nft list chain inet mon_parefeu input

Affiche uniquement les règles de la chaîne input.

Supprimer des règles

Supprimer une règle par son handle (identifiant)

sudo nft -a list ruleset

L'option -a affiche les handles de chaque règle.

sudo nft delete rule inet mon_parefeu input handle 3

Supprime la règle portant le handle 3.

Supprimer une chaîne

sudo nft delete chain inet mon_parefeu input

Supprimer une table

sudo nft delete table inet mon_parefeu

Vider toutes les règles

sudo nft flush ruleset

Attention : cela supprime toutes les tables et règles.

Insérer et remplacer des règles

Insérer une règle au début d'une chaîne

sudo nft insert rule inet mon_parefeu input ip saddr 192.168.1.50 drop

Cette règle bloque le trafic entrant depuis 192.168.1.50.

Insérer à une position précise

sudo nft insert rule inet mon_parefeu input position 3 ip saddr 10.0.0.0/8 drop

Remplacer une règle

sudo nft replace rule inet mon_parefeu input handle 5 tcp dport 2222 accept

Bloquage avancé

Bloquer une adresse IP spécifique

sudo nft add rule inet mon_parefeu input ip saddr 203.0.113.50 drop

Bloquer un réseau entier

sudo nft add rule inet mon_parefeu input ip saddr 192.168.100.0/24 drop

Bloquer un port entrant

sudo nft add rule inet mon_parefeu input tcp dport 8080 drop

Limiter le nombre de connexions (rate limiting)

sudo nft add rule inet mon_parefeu input tcp dport 80 limit rate 10/second accept

Limite à 10 connexions par seconde sur le port 80.

Loguer les paquets bloqués

sudo nft add rule inet mon_parefeu input drop log level 4 prefix "nftables DROP: "

Les logs apparaîtront dans /var/log/kern.log ou /var/log/syslog.

NAT (Network Address Translation)

Configurer du NAT de base

sudo nft add table nat
sudo nft add chain nat postrouting { type nat hook postrouting priority 100 \; }
sudo nft add rule nat postrouting ip saddr 192.168.1.0/24 oif eth0 masquerade

Active le MASQUERADE pour le réseau 192.168.1.0/24 sur l'interface eth0 (partage de connexion).

DNAT (redirection de port)

sudo nft add chain nat prerouting { type nat hook prerouting priority -100 \; }
sudo nft add rule nat prerouting iif eth0 tcp dport 8080 dnat to 192.168.1.100:80

Redirige le trafic TCP du port 8080 vers 192.168.1.100:80.

Sauvegarder et restaurer les règles

Sauvegarder avec nftables-save

sudo nft list ruleset > ~/nftables.rules

Restaurer au démarrage (Debian/Ubuntu)

sudo cp ~/nftables.rules /etc/nftables.conf

Le service nftables charge automatiquement /etc/nftables.conf au démarrage.

Activer le service

sudo systemctl enable nftables
sudo systemctl start nftables

Restaurer manuellement

sudo nft -f /etc/nftables.conf

Exemple complet : pare-feu pour serveur web

#!/usr/sbin/nft -f
flush ruleset
table inet parefeu_serveur {
chain input {
type filter hook input priority 0; policy drop;
# Loopback
iif lo accept
# Connexions établies
ct state established,related accept
# SSH
tcp dport 22 accept
# HTTP / HTTPS
tcp dport 80 accept
tcp dport 443 accept
# Ping (ICMP)
icmp type echo-request accept
}
chain forward {
type filter hook forward priority 0; policy drop;
}
}

Sauvegarde ce contenu dans /etc/nftables.conf et charge-le avec sudo nft -f /etc/nftables.conf.

Convertir iptables vers nftables

La commande iptables-restore peut convertir automatiquement tes règles iptables :

sudo iptables-save | sudo iptables-restore-translate -f - | sudo nft -f -

Ou de façon permanente :

sudo iptables-save > ~/iptables.rules
sudo iptables-restore-translate -f ~/iptables.rules | sudo nft -f /etc/nftables.conf

Tableau comparatif iptables vs nftables

Aspectiptablesnftables
Unification4 outils séparésUn seul outil
TablesFilter, nat, mangle, rawPersonnalisables
Suivi de connexionModule externeIntégré (ct)
NATModule externeIntégré
PerformanceBonneMeilleure
SyntaxeComplexe, fragmentéeCohérente et flexible
Configuration au démarrage/etc/iptables/rules.v4/etc/nftables.conf
Support noyauDepuis 2.4Depuis 3.13

Commandes utiles pour le diagnostic

Bonnes pratiques

  1. Commence toujours par une politique drop sur la chaîne input
  2. Utilise la famille inet pour gérer IPv4 et IPv6 dans la même table
  3. Teste avec une session SSH ouverte avant d'activer le pare-feu — garde toujours un accès
  4. Sauvegarde dans /etc/nftables.conf pour le démarrage automatique
  5. Utilise un script pour décrire tes règles de manière lisible (voir exemple ci-dessus)
  6. Vérifie régulièrement tes règles avec nft list ruleset

Exercices pratiques

  1. Vérifie si nftables est installé sur ta machine : which nft && nft -v
  2. Crée une table inet test_parefeu et ajoute les règles de base (loopback, established, SSH, HTTP/HTTPS).
  3. Affiche tes règles avec sudo nft list ruleset.
  4. Bloque le trafic depuis une IP de test (par exemple 10.255.255.1).
  5. Sauvegarde tes règles dans un fichier et restaure-les.
  6. Inverse le problème : remplace une règle existante par une autre.