nftables filtre de paquets version 0.9.9

La version du filtre de paquets nftables 0.9.9 a été publiée, unifiant les interfaces de filtrage de paquets pour IPv4, IPv6, ARP et les ponts réseau (destiné à remplacer iptables, ip6table, arptables et ebtables). Dans le même temps, la version de la bibliothèque compagnon libnftnl 1.2.0 a été publiée, fournissant une API de bas niveau pour interagir avec le sous-système nf_tables. Les modifications requises pour que la version nftables 0.9.9 fonctionne sont incluses dans le noyau Linux 5.13-rc1.

Le package nftables comprend des composants de filtre de paquets qui s'exécutent dans l'espace utilisateur, tandis que le travail au niveau du noyau est assuré par le sous-système nf_tables, qui fait partie du noyau Linux depuis la version 3.13. Le niveau noyau fournit uniquement une interface générique indépendante du protocole qui fournit des fonctions de base pour extraire les données des paquets, effectuer des opérations sur les données et contrôler le flux.

Les règles de filtrage elles-mêmes et les gestionnaires spécifiques au protocole sont compilés en bytecode de l'espace utilisateur, après quoi ce bytecode est chargé dans le noyau à l'aide de l'interface Netlink et exécuté dans le noyau dans une machine virtuelle spéciale ressemblant à BPF (Berkeley Packet Filters). Cette approche permet de réduire considérablement la taille du code de filtrage s'exécutant au niveau du noyau et de déplacer toutes les fonctions de règles d'analyse et la logique de travail avec les protocoles dans l'espace utilisateur.

Principales nouveautés :

  • La possibilité de déplacer le traitement de la table de flux vers le côté de la carte réseau a été implémentée, activée à l'aide de l'indicateur « offload ». Flowtable est un mécanisme d'optimisation du chemin de redirection des paquets, dans lequel le passage complet de toutes les chaînes de traitement des règles est appliqué uniquement au premier paquet, et tous les autres paquets du flux sont transmis directement. table ip global { flowtable f { filtre de priorité d'entrée de hook + 1 appareils = { lan3, lan0, wan } déchargement des drapeaux } chain forward { filtre de type hook filtre de priorité avant ; politique acceptée ; protocole ip { tcp, udp } flow add @f } chain post { type nat hook postrouting priorité filtre ; politique acceptée ; oifname "wan" mascarade } }
  • Ajout de la prise en charge de l'attachement d'un indicateur de propriétaire à une table pour garantir l'utilisation exclusive de la table par un processus. Lorsqu'un processus se termine, la table qui lui est associée est automatiquement supprimée. Les informations sur le processus sont affichées dans le dump de règles sous la forme d'un commentaire : table ip x { # progname nft flagsowner chain y { type filter hook input priority filter ; politique acceptée ; compteur de paquets 1 octets 309 } }
  • Ajout de la prise en charge de la spécification IEEE 802.1ad (empilage VLAN ou QinQ), qui définit un moyen de remplacer plusieurs balises VLAN dans une seule trame Ethernet. Par exemple, pour vérifier le type de trame Ethernet externe 8021ad et l'identifiant de vlan = 342, vous pouvez utiliser la construction ... ether type 802.1ad id de vlan 342 pour vérifier le type externe de trame Ethernet 8021ad/id de vlan = 1, imbriqué 802.1 q/vlan id=2 et encapsulation supplémentaire des paquets IP : ... ether type 8021ad id vlan 1 type de vlan 8021q id de vlan 2 compteur ip de type vlan
  • Ajout de la prise en charge de la gestion des ressources à l'aide des groupes de contrôle de hiérarchie unifiée v2. La principale différence entre les groupes de contrôle v2 et v1 réside dans l'utilisation d'une hiérarchie de groupes de contrôle commune pour tous les types de ressources, au lieu de hiérarchies distinctes pour l'allocation des ressources CPU, pour la régulation de la consommation de mémoire et pour les E/S. Par exemple, pour vérifier si l'ancêtre d'un socket de premier niveau cgroupv2 correspond au masque « system.slice », vous pouvez utiliser la construction : ... socket cgroupv2 niveau 1 « system.slice »
  • Ajout de la possibilité de vérifier les composants des paquets SCTP (la fonctionnalité requise pour cela apparaîtra dans le noyau Linux 5.14). Par exemple, pour vérifier si un paquet contient un fragment de type « données » et de champ « type » : ... les données du fragment sctp existent ... le type de données du fragment sctp 0
  • L'exécution de l'opération de chargement de règle a été accélérée environ deux fois à l'aide de l'indicateur « -f ». La sortie de la liste des règles a également été accélérée.
  • Un formulaire compact permettant de vérifier si les bits d'indicateur sont définis est fourni. Par exemple, pour vérifier que les bits d'état snat et dnat ne sont pas définis, vous pouvez spécifier : ... ct status ! snat,dnat pour vérifier que le bit syn est défini dans le masque de bits syn,ack : ... tcp flags syn / syn,ack pour vérifier que les bits fin et rst ne sont pas définis dans le masque de bits syn,ack,fin,rst : ... drapeaux TCP ! = fin,rst / syn,ack,fin,rst
  • Autoriser l'utilisation du mot-clé "verdict" dans les définitions de type set/map : add map xm { typeof iifname . protocole IP ème déport : verdict ;}

Source: opennet.ru

Ajouter un commentaire