Uitgave van het pakketfilter nftables 1.0.3

De uitgave van het pakketfilter nftables 1.0.3 is gepubliceerd, dat de interfaces voor het filteren van pakketten voor IPv4, IPv6, ARP en netwerkbruggen uniform maakt (gericht op het vervangen van iptables, ip6tables, arptables en ebtables). De benodigde wijzigingen voor de werking van nftables 1.0.3 zijn opgenomen in de Linux-kernel 5.18.

De nftables-pakket bevat gebruikersruimte componenten van de pakketfilter, terwijl op kernniveau het nf_tables subsysteem de werking verzorgt, dat deel uitmaakt van de Linux-kernel sinds versie 3.13. Op kernniveau wordt slechts een algemene interface geboden, niet afhankelijk van een specifiek protocol en die basisfunctionaliteiten biedt voor het extraheren van gegevens uit pakketten, het uitvoeren van gegevensbewerkingen en het beheren van stromingen.

Directe filtratieregels en protocolspecifieke verwerkers worden in bytecode gecompileerd in de gebruikersruimte, waarna deze bytecode via de Netlink-interface in de kern wordt geladen en in de kern wordt uitgevoerd in een speciale een virtuele machine, die doet denken aan BPF (Berkeley Packet Filters). Deze aanpak maakt het mogelijk om de grootte van de filtering code die op kernniveau draait aanzienlijk te verkleinen en alle functies voor het parseren van regels en de logica voor de werking met protocollen naar de gebruikersruimte te verplaatsen.

Belangrijkste vernieuwingen:

  • In set-lijsten is er ondersteuning toegevoegd voor het matchen van namen van netwerkinterfaces op basis van een masker, bijvoorbeeld opgegeven met het teken '*': 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 } }
  • Automatische samenvoeging van overlappende elementen in de set-lijst tijdens gebruik is geïmplementeerd. Eerder werd bij het instellingen van de optie «auto-merge» de samenvoeging uitgevoerd tijdens de verklaring van regels, nu gebeurt dit ook bij het incrementeel toevoegen van nieuwe elementen tijdens gebruik. Bijvoorbeeld, bij de verklaring wordt de lijst 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 } } omgevormd naar elements = { 1.2.3.0/24, 3.3.3.3-3.3.3.5, 4.4.4.4-4.4.4.8 } en vervolgens, als er nieuwe elementen worden toegevoegd # nft add element ip x y { 1.2.3.0-1.2.4.255, 3.3.3.6 } zal deze eruitzien als 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 }

    Bij het verwijderen van afzonderlijke elementen uit de lijst die binnen bestaande elementen met bereiken vallen, wordt het bereik verkort of gesplitst.

  • In de regeloptimalisator, die wordt aangeroepen bij het opgeven van de optie «-o/—optimize», is ondersteuning toegevoegd voor het samenvoegen van meerdere NAT-regels in een map-lijst. Bijvoorbeeld, voor de set # 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 } }

    De uitvoering van «nft -o -c -f ruleset.nft» zal leiden tot de transformatie van afzonderlijke regels «ip saddr» in een map-lijst: 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 }

    Even raw expressions can be transformed into map lists: # 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 } }

    After optimization, we get a map list: 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 }

  • The use of raw expressions in concatenation operations is allowed. For example: # nft add rule x y ip saddr . @ih,32,32 { 1.1.1.1 . 0x14, 2.2.2.2 . 0x1e } or table x { set y { typeof ip saddr . @ih,32,32 elements = { 1.1.1.1 . 0x14 } } }
  • Support has been added for specifying integer fields in headers in concatenation operations: 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 } }
  • Support for resetting TCP options has been added (works only with Linux kernel 5.18+): tcp flags syn reset tcp option sack-perm
  • The execution of chain output commands ('nft list chain x y') has been accelerated.

Bron: opennet.ru

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster