Présentation de NFtables
Ça y est ! Nous sommes au premier chapitre de ce cours sur nftables. Tout d'abord, laissez-moi vous y souhaiter la bienvenue 🙂
Dans ce premier chapitre, nous allons parler un peu de ce qu'est nftables. Nftables est une réécriture du projet IPtables dont la première version est parue le 18 mars 2009. C'est le chef du projet NetFilter, Patrick Mac Hardy, qui travaille sur ce nouvel outil.
Sommaire
I. Un petit mot sur le pare-feu Linux NetFilter
NetFilter est le pare-feu Linux. IPtables et nftables ne sont que des intermédiaires permettant de configurer NetFilter. NetFilter est donc un framework permettant d'incorporer un pare-feu au sein du noyau Linux et il est présent depuis la version 2.4 du noyau Linux. Il fonctionne en mettant en place des accroches ou crochet (hooks) dans le noyau Linux permettant d'intercepter les paquets réseau qui y transitent (en émission ou en réception) pour ensuite indiquer s'ils peuvent passer ou non, ou si d'autres actions doivent y être appliquées. Nous détaillerons cette partie un peu plus tard pour que tout cela soit bien clair ! 🙂
Il faut tout de même savoir comment fonctionne cet ensemble pour comprendre ce qu'implique le changement d'IPtables à nftables.
Historiquement, c'est via les commandes iptables et ip6tables que l'on configurait le pare-feu NetFilter. Elles permettent donc de définir des règles de pare-feu qui peuvent transformer, bloquer des paquets ou inscrire des évènements dans les journaux lors de leur passage par exemple.
Nftables est donc la relève d'IPtables, qui sont tous deux des interfaces en ligne de commande permettant de configurer NetFilter qui lui, ne bouge pas.
Mais au faite, pourquoi nftables?
Nftables semble avoir été nommé ainsi en rapport à NetFilter qui est le pare-feu Linux.
II. IPtables, quelques défauts
Pour une utilisation basique, IPtables est simple d'utilisation. Cependant, ses limites se font plus rapidement sentir sur de grosses infrastructures avec des centaines ou des milliers de règles.
- Le code est, selon son propre créateur, mal écrit et pas toujours compatible 64 bits avec parfois des fonctions en doublons.
- La gestion des modifications d'un grand nombre de règles n'est pas optimisée. Il fait en sorte de recharger toutes les règles à chaque insertion/suppression d'une règle, perdant ainsi toutes les connexions en cours.
- On ne peut spécifier qu'une action par règle. On ne peut pas bloquer une requête et l'inscrire dans les journaux avec une seule règle par exemple, cela nécessite alors des règles en double.
- Trop de modules (plus d'une centaine) avec des options et configurations aussi nombreuses.
Ce n'est ici pas une liste exhaustive, mais elles sont tirées des conclusions du chef du projet lors d'une présentation en 2008 intitulée "nftables a successor to iptables, ip6tables, ebtables and arptables". Globalement, il faut savoir qu'IPtables commence à dater au niveau de la façon dont il a été écrit (design de code) mais également au niveau fonctionnel.
III. Les nouveautés de nftables
Globalement, nftables a été conçu dans l'optique de résoudre les problèmes et les faiblesses d'IPtables. On peut souligner notamment les problèmes de performance lors de la mise à jour des règles en grand nombre.
On retrouvera également la possibilité de mettre des expressions spécifiques dans les règles nftables afin d'avoir besoin d'écrire moins de règles qu'IPtables pour une même efficacité : une réduction du nombre de règles.
Au final, ce sont plusieurs commandes qui sont remplacées par nftables :
- iptables: administration des règles du pare-feu pour IPv4
- ip6tables: administration des règles du pare-feu pour IPv6
- arptables: administration des règles du pare-feu pour ARP
- ebtables: administration des règles du pare-feu pour la configuration de bridge (pont)
Tout cela promet nombre de fonctionnalité très intéressantes, mais nécessite également de revoir la façon dont nous allons devoir les configurer. C'est ce que nous allons voir dans la suite du cours.
Il faut savoir que nftables est fait pour fonctionner sur les noyaux Linux à partir de la version 3.13. Il est désormais installé par défaut sur les systèmes Debian depuis la version Debian Buster (10) et sur les systèmes Redhat depuis la version Redhat/CentOS 8.