[Nftables](https://wiki.nftables.org/) est un sous-système du noyau Linux assurant le filtrage et la classification des paquets / datagrammes / trames réseau. Il est disponible depuis le noyau Linux 3.13 publié le 19 janvier 2014. Il est destiné à remplacer l'ancien système iptables de Netfilter. Parmi les avantages de nftables par rapport à iptables, il y a moins de duplication de code ainsi qu'une meilleure prise en charge des nouveaux protocoles. La configuration est gérée via le programme nft, tandis que les outils hérités sont configurés via les utilitaires iptables, ip6tables, arptables et ebtables frameworks. Il utilise les éléments des modules Netfilter du noyau Linux, tels que les hooks existants dans la pile réseau, le système de suivi des connexions, le composant de mise en file d'attente de l'espace utilisateur et le sous-système de journalisation.
Depuis Debian Buster, nftables est le backend par défaut lors de l'utilisation d'iptables, grâce à la couche iptables-nft (utilisation de la syntaxe iptables assurant la compatabilité avec le sous-système du noyau nf_tables). Cela affecte également ip6tables, arptables et ebtables.
Le programme iptables-translate(8) permet la traduction des règles iptables au format nftables.
## Installation
Pour installer et activer nftables :
~~~
# apt install nftables
# systemctl enable nftables.service
~~~
Par défaut, les règles chargées se trouvent dans /etc/nftables.conf.
NB: Si pour une raison quelconque nftables a des problèmes pour démarrer, par défaut aucune règle n'est appliquée, ce qui signifie tout le trafic sera autorisé. Cela peut se produire si vous utilisez des noms d'hôte dans les règles, ce qui posera problème au démarrage nftables démarrant avant que la résolution de nom ne soit disponible.
## Commandes utiles
Lister les tables existantes :
~~~
# nft list tables
~~~
Lister le contenu de la table « filter » :
~~~
# nft list table inet filter
~~~
Supprimer l'ensemble des règles de la table « filter » :
~~~
# nft flush table inet filter
~~~
Lister l'ensemble des règles :
~~~
# nft list ruleset
~~~
Supprimer l'ensemble des règles :
~~~
# nft flush ruleset
~~~
Créer une table (IPv4/IPv6) « filter » :
~~~
# nft add table inet filter
~~~
*La fiamille de type inet permet l'unification des types ip (IPv4) et ip6 (IPv6).*
Supprimer la table « filter » ainsi que les règles associées :
~~~
# nft delete table inet filter
~~~
Ajouter une chaine « input » à la table « filter » pour le trafic (IPv4/IPv6) en entrée :
Voici un exemple permettant de mettre en place un firewall. Il s'agit ici d'autoriser le trafic SSH à l'IP 203.0.113.1 seulement et le trafic HTTP/HTTPS à tous.
### Configuration en CLI
On doit donc réaliser les opérations suivantes :
Créer une table « filter » par exemple.
~~~
# nft add table inet filter
~~~
Créer une chaine « input » dans la table « filter » (drop du trafic par défaut).