VĂ€lja on avaldatud paketifiltri nftables 1.0.6, mis ĂŒhtlustab paketifiltreerimise liideseid IPv4, IPv6, ARP ja vĂ”rgu sillade jaoks (mille eesmĂ€rk on asendada iptables, ip6tables, arptables ja ebtables). Pakett nftables sisaldab kasutajasĂŒsteemis töötavaid paketifiltri komponente, samas kui tuumatasemel tagab selle toimimise nf_tables sĂŒsteem, mis on osa Linuxi kernelist alates versioonist 3.13. Tuumatasemel pakutakse vaid ĂŒldist liidest, mis ei sĂ”ltu konkreetsest protokollist ja mis vĂ”imaldab andmete vĂ€ljavĂ”tmise, andmetega toimimise ja voolu juhtimise pĂ”hifunktsioone.
Filtreerimise reeglid ja protokollile spetsiifilised töötlejad kompileeritakse kasutajaruumi baidikoodiks, seejÀrel laaditakse see baidikood tuuma Netlink liidese abil ja tÀidetakse tuumas spetsiaalses virtuaalses masinas, mis meenutab BPF-i (Berkeley Packet Filters). Selline lÀhenemine vÔimaldab oluliselt vÀhendada tuuma tasemel töötava filtreerimiskoodi suurust ja viia kÔik reeglite tÔlgendamise ja protokollidega töötamise funktsioonid kasutajaruumi.
Peamised muudatused:
- Reeglite optimeerijas, mida kutsutakse, kui on mÀÀratud valik "-o/âoptimize", on automatiseeritud reeglite pakkimine nende ĂŒhendamise ja map- ja set-loenditeks muutmise kaudu. NĂ€iteks reeglid # cat ruleset.nft table ip x { chain y { type filter hook input priority filter; policy drop; meta iifname eth1 ip saddr 1.1.1.1 ip daddr 2.2.2.3 accept meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.2.4 accept meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.3.0/24 accept meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.4.0-2.2.4.10 accept meta iifname eth2 ip saddr 1.1.1.3 ip daddr 2.2.2.5 accept } } pĂ€rast "nft -o -c -f ruleset.nft" kĂ€ivitamist muudetakse jĂ€rgmiselt: ruleset.nft:4:17-74: meta iifname eth1 ip saddr 1.1.1.1 ip daddr 2.2.2.3 accept ruleset.nft:5:17-74: meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.2.4 accept ruleset.nft:6:17-77: meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.3.0/24 accept ruleset.nft:7:17-83: meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.4.0-2.2.4.10 accept ruleset.nft:8:17-74: meta iifname eth2 ip saddr 1.1.1.3 ip daddr 2.2.2.5 accept into: iifname . ip saddr . ip daddr { eth1 . 1.1.1.1 . 2.2.2.3, eth1 . 1.1.1.2 . 2.2.2.4, eth1 . 1.1.1.2 . 2.2.3.0/24, eth1 . 1.1.1.2 . 2.2.4.0-2.2.4.10, eth2 . 1.1.1.3 . 2.2.2.5 } accept
- Optimeerija suudab ka muuta reeglid kompaktsemaks vormiks, kus juba kasutatakse lihtsaid set-nimekirju, nĂ€iteks reeglid: # cat ruleset.nft table ip filter { chain input { type filter hook input priority filter; policy drop; iifname "lo" accept ct state established,related accept comment "Usaldame liiklust, mille me genereerime" 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 accept 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 } } pĂ€rast kĂ€sku ânft -o -c -f ruleset.nftâ pakatakse need jĂ€rgmiselt: ruleset.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 accept ruleset.nft:7:22-143: 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 sisse: iifname . ip saddr . ip daddr . udp sport . udp dport { enp0s31f6 . 209.115.181.102 . 10.0.0.149 . 123 . 32768-65535, enp0s31f6 . 216.197.228.230 . 10.0.0.149 . 123 . 32768-65535, enp0s31f6 . 64.59.144.17 . 10.0.0.149 . 53 . 32768-65535, enp0s31f6 . 64.59.150.133 . 10.0.0.149 . 53 . 32768-65535 } accept
- Lahendatud probleem bajtkoodi genereerimisega vahemike ĂŒhendamise jaoks, kus kasutatakse erineva baitide jĂ€rjekorraga tĂŒĂŒpe, nĂ€iteks IPv4 (verkkjĂ€rjekorra bait) ja meta mark (sĂŒsteemne jĂ€rjekord). table ip x { map w { typeof ip saddr . meta mark : verdict flags interval counter elements = { 127.0.0.1-127.0.0.4 . 0x123434-0xb00122 : accept, 192.168.0.10-192.168.1.20 . 0x0000aa00-0x0000aaff : accept, } } chain k { type filter hook input priority filter; policy drop; ip saddr . meta mark vmap @w } }
- Haruldaste protokollide seostamine raw-vÀljendite kasutamisel on toimingud, nÀiteks: meta l4proto 91 @th,400,16 0x0 accept
- Probleemide lahendamine reeglite sisestamisega vahemikes: insert rule x y tcp sport { 3478-3497, 16384-16387 } counter accept
- Parandatud JSON API, milles lisandunud toimetuste toimetamine set- ja map-nimekirjades.
- Python nftables teekide laiendustes lubatud reeglikogude laadimine kontrollreĆŸiimis ("-c") ja lisatud support vĂ€listatud muutujate mÀÀramiseks.
- Set-nimekirjade elementides on lubatud kommentaaride lisamine.
- Byte ratelimitis on lubatud nullvÀÀrtuse mÀÀramine.
Allikas: opennet.ru
