Publication du filtre de paquets nftables 1.0.3.

La publication de la version 1.0.3 du filtre de paquets nftables a été effectuée, unifiant les interfaces de filtrage des paquets pour IPv4, IPv6, ARP et les ponts réseau (visant à remplacer iptables, ip6table, arptables et ebtables). Les modifications nécessaires au fonctionnement de nftables 1.0.3 sont incluses dans le noyau Linux 5.18.

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 prise en charge de la correspondance par masque pour les noms d'interfaces réseau a été ajoutée aux listes set, par exemple, spécifiée à l'aide du caractère «*»: table inet testifsets { set simple_wild { type ifname flags interval elements = { «abcdef*», «othername», «ppp0» } } chain v4icmp { type filter hook input priority 0; policy accept; iifname @simple_wild counter packets 0 bytes 0 iifname { «abcdef*», «eth0» } counter packets 0 bytes 0 } }
  • La fusion automatique des éléments se chevauchant dans les listes set a été implémentée pendant le fonctionnement. Auparavant, lors de l'activation de l'option «auto-merge», la fusion se produisait lors de la déclaration des règles, tandis qu'à présent, elle se déclenche également lors de l'ajout incrémentiel de nouveaux éléments pendant l'exécution. Par exemple, lors de la déclaration, la liste set 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 } } devient elements = { 1.2.3.0/24, 3.3.3.3-3.3.3.5, 4.4.4.4-4.4.4.8 } et ensuite, si de nouveaux éléments sont ajoutés # nft add element ip x y { 1.2.3.0-1.2.4.255, 3.3.3.6 } cela prendra la forme 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 }

    Lors de la suppression d'éléments individuels de la liste qui se trouvent dans des éléments existants avec des plages, la plage est réduite ou divisée.

  • Le optimiseur de règles, appelé lors de l'activation de l'option «-o/—optimize», a été amélioré pour ajouter le support de la fusion de plusieurs règles de translation d'adresses (NAT) dans une liste map. Par exemple, pour le jeu # cat ruleset.nft table ip x { chain y { type nat hook postrouting priority srcnat; policy drop; ip saddr 1.1.1.1 tcp dport 8000 snat to 4.4.4.4:80 ip saddr 2.2.2.2 tcp dport 8001 snat to 5.5.5.5:90 } }

    l'exécution de «nft -o -c -f ruleset.nft» conduira à la transformation des règles séparées «ip saddr» en une liste map: snat to ip saddr . tcp dport map { 1.1.1.1 . 8000 : 4.4.4.4 . 80, 2.2.2.2 . 8001 : 5.5.5.5 . 90 }

    De manière similaire, les expressions raw peuvent être converties en listes map : # 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 goto nat_dns_this_5301 udp length 62-78 @th,160,128 0x0e31363436323733373931323934300e goto nat_dns_saturn_5301 udp length 62-78 @th,160,128 0x0e32393535373539353636383732310e goto nat_dns_saturn_5302 udp length 62-78 @th,160,128 0x0e38353439353637323038363633390e goto nat_dns_saturn_5303 drop } }

    Après optimisation, nous obtenons une liste map : udp length . @th,160,128 vmap { 47-63 . 0x0e373135363130333131303735353203 : goto nat_dns_dnstc, 62-78 . 0x0e31393032383939353831343037320e : goto nat_dns_this_5301, 62-78 . 0x0e31363436323733373931323934300e : goto nat_dns_saturn_5301, 62-78 . 0x0e32393535373539353636383732310e : goto nat_dns_saturn_5302, 62-78 . 0x0e38353439353637323038363633390e : goto nat_dns_saturn_5303 }

  • L'utilisation d'expressions raw est autorisée dans les opérations de concaténation. Par exemple : # nft add rule x y 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 elements = { 1.1.1.1 . 0x14 } } }
  • Ajout du support de la spécification des champs entiers dans les opérations de concaténation : table inet t { map m1 { typeof udp length . @ih,32,32 : verdict flags interval elements = { 20-80 . 0x14 : accept, 1-10 . 0xa : drop } } chain c { type filter hook input priority 0; policy drop; udp length . @ih,32,32 vmap @m1 } }
  • Ajout du support de la réinitialisation des options TCP (fonctionne uniquement avec le noyau Linux 5.18+) : tcp flags syn reset tcp option sack-perm
  • Accélération de l'exécution des commandes d'affichage des chaînes («nft list chain x y»).

Source : opennet.ru

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster