Publication du filtre de paquets nftables 1.0.7

Publication du filtre de paquets nftables 1.0.7, unifiant les interfaces de filtrage des paquets pour IPv4, IPv6, ARP et les ponts réseau (visant à remplacer iptables, ip6tables, arptables et ebtables). Le paquet nftables contient des composants de filtre de paquets fonctionnant dans l'espace utilisateur, tandis qu'au niveau du noyau, la sous-système nf_tables assure cette fonction, intégrée 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, permettant des fonctionnalités de base pour extraire des données des paquets, effectuer des opérations sur ces données et gérer le 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.

Principales modifications :

  • Pour les systèmes avec un noyau Linux 6.2 et plus, la prise en charge du mappage des protocoles vxlan, geneve, gre et gretap a été ajoutée, permettant d'utiliser des expressions simples pour vérifier les en-têtes des paquets encapsulés. Par exemple, pour vérifier adresses IP dans l'en-tête d'un paquet imbriqué VxLAN, il est désormais possible d'utiliser des règles (sans avoir besoin de pré-décapsuler l'en-tête VxLAN et de lier le filtre à l'interface vxlan0) : … udp dport 4789 vxlan ip protocol udp … udp dport 4789 vxlan ip saddr 1.2.3.0/24 … udp dport 4789 vxlan ip saddr . vxlan ip daddr { 1.2.3.4 . 4.3.2.1 }
  • La prise en charge de la fusion automatique des restes après la suppression partielle d'un élément de la liste set a été mise en œuvre, permettant de supprimer un élément ou une partie d'une plage d'existence (auparavant, une plage ne pouvait être supprimée que dans son intégralité). Par exemple, après la suppression de l'élément 25 d'une liste set avec des plages 24-30 et 40-50, la liste contiendra 24, 26-30 et 40-50. Les corrections nécessaires au fonctionnement de la fusion automatique seront proposées dans les versions correctives des branches stables du noyau 5.10+. # nft list ruleset table ip x { set y { typeof tcp dport flags interval auto-merge elements = { 24-30, 40-50 } } } # nft delete element ip x y { 25 } # nft list ruleset table ip x { set y { typeof tcp dport flags interval auto-merge elements = { 24, 26-30, 40-50 } } }
  • L'utilisation de contact et de plages est autorisée lors du mappage de la traduction d'adresses (NAT). table ip nat { chain prerouting { type nat hook prerouting priority dstnat; policy accept; dnat to ip daddr . tcp dport map { 10.1.1.136 . 80 : 1.1.2.69 . 1024, 10.1.1.10-10.1.1.20 . 8888-8889 : 1.1.2.69 . 2048-2049 } persistent } }
  • Ajout de la prise en charge de l'expression «last», permettant de connaître le dernier temps d'utilisation d'un élément de règle ou d'une liste set. Cette possibilité est prise en charge à partir du noyau Linux 5.14. table ip x { set y { typeof ip daddr . tcp dport size 65535 flags dynamic,timeout last timeout 1h } chain z { type filter hook output priority filter; policy accept; update @y { ip daddr . tcp dport } } } # nft list set ip x y table ip x { set y { typeof ip daddr . tcp dport size 65535 flags dynamic,timeout last timeout 1h elements = { 172.217.17.14 . 443 last used 1s591ms timeout 1h expires 59m58s409ms, 172.67.69.19 . 443 last used 4s636ms timeout 1h expires 59m55s364ms, 142.250.201.72 . 443 last used 4s748ms timeout 1h expires 59m55s252ms, 172.67.70.134 . 443 last used 4s688ms timeout 1h expires 59m55s312ms, 35.241.9.150 . 443 last used 5s204ms timeout 1h expires 59m54s796ms, 138.201.122.174 . 443 last used 4s537ms timeout 1h expires 59m55s463ms, 34.160.144.191 . 443 last used 5s205ms timeout 1h expires 59m54s795ms, 130.211.23.194 . 443 last used 4s436ms timeout 1h expires 59m55s564ms } } }
  • Ajout de la possibilité de définir des quotas dans les listes set. Par exemple, pour définir un quota de trafic pour chaque adresse IP cible, on peut indiquer : table netdev x { set y { typeof ip daddr size 65535 quota over 10000 mbytes } chain y { type filter hook egress device «eth0» priority filter; policy accept; ip daddr @y drop } } # nft add element inet x y { 8.8.8.8 } # ping -c 2 8.8.8.8 # nft list ruleset table netdev x { set y { type ipv4_addr size 65535 quota over 10000 mbytes elements = { 8.8.8.8 quota over 10000 mbytes used 196 bytes } } chain y { type filter hook egress device «eth0» priority filter; policy accept; ip daddr @y drop } }
  • L'utilisation de constantes dans les listes set est autorisée. Par exemple, en utilisant l'adresse de destination et l'identifiant VLAN comme clé de liste, on peut directement indiquer le numéro VLAN (daddr . 123): table netdev t { set s { typeof ether saddr . vlan id size 2048 flags dynamic,timeout timeout 1m } chain c { type filter hook ingress device eth0 priority 0; policy accept; ether type != 8021q update @s { ether daddr . 123 } counter } }
  • Ajout d'une nouvelle commande «destroy» pour la suppression sans condition d'objets (contrairement à la commande delete qui ne génère pas d'ENOENT lors de la tentative de suppression d'un objet manquant). Un noyau Linux 6.3-rc est nécessaire. destroy table ip filter

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