Commandes Essentielles de nftables pour Gérer les Pare-feux Linux
- Mise à jour le 18 juil. 2025
nftables est le remplaçant moderne de l’outil iptables utilisé pour gérer le framework de pare-feu Netfilter sous Linux. Voici les commandes clés et quelques notes pour comprendre son fonctionnement sur un système Linux typique (exemple basé sur Debia).
Configuration
- OS : Debian 12
- nftables : v1.0.6 (Lester Gooch #5)
Informations générales
- Activer nftables au démarrage avec
systemctl
:
root@host:~# systemctl enable nftables.service
- Emplacement du fichier de configuration par défaut :
root@host:~# /etc/nftables.conf
- Charger manuellement le fichier de configuration nftables :
root@host:~# nft -f /etc/nftables.conf
- Afficher l’ensemble des règles actives :
root@host:~# nft list ruleset
Remarque : La famille inet
inclut à la fois ip
(IPv4) et ip6
(IPv6). Utilisez ip
ou ip6
explicitement si nécessaire.
Tables
- Créer une nouvelle table :
root@host:~# nft add table inet <nom_de_table>
- Lister les tables existantes :
root@host:~# nft list tables
- Supprimer une table :
root@host:~# nft delete table inet <nom_de_table>
- Vider une table (supprimer toutes les règles sans supprimer la table elle-même) :
root@host:~# nft flush table inet <nom_de_table>
Les Chaines
- Créer une nouvelle chaîne :
root@host:~# nft add chain inet <nom_table> <nom_chaine>
- Lister toutes les chaînes :
root@host:~# nft list chains
- Supprimer une chaîne :
root@host:~# nft delete chain inet <nom_table> <nom_chaine>
- Créer une chaîne INPUT pour le trafic entrant :
root@host:~# nft add chain inet filter INPUT { type filter hook input priority 0\; }
- Créer une chaîne FORWARD pour le trafic routé :
root@host:~# nft add chain inet filter FORWARD { type filter hook forward priority 0\; }
- Créer une chaîne OUTPUT pour le trafic sortant :
root@host:~# nft add chain inet filter OUTPUT { type filter hook output priority 0\; }
- Créer une chaîne NAT pour le masquage (postrouting) :
root@host:~# nft add chain inet filter my_masquerade '{ type nat hook postrouting priority 100; }'
- Créer une chaîne NAT pour le pré-routage et la redirection de ports :
root@host:~# nft add chain inet filter my_prerouting '{ type nat hook prerouting priority -100; }'
Les Règles
Créer des règles
- Autoriser le trafic entrant avec comptage de paquets et un commentaire :
root@host:~# nft add rule inet <nom_table> <nom_chaine> counter accept comment "ALLOW INPUT"
- Autoriser le trafic SSH sur le port 22 avec comptage des paquets :
root@host:~# nft add rule inet filter INPUT tcp dport 22 counter
- Autoriser le trafic HTTP et HTTPS dans les états new ou established, avec comptage :
root@host:~# nft add rule inet filter INPUT tcp dport {80, 443} ct state new,established counter accept
Supprimer des règles
- Lister les règles avec leurs numéros de handle :
root@host:~# nft -n -a list ruleset
- Supprimer une règle par son handle :
root@host:~# nft delete rule ip filter INPUT handle 38
Remplacer une règle
- Lister les règles actuelles avec les numéros de handle :
root@host:~# nft -n -a list ruleset
- Remplacer une règle en utilisant son handle :
root@host:~# nft replace rule ip filter INPUT handle 38 iifname "eth0" ip saddr 192.168.1.12 counter drop
Insérer une règle
- Insérer une règle à une position spécifique dans la chaîne :
root@host:~# nft insert rule ip filter INPUT position 17 iifname "eth0" ip saddr { 192.168.1.11, 192.168.1.68, 192.168.1.118 } counter drop
NAT
Créer une table
- Créer une table dédiée au NAT :
root@host:~# nft add table ip NAT
Créer des chaînes
- Créer une chaîne postrouting pour le masquage du trafic :
root@host:~# nft add chain ip NAT my_masquerade '{ type nat hook postrouting priority 100; }'
- Créer une chaîne prerouting pour la redirection de ports :
root@host:~# nft add chain ip NAT my_prerouting '{ type nat hook prerouting priority -100; }'
Règle de masquage
- Masquer tout le trafic sortant, sauf les adresses de destination dans
192.168.0.0/16
:
root@host:~# nft add rule NAT my_masquerade ip daddr != { 192.168.0.0/16 } oifname <interface> masquerade
Règle de pré-routage
- Rediriger le trafic HTTPS vers un serveur interne (
192.168.1.10
) avec DNAT :
root@host:~# nft add rule NAT my_prerouting iifname <interface> tcp dport { https } dnat to 192.168.1.10 comment "Web Server"