Avaldasime nftables 1.0.5 paketifiltrite versiooni, mis ühtlustab paketifiltreerimise liideseid IPv4, IPv6, ARP ja võrgu sillade jaoks (suunatud iptables, ip6tables, arptables ja ebtables asendamisele). Samuti avaldati kaasnev raamatukogu libnftnl 1.2.3, mis pakub madala taseme API-d nf_tables süsteemiga suhtlemiseks.
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.
Peamised muudatused:
- Reeglite optimeerijas, mida kutsutakse, kui kasutatakse valikut "-o/--optimize", on lahendatud reeglite, kaardistamise ja komplektide 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 muutmiseks: snat to ip saddr . tcp dport kaardistamine { 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 võimalik määrata dünaamilise set-loendi, mis täidetakse paketi tee parameetrite alusel. 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
- Reeglid on seadistatud map-loendite põhjal, kus on maskid liidese nimedes. table inet filter { chain INPUT { iifname vmap { «eth0» : jump input_lan, «wg*» : jump input_vpn } } chain input_lan {} chain input_vpn {} }
- Tagasiulatuvad muutused on kõrvaldatud, mis põhjustasid õigete reeglite vale leksikaalse töötlemise.
- Probleemid aeglase töötlemise ja suurte nimekirjade automaatse ühinemisega, mis määravad väärtuste intervallid, on lahendatud.
- Probleem, mis põhjustas programmide kokkuvarisemise vale set-loendi elemendi lisamisel, on kõrvaldatud.
Allikas: opennet.ru
