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.
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.
nftables organise les règles en trois niveaux :
ip : IPv4 uniquementip6 : IPv6 uniquementinet : mélange IPv4 et IPv6 (recommandé)arp : protocole ARPbridge : pont réseaunetdev : attaches de bas niveauwhich nftsudo nft list rulesetAffiche les règles actuelles (vide si aucune règle n'est définie).
sudo nft add table inet mon_parefeuCrée une table nommée mon_parefeu dans la famille inet (IPv4 + IPv6).
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.
sudo nft add rule inet mon_parefeu input iif lo acceptsudo nft add rule inet mon_parefeu input ct state established,related acceptsudo nft add rule inet mon_parefeu input tcp dport 22 acceptsudo nft add rule inet mon_parefeu input tcp dport 80 acceptsudo nft add rule inet mon_parefeu input tcp dport 443 acceptsudo nft list rulesetAffiche toutes les règles actives.
sudo nft list table inet mon_parefeuAffiche uniquement les règles de la table demandée.
sudo nft list chain inet mon_parefeu inputAffiche uniquement les règles de la chaîne input.
sudo nft -a list rulesetL'option -a affiche les handles de chaque règle.
sudo nft delete rule inet mon_parefeu input handle 3Supprime la règle portant le handle 3.
sudo nft delete chain inet mon_parefeu inputsudo nft delete table inet mon_parefeusudo nft flush rulesetAttention : cela supprime toutes les tables et règles.
sudo nft insert rule inet mon_parefeu input ip saddr 192.168.1.50 dropCette règle bloque le trafic entrant depuis 192.168.1.50.
sudo nft insert rule inet mon_parefeu input position 3 ip saddr 10.0.0.0/8 dropsudo nft replace rule inet mon_parefeu input handle 5 tcp dport 2222 acceptsudo nft add rule inet mon_parefeu input ip saddr 203.0.113.50 dropsudo nft add rule inet mon_parefeu input ip saddr 192.168.100.0/24 dropsudo nft add rule inet mon_parefeu input tcp dport 8080 dropsudo nft add rule inet mon_parefeu input tcp dport 80 limit rate 10/second acceptLimite à 10 connexions par seconde sur le port 80.
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.
sudo nft add table natsudo 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 masqueradeActive le MASQUERADE pour le réseau 192.168.1.0/24 sur l'interface eth0 (partage de connexion).
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:80Redirige le trafic TCP du port 8080 vers 192.168.1.100:80.
sudo nft list ruleset > ~/nftables.rulessudo cp ~/nftables.rules /etc/nftables.confLe service nftables charge automatiquement /etc/nftables.conf au démarrage.
sudo systemctl enable nftablessudo systemctl start nftablessudo nft -f /etc/nftables.conf#!/usr/sbin/nft -fflush rulesettable 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.
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.rulessudo iptables-restore-translate -f ~/iptables.rules | sudo nft -f /etc/nftables.conf| Aspect | iptables | nftables |
|---|---|---|
| Unification | 4 outils séparés | Un seul outil |
| Tables | Filter, nat, mangle, raw | Personnalisables |
| Suivi de connexion | Module externe | Intégré (ct) |
| NAT | Module externe | Intégré |
| Performance | Bonne | Meilleure |
| Syntaxe | Complexe, fragmentée | Cohérente et flexible |
| Configuration au démarrage | /etc/iptables/rules.v4 | /etc/nftables.conf |
| Support noyau | Depuis 2.4 | Depuis 3.13 |
sudo nft list ruleset -a : afficher avec les handlessudo nft monitor : afficher les changements de règles en temps réelsudo nft monitor trace : tracer le trajet des paquetssudo nft reset table inet mon_parefeu : réinitialiser une tablenft list rulesetwhich nft && nft -vinet test_parefeu et ajoute les règles de base (loopback, established, SSH, HTTP/HTTPS).sudo nft list ruleset.10.255.255.1).