Avaldatud on nftables 1.0.3 pakettfilteri väljaanne, mis ühtlustab pakettide filtreerimise liideseid IPv4, IPv6, ARP ja võrgu silmade jaoks (sihtides asendada iptables, ip6tables, arptables ja ebtables). Väljaande nftables 1.0.3 toimimiseks vajalikud muudatused on sisaldatud Linuxi tuuma versioonis 5.18.
Nftables'i paketis on kasutusruumi paketifiltreerimise komponendid, samas kui tuuma tasemel tagab töö nf_tables alamsüsteem, mis on Linuxi tuumas saadaval alates versioonist 3.13. Tuuma tasemel on olemas vaid üldine liides, mis ei sõltu konkreetsetest protokollidest ja pakub põhiülesandeid paketidest andmete ekstraheerimiseks, andmete töötlemiseks ja voogude haldamiseks.
Filtreerimisreeglid ja protokollispetsiifilised töötlejad kompileeritakse kasutusruumis byte-koodiks, seejärel laaditakse see byte-kood tuuma Netlinki liidese abil ja käivitatakse tuumas eraldi virtuaalmasinas, mis tahes BPF (Berkeley Packet Filters). Sarnane lähenemine võimaldab oluliselt vähendada filterkoodi suurust, mis töötab tuuma tasemel, ning viia kõik reeglite parsing'u funktsioonid ja protokollide töötlemise loogika kasutajaruumi.
Põhilised uuendused:
- Set-loendites on nüüd toetatud võrgu liideste nime jagamise vastavust maskeerimise kaudu, näiteks kasutades sümbolit "*": 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 } }
- Automaatne kokkuklõpsamine on nüüd realiseeritud set-loendi ülevõtmiseks töö käigus. Varem toimus valiku „auto-merge“ aktiveerimine reeglite kuulutamise etapis, kuid nüüd aktiveerub see ka uute elementide inkrementaalse lisamise korral töö käigus. Näiteks kuulutamise etapis muutub nimekiri 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 } } elements = { 1.2.3.0/24, 3.3.3.3-3.3.3.5, 4.4.4.4-4.4.4.8 } ja seejärel, kui lisatakse uusi elemente # nft add element ip x y { 1.2.3.0-1.2.4.255, 3.3.3.6 } , näeb see välja nagu 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 }
Kui rühmast eemaldatakse üksikute elementide, mis kuuluvad olemasolevatesse vahemikesse, elemendid, siis vahemik lühendatakse või jagatakse.
- Reeglite optimeerimise, mis käivitatakse valiku «-o/—optimize» näol, on lisatud toetus mitme NAT-lähenemisreegli ühendamiseks map-loetellu. Näiteks komplekti puhul: # 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 } }
Komplekti käivitamine «nft -o -c -f ruleset.nft» toob kaasa eraldi reeglite «ip saddr» muutmise map-loeteluks: 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 }
Samuti võivad raw-väljendid muutuda map-loeteks: # 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 } }
optimeerimise järel saame map-loendi: 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 }
- Tohib kasutada raw-väljendeid concatenation operatsioonides. Näiteks: # nft add rule x y ip saddr . @ih,32,32 { 1.1.1.1 . 0x14, 2.2.2.2 . 0x1e } või table x { set y { typeof ip saddr . @ih,32,32 elements = { 1.1.1.1 . 0x14 } } }
- On lisatud toetus täisarvuliste päiste määramiseks concatenation operatsioonides: 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 } }
- TCP-valikute lähtestamise tugi on lisatud (töötab ainult Linuxi tuumaga 5.18+): tcp flags syn reset tcp option sack-perm
- Ahelate väljundikäskude täitmine on kiiruselt kiiremad („nft list chain x y“).
Allikas: opennet.ru
