nftables pakketfilter release 0.9.9

De release van pakketfilter nftables 0.9.9 is gepubliceerd, waarmee pakketfilterinterfaces voor IPv4, IPv6, ARP en netwerkbridges zijn verenigd (gericht op het vervangen van iptables, ip6table, arptables en ebtables). Tegelijkertijd werd de release van de begeleidende bibliotheek libnftnl 1.2.0 gepubliceerd, die een low-level API biedt voor interactie met het nf_tables-subsysteem. De wijzigingen die nodig zijn om de nftables 0.9.9-release te laten werken, zijn opgenomen in de Linux-kernel 5.13-rc1.

Het nftables-pakket bevat pakketfiltercomponenten die in de gebruikersruimte draaien, terwijl het werk op kernelniveau wordt geleverd door het nf_tables-subsysteem, dat sinds release 3.13 deel uitmaakt van de Linux-kernel. Het kernelniveau biedt alleen een generieke protocol-onafhankelijke interface die basisfuncties biedt voor het extraheren van gegevens uit pakketten, het uitvoeren van gegevensbewerkingen en stroomcontrole.

De filterregels zelf en protocolspecifieke handlers worden gecompileerd in bytecode van de gebruikersruimte, waarna deze bytecode in de kernel wordt geladen met behulp van de Netlink-interface en in de kernel wordt uitgevoerd in een speciale virtuele machine die lijkt op BPF (Berkeley Packet Filters). Deze aanpak maakt het mogelijk om de grootte van de filtercode die op kernelniveau draait aanzienlijk te verkleinen en alle functies van parseerregels en de logica van het werken met protocollen naar de gebruikersruimte te verplaatsen.

Belangrijkste innovaties:

  • De mogelijkheid om flowtable-verwerking naar de netwerkadapterkant te verplaatsen is geïmplementeerd, mogelijk gemaakt met behulp van de 'offload'-vlag. Flowtable is een mechanisme voor het optimaliseren van het pad van pakketomleiding, waarbij de volledige doorgang van alle regelverwerkingsketens alleen op het eerste pakket wordt toegepast en alle andere pakketten in de stroom rechtstreeks worden doorgestuurd. table ip global { flowtable f { hook ingress prioriteitsfilter + 1 apparaten = { lan3, lan0, wan } vlaggen offload } chain forward { type filter hook forward prioriteitsfilter; beleid accepteren; ip-protocol {tcp, udp} flow add @f} chain post {type nat hook postrouting prioriteitsfilter; beleid accepteren; oifname "wan" maskerade } }
  • Ondersteuning toegevoegd voor het koppelen van een eigenaarsvlag aan een tabel om exclusief gebruik van de tabel door een proces te garanderen. Wanneer een proces wordt beëindigd, wordt de bijbehorende tabel automatisch verwijderd. Informatie over het proces wordt weergegeven in de regelsdump in de vorm van commentaar: tabel ip x { # progname nft flags eigenaar keten y { type filter hook input prioriteit filter; beleid accepteren; tellerpakketten 1 bytes 309 } }
  • Ondersteuning toegevoegd voor de IEEE 802.1ad-specificatie (VLAN-stacking of QinQ), die een manier definieert voor het vervangen van meerdere VLAN-tags in een enkel Ethernet-frame. Om bijvoorbeeld het type extern Ethernet-frame 8021ad en vlan id=342 te controleren, kunt u de constructie ... ethertype 802.1ad vlan id 342 gebruiken om het externe type Ethernet-frame 8021ad/vlan id=1, genest 802.1 te controleren q/vlan id=2 en verdere IP-pakketinkapseling: ... ethertype 8021ad vlan id 1 vlan type 8021q vlan id 2 vlan type ip-teller
  • Ondersteuning toegevoegd voor het beheren van bronnen met behulp van de uniforme hiërarchie cgroups v2. Het belangrijkste verschil tussen cgroups v2 en v1 is het gebruik van een gemeenschappelijke cgroups-hiërarchie voor alle soorten bronnen, in plaats van afzonderlijke hiërarchieën voor het toewijzen van CPU-bronnen, voor het reguleren van geheugengebruik en voor I/O. Om bijvoorbeeld te controleren of de voorouder van een socket op het eerste niveau cgroupv2 overeenkomt met het masker “system.slice”, kunt u de constructie gebruiken: ... socket cgroupv2 niveau 1 “system.slice”
  • De mogelijkheid toegevoegd om componenten van SCTP-pakketten te controleren (de hiervoor vereiste functionaliteit zal verschijnen in de Linux 5.14-kernel). Om bijvoorbeeld te controleren of een pakket een chunk bevat met het type 'data' en het veld 'type': ... sctp chunk data bestaat ... sctp chunk data type 0
  • De uitvoering van het laden van regels is ongeveer twee keer versneld met behulp van de vlag “-f”. Ook de uitvoer van de lijst met regels is versneld.
  • Er is een compact formulier beschikbaar om te controleren of vlagbits zijn ingesteld. Om bijvoorbeeld te controleren of de snat- en dnat-statusbits niet zijn ingesteld, kunt u het volgende opgeven: ... ct status ! snat,dnat om te controleren of de syn-bit is ingesteld in het bitmasker syn,ack: ... tcp flags syn / syn,ack om te controleren of de fin- en rst-bits niet zijn ingesteld in het bitmasker syn,ack,fin,rst: ... TCP-vlaggen! = fin,rst / syn,ack,fin,rst
  • Sta het trefwoord "oordeel" toe in definities van set/map typeof: add map xm { typeof iifname . ip-protocol e dport: oordeel ;}

Bron: opennet.ru

Voeg een reactie