Išleistas „nftables 1.0.7“ paketų filtras. Jis suvienodina paketų filtravimo sąsajas IPv4, IPv6, ARP ir tinklo tiltams (skirtas pakeisti „iptables“, „ip6table“, „arptables“ ir „ebtables“). „nftables“ pakete yra vartotojo erdvės paketų filtro komponentai, o branduolio lygio funkcionalumą teikia „nf_tables“ posistemė, kuri yra branduolio dalis. Linux Nuo 3.13 versijos branduolio lygmenyje pateikiama tik bendra, nuo protokolo nepriklausoma sąsaja, užtikrinanti pagrindines funkcijas duomenų išgavimui iš paketų, duomenų operacijų atlikimui ir srauto valdymui.
Pačios filtravimo taisyklės ir protokolui būdingi tvarkyklės yra kompiliuojamos į baitinį kodą vartotojo erdvėje, po kurio šis baitinis kodas įkeliamas į branduolį naudojant „Netlink“ sąsają ir vykdomas branduolyje specialiu būdu. Virtuali mašina, primenantis BPF (Berkeley paketų filtrus). Šis metodas leidžia žymiai sumažinti branduolio lygmenyje veikiančio filtravimo kodo dydį ir perkelia visą taisyklių analizę bei protokolo logiką į vartotojo erdvę.
Pagrindiniai pakeitimai:
- Sistemoms su branduoliu Linux 6.2+ versijose pridėtas „vxlan“, „geneve“, „gre“ ir „gretap“ protokolų atitikmenų palaikymas, leidžiantis naudoti paprastas išraiškas, norint patikrinti antraštes įkapsuliuotuose paketuose. Pavyzdžiui, norint patikrinti IP adresai Įterptojo paketo iš „VxLAN“ antraštėje dabar galite naudoti taisykles (nereikia pirmiausia dekapsuliuoti „VxLAN“ antraštės ir susieti filtro su „vxlan0“ sąsaja): ... 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 }
- Įdiegtas automatinio likučių sujungimo palaikymas iš dalies ištrynus rinkinio sąrašo elementą, kuris leidžia ištrinti elementą arba diapazono dalį iš esamo diapazono (anksčiau diapazoną buvo galima ištrinti tik visiškai). Pavyzdžiui, pašalinus elementą 25 iš rinkinio sąrašo, kurio diapazonai yra 24–30 ir 40–50, sąraše išliks 24, 26–30 ir 40–50. Pataisymai, reikalingi automatiniam sujungimui, bus siūlomi stabilių 5.10+ branduolio šakų priežiūros leidimuose. # nft sąrašo taisyklių lentelė ip x { set y { typeof tcp dport flags intervalas auto-merge elements = { 24-30, 40-50 } } } # nft delete element ip xy { 25 } # nft list taisyklių rinkinio lentelė ip x { rinkinys y { tcp dport vėliavėlių intervalo automatinio sujungimo elementų tipas = { 24, 26-30, 40-50 } }
- Leidžiama naudoti kontaktus ir diapazonus nustatant adresų vertimą (NAT). lentelė ip nat { grandinės prerouting { type nat hook prerouting priority dstnat; priimti politiką; dnat į ip tėtis. tcp dport žemėlapis { 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 } nuolatinis } }
- Pridėta „paskutinio“ reiškinio palaikymas, leidžiantis sužinoti, kada paskutinį kartą buvo naudojamas taisyklės elementas arba rinkinių sąrašas. Ši funkcija palaikoma nuo pat branduolio versijos. 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 xy 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 paskutinis naudotas 4 s 636 ms skirtasis laikas, 1 val. galioja iki 59 m 55 s 364 ms, 142.250.201.72. 443 paskutinis naudotas 4 s 748 ms skirtasis laikas, 1 val. galioja iki 59 m 55 s 252 ms, 172.67.70.134. 443 paskutinis naudotas 4 s 688 ms skirtasis laikas, 1 val. galioja iki 59 m 55 s 312 ms, 35.241.9.150. 443 paskutinis naudotas 5 s 204 ms skirtasis laikas, 1 val. galioja iki 59 m 54 s 796 ms, 138.201.122.174. 443 paskutinis naudotas 4 s 537 ms skirtasis laikas 1 val. galioja iki 59 m 55 s 463 ms, 34.160.144.191. 443 paskutinis naudotas 5 s 205 ms skirtasis laikas 1 val. galioja iki 59 m 54 s 795 ms, 130.211.23.194. 443 paskutinis naudotas 4 s 436 ms skirtasis laikas 1 val. galioja iki 59 m 55 s 564 ms } } }
- Pridėta galimybė nustatyti kvotas rinkinių sąrašuose. Pavyzdžiui, norėdami nustatyti kiekvieno tikslinio IP adreso srauto kvotą, galite nurodyti: lentelę netdev x { set y { typeof ip daddr size 65535 quota over 10000 MB } chain y { type filter hook egress device "eth0" priority filter; priimti politiką; ip daddr @y drop } } # nft add element inet xy { 8.8.8.8 } # ping -c 2 8.8.8.8 # nft sąrašo taisyklių lentelė netdev x { set y { tipo ipv4_addr dydis 65535 kvota virš 10000 8.8.8.8 MB 10000 elementų = { . 196 kvota virš 0 XNUMX MB panaudota XNUMX baitai } } grandinė y { tipo filtras kablio išėjimo įrenginio „ethXNUMX“ prioritetinis filtras; priimti politiką; ip tėtis @y drop } }
- Leidžiama naudoti konstantas rinkinių sąrašuose. Pavyzdžiui, kai kaip sąrašo raktą naudojate paskirties adresą ir VLAN ID, galite tiesiogiai nurodyti VLAN numerį (daddr . 123): table netdev t { set s { typeof ether saddr . vlan id dydis 2048 flags dynamic,timeout timeout 1m } chain c { type filtro hook ingress device eth0 priority 0; priimti politiką; eterio tipas != 8021q atnaujinimas @s { eteris daddr . 123 } skaitiklis } }
- Pridėta nauja komanda „destroy“, skirta besąlyginiam objektų trynimui (skirtingai nei komanda „delete“, ji nesukuria ENOENT bandant ištrinti trūkstamą objektą). Reikalingas bent branduolys. Linux 6.3-rc. sunaikinti lentelę IP filtras
Šaltinis: opennet.ru
