La version du filtre de paquets nftables 1.0.1 a été publiée, unifiant les interfaces de filtrage de paquets pour IPv4, IPv6, ARP et les ponts réseau (destiné à remplacer iptables, ip6tables, arptables et ebtables). Les modifications nécessaires pour faire fonctionner la version nftables 1.0.1 sont incluses dans le noyau Linux 5.16-rc1.
Le paquet nftables comprend des composants du filtre de paquets fonctionnant dans l'espace utilisateur, tandis qu'au niveau du noyau, le fonctionnement est assuré par la sous-système nf_tables, intégré dans le noyau Linux depuis la version 3.13. Au niveau du noyau, une interface générale est fournie, indépendante du protocole spécifique, offrant des fonctions de base pour l'extraction de données des paquets, l'exécution d'opérations sur les données et la gestion de flux.
Les règles de filtrage et les gestionnaires spécifiques aux protocoles sont compilés en bytecode dans l'espace utilisateur, après quoi ce bytecode est chargé dans le noyau via l'interface Netlink et exécuté dans le noyau dans une structure spéciale une machine virtuelle, similaire aux BPF (Berkeley Packet Filters). Cette approche permet de réduire considérablement la taille du code de filtrage fonctionnant au niveau du noyau et de transférer toutes les fonctions de parsing des règles et de logique de traitement des protocoles dans l'espace utilisateur.
Les principales nouveautés :
- La consommation de mémoire a été réduite lors du chargement de grandes listes set et map.
- Le rechargement des listes set et map a été accéléré.
- L'affichage des tableaux et des chaînes sélectionnés dans de grands ensembles de règles a été amélioré. Par exemple, le temps d'exécution de la commande «nft list ruleset» pour afficher un ensemble de règles de 100 000 lignes est de 3,049 secondes, tandis que l'affichage uniquement des tableaux nat et filter («nft list table nat», «nft list table filter») est réduit à 1,969 et 0,697 secondes.
- L'exécution des requêtes avec l'option «--terse» lors du traitement des règles avec de grandes listes set et map a été accélérée.
- La possibilité de filtrer le trafic de la chaîne «egress», traitée au même niveau que le gestionnaire egress dans la chaîne netdev (hook egress), c'est-à-dire au stade où le pilote reçoit un paquet de la pile réseau du noyau. table netdev filter { chain egress { type filter hook egress devices = { eth0, eth1 } priority 0; meta priority set ip saddr map { 192.168.10.2 : abcd:2, 192.168.10.3 : abcd:3 } } }
- La correspondance et la modification des octets dans l'en-tête et le contenu du paquet à un décalage donné sont autorisées. # nft add rule x y @ih,32,32 0x14000000 counter # nft add rule x y @ih,32,32 set 0x14000000 counter
Source : opennet.ru
