nftables pakketfilter release 1.0.6

De uitgave van nftables 1.0.6 pakketfilter is gepubliceerd, die pakketfilterinterfaces verenigt voor IPv4, IPv6, ARP en netwerkbruggen (ter vervanging van iptables, ip6table, arptables en ebtables). Het nftables-pakket bevat pakketfiltercomponenten die in de gebruikersruimte draaien, terwijl het kernelniveau wordt geleverd door het nf_tables-subsysteem, dat sinds release 3.13 deel uitmaakt van de Linux-kernel. Op kernelniveau is er alleen een generieke protocolonafhankelijke interface die basisfuncties biedt voor het extraheren van gegevens uit pakketten, het uitvoeren van bewerkingen op gegevens en het regelen van de stroom.

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.

Grote veranderingen:

  • In de regeloptimalisatie die wordt aangeroepen bij het specificeren van de "-o/--optimize"-optie, is het automatisch verpakken van regels ingesteld door ze te combineren en om te zetten in kaart- en setlijsten. De regels zijn bijvoorbeeld # cat ruleset.nft table ip x { chain y { type filter hook input priority filter; beleidsdaling; meta iifname eth1 ip saddr 1.1.1.1 ip daddr 2.2.2.3 accepteer meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.2.4 accepteer meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.3.0/24 accepteer meta iifname eth1 ip saddr 1.1.1.2 .2.2.4.0 ip daddr 2.2.4.10-2 accept meta iifname eth1.1.1.3 ip saddr 2.2.2.5 ip daddr 4 accept } } na "nft -o -c -f regelset.nft" wordt geconverteerd naar het volgende: regelset. nft:17:74-1: meta iifname eth1.1.1.1 ip saddr 2.2.2.3 ip daddr 5 accepteer regelset.nft:17:74-1: meta iifname eth1.1.1.2 ip saddr 2.2.2.4 ip daddr 6 accepteer regelset.nft: 17:77-1: meta iifname eth1.1.1.2 ip saddr 2.2.3.0 ip daddr 24/7 accepteer regelset.nft:17:83-1: meta iifname eth1.1.1.2 ip saddr 2.2.4.0 ip daddr 2.2.4.10-8 accepteer regelset.nft:17:74-2: meta iifname eth1.1.1.3 ip saddr 2.2.2.5 ip daddr 1 accepteren in: iifname . ip saddr. ip vader { eth1.1.1.1 . 2.2.2.3. 1, eth1.1.1.2 . 2.2.2.4. 1, eth1.1.1.2 . 2.2.3.0. 24/1, et1.1.1.2 . 2.2.4.0. 2.2.4.10-2, eth1.1.1.3 . 2.2.2.5. XNUMX } accepteren
  • De optimizer kan ook regels samenvatten die al eenvoudige setlists gebruiken in een meer compacte vorm, zoals: # cat ruleset.nft table ip filter { chain input { type filter hook input priority filter; beleidsdaling; iifname "lo" accepteren ct state gevestigde, gerelateerde opmerking accepteren "In het verkeer komen we voort, vertrouwen we" iifname "enp0s31f6" ip saddr { 209.115.181.102, 216.197.228.230 } ip daddr 10.0.0.149 udp sport 123 udp dport 32768-65535 accepteren iifname "enp0s31f6" ip saddr { 64.59.144.17, 64.59.150.133 } ip daddr 10.0.0.149 udp sport 53 udp dport 32768-65535 accept } } na het uitvoeren van "nft -o -c -f regelset.nft" zal als volgt worden verpakt : regelset.nft:6:22-149: iifname "enp0s31f6" ip saddr { 209.115.181.102, 216.197.228.230 } ip daddr 10.0.0.149 udp sport 123 udp dport 32768-65535 accepteer regelset.nft:7:22-143 0 : iifname "enp31s6f64.59.144.17" ip saddr { 64.59.150.133, 10.0.0.149 } ip daddr 53 udp sport 32768 udp dport 65535-0 accepteren in: iifname . ip saddr. ip vader. udp sport. udp-dport { enp31s6f209.115.181.102 . 10.0.0.149 . 123 . 32768 . 65535-0, enp31s6f216.197.228.230 . 10.0.0.149 . 123 . 32768 . 65535-0, enp31s6f64.59.144.17 . 10.0.0.149. 53 . 32768 . 65535-0, enp31s6f64.59.150.133 . 10.0.0.149. 53 . 32768 . 65535-XNUMX } accepteren
  • Een probleem opgelost met het genereren van bytecodes voor het samenvoegen van intervallen die typen met verschillende endianness gebruiken, zoals IPv4 (netwerk-endian) en metamarkering (systeem-endian). table ip x { map w { typeof ip saddr . metamarkering: vonnis vlaggen intervaltellerelementen = {127.0.0.1-127.0.0.4. 0x123434-0xb00122: accepteren, 192.168.0.10-192.168.1.20. 0x0000aa00-0x0000aaff : accepteren, } } chain k { type filter hook input prioriteitsfilter; beleidsdaling; ip saddr. metamarkering vmap @w } }
  • Verbeterde zeldzame protocoltoewijzingen bij gebruik van onbewerkte uitdrukkingen, bijvoorbeeld: meta l4proto 91 @th,400,16 0x0 accepteren
  • Problemen opgelost met het inschakelen van regels met tussenpozen: regel invoegen xy tcp sport { 3478-3497, 16384-16387 } counter accept
  • De JSON API is verbeterd om uitdrukkingen in set- en maplijsten te ondersteunen.
  • In uitbreidingen op de nftables python-bibliotheek mogen regelsets worden geladen voor verwerking in de controlemodus ("-c") en is ondersteuning voor externe variabeledefinitie toegevoegd.
  • Commentaar toevoegen is toegestaan ​​in de elementen van setlists.
  • Het is toegestaan ​​om een ​​nulwaarde op te geven in byte ratelimit.

Bron: opennet.ru

Voeg een reactie