Ilmus välja nftablesi pakettfiltri 1.0.5 versioon, mis ühtlustab pakettide filtreerimise liidesed IPv4, IPv6, ARP ja võrgusildade jaoks (sihtpunkt on iptablesi, ip6table'i, arptablesi ja ebtablesi asendamine). Samuti ilmus koos selle versiooniga libnftnl 1.2.3 versioon, mis pakub madala taseme API-d nf_tables süsteemiga suhtlemiseks.
Nftables'i paketti kuuluvad kasutajaruumi töötavad pakettfilteri komponendid, samas kui tuuma tasemel tagab töö nf_tables süsteem, mis on osa Linuxi tuumast alates versioonist 3.13. Tuuma tasemel pakutakse vaid üldist liidest, mis ei sõltu konkreetsest protokollist ja pakub põhifunktsioone andmete väljavõtmiseks pakettidest, andmetega töötamiseks ja voogude haldamiseks.
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 lahendatud reeglite, map- ja set-nimekirjade ühendamise probleemid. # 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 } } # nft -o -c -f ruleset.nft Ühendamine: ruleset.nft:4:3-52: ip saddr 1.1.1.1 tcp dport 8000 snat to 4.4.4.4:80 ruleset.nft:5:3-52: ip saddr 2.2.2.2 tcp dport 8001 snat to 5.5.5.5:90 sisse: 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 }
- Ethernet ja vlan-elementide ühendamisel on tagatud dünaamilise set-nimekirja määramine, mis täidetakse paketi marsruudi parameetrite põhjal. add table netdev x add chain netdev x y { type filter hook ingress device enp0s25 priority 0; } add set netdev x macset { typeof ether daddr . vlan id; flags dynamic,timeout; } add rule netdev x y update @macset { ether daddr . vlan id timeout 60s } add rule netdev x y ether saddr . vlan id { 0a:0b:0c:0d:0e:0f . 42, 0a:0b:0c:0d:0e:0f . 4095 } counter accept
- Reeglite kuvamine on seadistatud, et kasutada map-nimekirju, mis sisaldavad maske liideste nimedes. table inet filter { chain INPUT { iifname vmap { «eth0» : jump input_lan, «wg*» : jump input_vpn } } chain input_lan {} chain input_vpn {} }
- Tagasilöökidega seonduvad muudatused on kõrvaldatud, mis põhjustasid korrektsete reeglite vale lexikaalset analüüsi.
- Lahendatud on probleemid, mis on seotud suurte nimekirjade aeglase töötlemise ja automaatse ühendamisega, millega on määratud väärtuste intervallid.
- Asetuse lõpetamine probleemsete elementide lisamisel vale set-nimekirja on kõrvaldatud.
Allikas: opennet.ru
