Contribuez à SecuObs en envoyant des bitcoins ou des dogecoins.
Nouveaux articles (fr): 1pwnthhW21zdnQ5WucjmnF3pk9puT5fDF
Amélioration du site: 1hckU85orcGCm8A9hk67391LCy4ECGJca

Contribute to SecuObs by sending bitcoins or dogecoins.



Première version disponible pour Nftables, le futur remplaçant d'Iptables

Par Rédaction, secuobs.com
Le 23/03/2009


Résumé : Le projet Netfilter vient de publier la première version de sa nouvelle solution de filtrage Nftables pour les noyaux des systèmes d'exploitation de type GNU/Linux. Amené à remplacer Iptables dans un avenir proche, sa version Alpha offre déjà des performances de traitement similaires.



L’équipe Netfilter ( lien ) réfléchissait depuis longtemps à une réécriture complète d'Iptables ( lien ), sa solution libre de filtrage pour le noyau ( lien ) des systèmes d'exploitation de type GNU/Linux. Emmenée par Patrick McHardy, cette reflexion permet aujourd’hui de mettre à disposition de tous la première version de Nftables ( lien ).

Cette version Alpha concrétise la volonté de fournir aux utilisateurs une solution caractérisée autant par sa flexibilité que par ses performances. La réécriture du code étant du point de vue développeur une nécessité absolue du fait que la fiabilité fonctionnelle d'Iptables dépend actuellement de la gestion de trop nombreuses extensions pouvant parfois s’avérer assez lourde pour l'utilisation de cette solution de filtrage.

Nftables se base concrètement sur trois composants, l'implémentation noyau, l'outil utilisateur pour manipuler les éléments et la librairie Libnl Netlink ( lien ) qui est responsable du chargement des règles dans l'espace noyau afin qu'elles y soient activées. La majeure partie de la discussion préalable au développement de Nftables a par ailleurs porté sur le choix de ce dernier élément pour interfacer les espaces utilisateur et noyau.

Le choix de la Libnl pour gérer les communications bas niveau IPC Netlink ( lien ) entre ces espaces se justifie par les optimisations que cela permet d'offrir à la solution via les capacités de supervision du traitement et la possibilité de modifier des ensembles de règles de façon incrémentale. Un travail considérable a de plus été effectué au niveau de la définitions des éléments afin d'éviter de placer des informations trop particulières dans la structure principale.

Les développeurs ont aussi déplacé la gestion de la majorité des éléments depuis l'espace noyau vers l'espace utilisateur. Couplée à une toute nouvelle syntaxe, cette organisation autorise une plus grande simplicité de gestion tout en accentuant la liberté de configuration des règles pour les utilisateurs. La syntaxe en question s'apparente à une combinaison entre les règles de filtrage de Wireshark ( lien ) et celles de gestion des tableaux associatifs dans Perl ( lien ).

La définition d'un paquet se décompose ainsi ici en différents pointeurs d'entêtes (réseau, transport, ...) spécifiques qui vont faciliter la gestion individuelle de chaque protocole tout en permettant de garder une base vraiment générique. Nftables distingue également fondamentalement les opérations, qui définissent les règles dans l'espace utilisateur, des objets réseaux qui sont gérés par celui du noyau. Parmi ces objets, on retrouve notamment les adresses IP, les ports et les protocoles.

La gestion de certaines opérations, qui restent paramétrables en temps réel, demeurent néanmoins dévolues à l'espace noyau, le chargement des données depuis les paquets, les comparaisons constantes/données ou le rejet des paquets en sont des exemples. Cette représentation générique des données implique une plus grande flexibilité de par l'applicabilité de l'ensemble des fonctions de correspondance à des opérations pouvant viser n’importe quel type de données (étendues d'adresses IP, marquages des paquets, ...).

Nftables introduit par ailleurs la standardisation et la vérification de la conformité des règles, le sous-système de gestion est maintenant dépendant du contexte de son utilisation. Il introduit à cet égard un système natif de détection des conflicts en s'appuyant sur la notion globale de familles de protocoles et un système de remontée d'alertes. La validation sémantique des règles individuelles est effectuée ici dans l'espace utilisateur avant le chargement vers l'espace noyau et l'activation.

Ces règles de filtrage sont définies en mode utilisateur via l’outil Nft fourni qui est aussi responsable d'effectuer la vérification syntaxique des règles afin de les conformer avant leur chargement et leur mise en activité. Les règles peuvent ainsi être ajoutées de façon incrémentale, soit directement via la ligne de commande avec Nft, soit par l'importation de fichiers modulaires pouvant eux-mêmes inclure des sous-fichiers de définition de règles de filtrage.

La syntaxe Nft s'appuie sur deux modèles distincts, « nft add rule output tcp dport 22 log accept » et « nft add rule output tcp dport == 22 log accept” où « == » permet une plus grande diversité des options (égalité, différence, ...) de concordance impliquées dans le verdict (accept, drop, queue, continue, jump, goto, return) appliqué. La règle contenant « ip daddr { 192.168.0.0/24 => drop, 192.168.0.100 => accept} » permet elle de définir une exclusion avec un traitement différent de celui appliqué à l'ensemble initial d'appartenance de l'élément ici exclu.

Il est également envisageable de créer des objets plus complexes avec l'utilisation de règles de filtrage comme « nft add filter output ip addr {192.168.1.0/24, 10.8.10.0/24, 192.168.1.2, 10.8.10.1} » qui définissent des ensembles d'éléments (adresses IP, étendue, ...) multiples, la gestion des drapeaux se faisant quant à elle de la façon suivante ; « nft rule add filter output tcp flags syn » ou « nft rule add filter output tcp flags syn | ack ».

Nftables s'appuie en fait sur différents modules opérationnels, « Payload » filtre les données génériques et gère l'encapsulation ( lien ), « Meta » et « ct » pour gérer respectivement les meta-données (marquages) et la correspondance du suivi des connexions.« Concat » prend lui en charge la concaténation dynamique des éléments pour les correspondances multidimensionnelles, ici « mac src . ip saddr { 00:1b:21:02:6f:ad . 192.168.0.100, 00:01:36:0d:d0:71 . 192.168.0.1 } » pour le traitement des adresses MAC/IP associées et la lutte contre les usurpations ( lien & notre dossier lien ).

Le code étant actuellement en version Alpha, son utilisation peut impliquer certains dysfonctionnements, notamment sur les fonctionnalités avancées qui ne sont d'ailleurs pas encore toutes forcément implémentées. La mise en production n’est donc pas conseillée à l'heure actuelle, bien que les développeurs affirment que Nftables soit déjà suffisamment robuste pour effectuer de premières expérimentations. En atteste que le dernier dysfonctionnement critique, constaté dans l'espace noyau, date déjà de plusieurs mois.

Développé dans une optique de gestion générique sans aucune optimisation avancée y ayant été apportée pour le moment, Nftables offre néanmoins des performances déjà similaires à celles d'Iptables d'après les tests développeur, il devrait donc être amené à le remplacer dans un avenir assez proche au sein du noyau Linux. Le code source de Nftables est disponible en trois arborescences Git ( lien ) : nft sur git://git.kernel.org/pub/scm/linux/kernel/git/kaber/nft-2.6.git, libnl sur git://git.netfilter.org/libnl-nft.git et enfin Nftables sur git://git.netfilter.org/nftables.git

Source : SecGuru ( lien )