nftables filtre de paquets version 1.0.6

La version 1.0.6 du filtre de paquets nftables a été publiée, unifiant les interfaces de filtrage de paquets pour IPv4, IPv6, ARP et les ponts réseau (visant à remplacer iptables, ip6table, arptables et ebtables). Le package nftables inclut des composants de filtrage de paquets qui s'exécutent dans l'espace utilisateur, tandis que le niveau du noyau est fourni par le sous-système nf_tables, qui fait partie du noyau Linux depuis la version 3.13. Au niveau du noyau, seule une interface générique indépendante du protocole est fournie 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.

Les principaux changements:

  • Dans l'optimiseur de règles appelé lors de la spécification de l'option "-o/--optimize", un packaging automatique des règles a été mis en place en les combinant et en les convertissant en cartes et set-lists. Par exemple, les règles sont # cat Ruleset.nft table ip x { chain y { type filter hook input priorité filtre ; abandon de la politique ; méta iifname eth1 ip saddr 1.1.1.1 ip daddr 2.2.2.3 accepter méta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.2.4 accepter méta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.3.0/24 accepter méta iifname eth1 ip saddr 1.1.1.2 .2.2.4.0 .2.2.4.10 ip daddr 2-1.1.1.3 accept meta iifname eth2.2.2.5 ip saddr 4 ip daddr 17 accept } } après "nft -o -c -f Ruleset.nft" sera converti en ce qui suit : ensemble de règles. nft:74:1-1.1.1.1 : méta iifname eth2.2.2.3 ip saddr 5 ip daddr 17 accepter le jeu de règles.nft:74:1-1.1.1.2 : méta iifname eth2.2.2.4 ip saddr 6 ip daddr 17 accepter le jeu de règles.nft : 77:1-1.1.1.2 : méta iifname eth2.2.3.0 ip saddr 24 ip daddr 7/17 accepter le jeu de règles.nft:83:1-1.1.1.2 : méta iifname eth2.2.4.0 ip saddr 2.2.4.10 ip daddr 8-17 accepter Ruleset.nft:74:2-1.1.1.3 : méta iifname eth2.2.2.5 ip saddr 1 ip daddr 1.1.1.1 accepter dans : iifname . IP Saddr. ip papar { eth2.2.2.3 . 1. 1.1.1.2, eth2.2.2.4 . 1. 1.1.1.2, eth2.2.3.0 . 24. 1/1.1.1.2, eth2.2.4.0 . 2.2.4.10. 2-1.1.1.3, eth2.2.2.5 . XNUMX. XNUMX } accepter
  • L'optimiseur peut également condenser les règles qui utilisent déjà des setlists simples sous une forme plus compacte, telle que : # cat Ruleset.nft table ip filter { chain input { type filter hook input priorité filtre ; abandon de la politique ; iifname "lo" accepte l'état ct établi, acceptation du commentaire associé "Dans le trafic dont nous sommes originaires, nous avons confiance" iifname "enp0s31f6" ip saddr { 209.115.181.102, 216.197.228.230 } ip daddr 10.0.0.149 udp sport 123 udp dport 32768-65535 accepter iifname "enp0s31f6" ip saddr { 64.59.144.17, 64.59.150.133 } ip daddr 10.0.0.149 udp sport 53 udp dport 32768-65535 accept } } après avoir exécuté "nft -o -c -f Ruleset.nft" sera emballé comme ceci : Ruleset.nft:6:22-149 : iifname "enp0s31f6" ip saddr { 209.115.181.102, 216.197.228.230 } ip daddr 10.0.0.149 udp sport 123 udp dport 32768-65535 accepter Ruleset.nft:7:22 143-0 31 : iifname "enp6s64.59.144.17f64.59.150.133" ip saddr { 10.0.0.149, 53 } ip daddr 32768 udp sport 65535 udp dport 0-31 accepter dans : iifname . IP Saddr. ip papa. sport udp. udp déport { enp6s209.115.181.102f10.0.0.149 . 123 . 32768 . 65535 . 0-31, enp6s216.197.228.230f10.0.0.149 . 123 . 32768 . 65535 . 0-31, enp6s64.59.144.17f10.0.0.149 . 53. 32768 . 65535 . 0-31, enp6s64.59.150.133f10.0.0.149 . 53. 32768 . 65535 . XNUMX-XNUMX } accepter
  • Résolution d'un problème avec la génération de bytecode pour la fusion d'intervalles qui utilisent des types avec un endian différent, tels que IPv4 (endian du réseau) et une marque méta (endian du système). table ip x { map w { typeof ip saddr . méta-marque : éléments de compteur d'intervalle d'indicateurs de verdict = { 127.0.0.1-127.0.0.4 . 0x123434-0xb00122 : accepter, 192.168.0.10-192.168.1.20 . 0x0000aa00-0x0000aaff : accepter, } } chaîne k { type filtre filtre de priorité d'entrée du crochet ; abandon de la politique ; IP Saddr. méta-marque vmap @w } }
  • Amélioration des mappages de protocoles rares lors de l'utilisation d'expressions brutes, par exemple : meta l4proto 91 @th,400,16 0x0 accept
  • Correction de problèmes d'activation des règles à intervalles : insérer la règle xy tcp sport { 3478-3497, 16384-16387 } compteur accepter
  • L'API JSON a été améliorée pour prendre en charge les expressions dans les listes d'ensembles et de cartes.
  • Dans les extensions de la bibliothèque Python nftables, les ensembles de règles peuvent être chargés pour être traités en mode vérification ("-c") et la prise en charge de la définition de variables externes a été ajoutée.
  • L'ajout de commentaires est autorisé dans les éléments des set-lists.
  • Il est permis de spécifier une valeur nulle dans la limite de débit d'octets.

Source: opennet.ru

Ajouter un commentaire