Het pakketfilter nftables 0.9.9 is uitgebracht. Het verenigt de pakketfilterinterfaces voor IPv4, IPv6, ARP en netwerkbruggen (bedoeld als vervanging voor iptables, ip6table, arptables en ebtables). De bijbehorende bibliotheek libnftnl 1.2.0, die een API op laag niveau biedt voor interactie met het nf_tables-subsysteem, is gelijktijdig uitgebracht. De wijzigingen die nodig waren voor nftables 0.9.9 zijn in de kernel opgenomen. Linux 5.13-rc1.
Het nftables-pakket bevat de pakketfiltercomponenten die in de gebruikersruimte werken, terwijl het werk op kernelniveau wordt verzorgd door het nf_tables-subsysteem, dat deel uitmaakt van de kernel. Linux Sinds versie 3.13 wordt er op kernelniveau alleen nog een generieke, protocolonafhankelijke interface aangeboden, die basisfunctionaliteit biedt voor het extraheren van gegevens uit pakketten, het uitvoeren van gegevensbewerkingen en stroombeheer.
De filterregels zelf en protocolspecifieke handlers worden in de gebruikersruimte gecompileerd tot bytecode, waarna deze bytecode via de Netlink-interface in de kernel wordt geladen en in de kernel in een speciaal daarvoor bestemde omgeving wordt uitgevoerd. virtuele machineDit doet denken aan BPF (Berkeley Packet Filters). Deze aanpak maakt een aanzienlijke reductie mogelijk van de omvang van de filtercode die op kernelniveau draait en verplaatst alle regelparsing en protocollogica naar de gebruikersruimte.
Belangrijkste innovaties:
- De mogelijkheid geïmplementeerd om flowtable-verwerking naar de netwerkadapterzijde te verplaatsen, ingeschakeld met de 'offload'-vlag. Flowtable is een mechanisme voor het optimaliseren van het pakketdoorstuurpad, waarbij een volledige doorgang door alle regelverwerkingsketens alleen op het eerste pakket wordt toegepast, en alle andere pakketten in de flow direct worden doorgestuurd. tabel ip globaal { flowtable f { hook ingress priority filter + 1 devices = { lan3, lan0, wan } flags offload } chain forward { type filter hook forward priority filter; policy accept; ip protocol { tcp, udp } flow add @f } chain post { type nat hook postrouting priority filter; policy accept; oifname "wan" masquerade } }
- Ondersteuning toegevoegd voor het koppelen van een vlag aan een tabel om deze aan de eigenaar te binden, waardoor exclusief gebruik van de tabel door een proces wordt gegarandeerd. Wanneer het proces wordt beëindigd, wordt de daaraan gekoppelde tabel automatisch verwijderd. Informatie over het proces wordt in de regelsdump weergegeven als opmerking: table ip x { # progname nft flags owner chain y { type filter hook input priority filter; policy accept; counter packets 1 bytes 309 } }
- Ondersteuning toegevoegd voor de IEEE 802.1ad (VLAN stacking of QinQ)-specificatie, die de manier definieert om meerdere VLAN-tags in één Ethernet-frame te vervangen. Om bijvoorbeeld het type 8021ad van het buitenste Ethernet-frame en vlan id=342 te controleren, kunt u de constructie ... ether type 802.1ad vlan id 342 gebruiken om het type 8021ad/vlan id=1 van het buitenste Ethernet-frame, geneste 802.1q/vlan id=2 en verdere encapsulatie van het IP-pakket te controleren: ... ether type 8021ad vlan id 1 vlan type 8021q vlan id 2 vlan type ip counter
- Ondersteuning toegevoegd voor resourcebeheer met behulp van de uniforme hiërarchie van cgroups v2. Het belangrijkste verschil tussen cgroups v2 en v1 is het gebruik van een gemeenschappelijke hiërarchie van cgroups voor alle typen resources, in plaats van aparte hiërarchieën voor CPU-resourcetoewijzing, het reguleren van geheugengebruik en I/O. Om bijvoorbeeld te controleren of de voorouder van een socket op het eerste niveau van cgroupv2 overeenkomt met het masker "system.slice", kunt u de volgende constructie gebruiken: ... socket cgroupv2 level 1 "system.slice".
- De mogelijkheid om de componenten van SCTP-pakketten te controleren is toegevoegd (de benodigde functionaliteit zal in de kernel verschijnen). Linux 5.14). Om bijvoorbeeld te controleren of een pakket een chunk bevat met het type 'data' en het veld 'type': … sctp chunk data exists … sctp chunk data type 0
- De uitvoering van de regellaadbewerking met de vlag "-f" is ongeveer twee keer versneld. Ook de uitvoer van de lijst met regels is versneld.
- Er is een compacte vorm van testen voor bits die in vlaggen zijn ingesteld. Om bijvoorbeeld te testen of de snat- en dnat-statusbits niet zijn ingesteld, kunt u het volgende opgeven: … ct status ! snat,dnat om te testen of de syn-bit is ingesteld in het syn,ack-bitmasker: … tcp flags syn / syn,ack om te testen of de fin- en rst-bits niet zijn ingesteld in het syn,ack,fin,rst-bitmasker: … tcp flags != fin,rst / syn,ack,fin,rst
- Het trefwoord "verdict" is toegestaan in typeof-definities voor set/map: add map xm { typeof iifname . ip protocol . th dport : verdict ;}
Bron: opennet.ru
