Ështe publikuar versioni 1.0.7 i filtrit të paketave nftables, i cili unifikon ndërfaqet e filtrimit të paketave për IPv4, IPv6, ARP dhe urat e rrjetit (synon të zëvendësojë iptables, ip6tables, arptables dhe ebtables). Paketa nftables përmban komponente të filtrit të paketave që funksionojnë në hapësirën e përdoruesit, ndërsa në nivelin e bërthamës, funksionon nën sistemin nf_tables, i cili është i pranishëm në bërthamën Linux që nga versioni 3.13. Në nivelin e bërthamës, ofrohet vetëm një ndërfaqe e përgjithshme, e pavarur nga protokolli specifik, që ofron funksione bazë për nxjerrjen e të dhënave nga paketat, kryerjen e operacioneve me të dhëna dhe menaxhimin e fluksit.
Rregullat e filtrimit dhe trajtuesit specifik për protokollet kompilohet në kodin e bytes në hapësirën e përdoruesit, pas së cilës ky kod bytes ngarkohet në bërthamë përmes ndërfaqes Netlink dhe ekzekutohet në bërthamë në një mjedis të veçantë. makinën virtuale, i ngjan Berkley Packet Filters (BPF). Qashtu, kjo qasje lejon të reduktohet ndjeshëm madhësia e kodit të filtrimit që funksionon në nivelin e bërthamës dhe të nxirren të gjitha funksionet e analizës së rregullave dhe logjikës së punës me protokollet në hapësirën e përdoruesit.
Ndryshimet kryesore:
- Sistemet me bërthamë Linux 6.2+ tani mbështesin përputhjen e protokolleve vxlan, geneve, gre dhe gretap, çka lejon përdorimin e shprehjeve të thjeshta për të verifikuar headers në paketat e inkapsuluara. Për shembull, për të verifikuar IP të përkushtuar në titullin e paketës së ngjitur nga VxLAN, tani mund të përdoren rregulla (pa nevojën për dekapitulimin paraprak të titullit VxLAN dhe lidhjen e filtrit me ndërfaqen vxlan0): … udp dport 4789 vxlan ip protokolli 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 }
- Është implementuar mbështetje për automatikisht bashkimin e mbetjeve pas një fshirjeje të pjesshme të një elementi të listës set, duke lejuar fshirjen e një elementi ose të një pjese të një gamë të një diapazoni ekzistues (më parë, diapazoni mund të fshihej vetëm në tërësi). Për shembull, pas fshirjes së elementit 25 nga lista set me gamat 24-30 dhe 40-50, lista do të mbajë 24, 26-30 dhe 40-50. Korrigjimet e nevojshme për funksionimin e bashkimit automatik do të ofrohen në versionet korrigjuese të degëve stabile të bërthamës 5.10+. # nft list ruleset table ip x { set y { typeof tcp dport flags interval auto-merge elements = { 24-30, 40-50 } } } # nft delete element ip x y { 25 } # nft list ruleset table ip x { set y { typeof tcp dport flags interval auto-merge elements = { 24, 26-30, 40-50 } } }
- Është lejuar përdorimi i kontaktimit dhe gamave në hartimin e përkthimit të adresave (NAT). table ip nat { chain prerouting { type nat hook prerouting priority dstnat; policy accept; dnat to ip daddr . tcp dport map { 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 } persistent } }
- Shtuar mbështetje për shprehjen «last», që lejon të dihet koha e përdorimit të fundit të një elementi rregulli ose listës set. Kjo mundësi mbështetet që nga bërthama 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 x y 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 last used 4s636ms timeout 1h expires 59m55s364ms, 142.250.201.72 . 443 last used 4s748ms timeout 1h expires 59m55s252ms, 172.67.70.134 . 443 last used 4s688ms timeout 1h expires 59m55s312ms, 35.241.9.150 . 443 last used 5s204ms timeout 1h expires 59m54s796ms, 138.201.122.174 . 443 last used 4s537ms timeout 1h expires 59m55s463ms, 34.160.144.191 . 443 last used 5s205ms timeout 1h expires 59m54s795ms, 130.211.23.194 . 443 last used 4s436ms timeout 1h expires 59m55s564ms } } }
- Shtuar mundësia për përcaktimin e kuotave në listat set. Për shembull, për të përcaktuar një kuotë për trafikun për çdo adresë IP target, mund të specifikohet: table netdev x { set y { typeof ip daddr size 65535 quota over 10000 mbytes } chain y { type filter hook egress device «eth0» priority filter; policy accept; ip daddr @y drop } } # nft add element inet x y { 8.8.8.8 } # ping -c 2 8.8.8.8 # nft list ruleset table netdev x { set y { type ipv4_addr size 65535 quota over 10000 mbytes elements = { 8.8.8.8 quota over 10000 mbytes used 196 bytes } } chain y { type filter hook egress device «eth0» priority filter; policy accept; ip daddr @y drop } }
- Është lejuar përdorimi i konstantave në listat set. Për shembull, kur përdoret si çelës i listës adresën e destinacionit dhe identifikuesin VLAN, mund të specifikohet direkt numri i VLAN (daddr . 123): table netdev t { set s { typeof ether saddr . vlan id size 2048 flags dynamic,timeout timeout 1m } chain c { type filter hook ingress device eth0 priority 0; policy accept; ether type != 8021q update @s { ether daddr . 123 } counter } }
- Shtuar urdhri i ri «destroy» për fshirjen pa kushte të objekteve (në dallim nga urdhri i fshirjes, nuk gjeneron ENOENT kur përpiqet të fshijë një objekt të munguar). Për funksionimin kërkohet të paktën bërthama Linux 6.3-rc. destroy table ip filter
Burimi: opennet.ru
