nftables filtre de paquets version 1.0.3

La version du filtre de paquets nftables 1.0.3 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). Les modifications requises pour que la version nftables 1.0.3 fonctionne sont incluses dans le noyau Linux 5.18.

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 :

  • Les listes d'ensembles prennent désormais en charge la correspondance des noms d'interface réseau par un masque, par exemple spécifié à l'aide du symbole « * » : table inet testifsets { set simple_wild { type ifname flags interval elements = { "abcdef*", "othername", "ppp0" } } chain v4icmp { type filtre hook entrée priorité 0 ; politique acceptée ; iifname @simple_wild compteur de paquets 0 octets 0 iifname { "abcdef*", "eth0" } compteur de paquets 0 octets 0 } }
  • Implémentation de la fusion automatique des éléments de set-list qui se croisent pendant le fonctionnement. Auparavant, lorsque l'option « fusion automatique » était définie, la fusion était effectuée au stade de la déclaration des règles, mais elle fonctionne désormais également lorsque de nouveaux éléments sont ajoutés progressivement au cours du fonctionnement. Par exemple, au stade de la déclaration, la liste définie y { flags interval auto-merge elements = { 1.2.3.0, 1.2.3.255, 1.2.3.0/24, 3.3.3.3, 4.4.4.4, 4.4.4.4-4.4.4.8 , 3.3.3.4 , 3.3.3.5 } } seront transformés en éléments = { 1.2.3.0/24, 3.3.3.3-3.3.3.5, 4.4.4.4-4.4.4.8 } et puis si vous ajoutez de nouveaux éléments # nft add element ip xy { 1.2.3.0 -1.2.4.255, 3.3.3.6 } ressemblera à elements = { 1.2.3.0-1.2.4.255, 3.3.3.3-3.3.3.6, 4.4.4.4-4.4.4.8 }

    Lorsque vous supprimez de la liste des éléments individuels appartenant à des éléments de plage existants, la plage est raccourcie ou divisée.

  • La prise en charge de la combinaison de règles de traduction d'adresses multiples (NAT) dans une liste de cartes a été ajoutée à l'optimiseur de règles, appelé lorsque l'option « -o/—optimize » est spécifiée. Par exemple, pour l'ensemble # cat Ruleset.nft table ip x { chain y { tapez nat hook postrouting priorité srcnat; abandon de la politique ; ip saddr 1.1.1.1 tcp dport 8000 snat vers 4.4.4.4:80 ip saddr 2.2.2.2 tcp dport 8001 snat vers 5.5.5.5:90 } }

    l'exécution de « nft -o -c -f Ruleset.nft » convertira les règles distinctes « ip saddr » en une liste de cartes : snat en ip saddr . Carte de transfert TCP { 1.1.1.1 . 8000 : 4.4.4.4. 80, 2.2.2.2. 8001 : 5.5.5.5. 90}

    De même, les expressions brutes peuvent être converties en listes de cartes : # cat Ruleset.nft table ip x { […] chain nat_dns_acme { udp length 47-63 @th,160,128 0x0e373135363130333131303735353203 goto nat_dns_dnstc udp length 62-78 @th ,160,128 0x0e31393032383939353831343037320e aller à nat_dns_this_5301 longueur udp 62-78 @th,160,128 0x0e31363436323733373931323934300e aller à nat_dns_saturn_5301 longueur udp 62-78 @th,160,128 0x0e32393535373539353636383732310 5302 62e aller à nat_dns_saturn_78 udp longueur 160,128-0 @th,0 38353439353637323038363633390x5303eXNUMXe aller à nat_dns_saturn_XNUMX drop } }

    après optimisation, nous obtenons une liste de cartes : udp length . @th,160,128 47 vmap { 63-0 . 0x373135363130333131303735353203e62 : accédez à nat_dns_dnstc, 78-0 . 0x31393032383939353831343037320e5301e : accédez à nat_dns_this_62, 78-0 . 0x31363436323733373931323934300e5301e : accédez à nat_dns_saturn_62, 78-0 . 0x32393535373539353636383732310e5302e : accédez à nat_dns_saturn_62, 78-0 . 0x38353439353637323038363633390e5303e : aller à nat_dns_saturn_XNUMX }

  • L'utilisation d'expressions brutes dans les opérations de concaténation est autorisée. Par exemple : #nft ajoute la règle xy ip saddr. @ih,32,32 { 1.1.1.1 . 0x14, 2.2.2.2 . 0x1e } ou table x { set y { typeof ip saddr . @ih,32,32 éléments = { 1.1.1.1 . 0x14 } } }
  • Ajout de la prise en charge de la spécification de champs d'en-tête entiers dans les opérations de concaténation : table inet t { map m1 { typeof udp length . @ih,32,32 : éléments d'intervalle d'indicateurs de verdict = { 20-80 . 0x14 : accepter, 1-10 . 0xa : drop } } chain c { type filtre hook input priorité 0 ; abandon de la politique ; longueur UDP. @ih,32,32 vmap @m1 } }
  • Ajout de la prise en charge de la réinitialisation des options TCP (fonctionne uniquement avec le noyau Linux 5.18+) : tcp flags syn reset tcp option sack-perm
  • L'exécution des commandes de sortie de chaîne (« nft list chain xy ») a été accélérée.

Source: opennet.ru

Ajouter un commentaire