lëshimi i filtrit të paketave , i cili po zhvillohet si zëvendësim për iptables, ip6tables, arptables dhe ebtables duke unifikuar ndërfaqet e filtrimit të paketave për IPv4, IPv6, ARP dhe urat rrjetë. Në paketën nftables përfshihen komponentë të filtrit të paketave që punojnë në hapësirën e përdoruesit, ndërsa në nivelin e bërthamës punën e siguron nën-sistemi nf_tables, i cili është pjesë e bërthamës Linux që nga lëshimi 3.13. Ndryshimet e nevojshme për funksionimin e lëshimit nftables 0.9.4 janë përfshirë në degën e ardhshme të bërthamës .
Në nivelin themelor, ofrohet vetëm një interfacë të përgjithshme, e cila nuk varet nga protokolli i caktuar dhe ofron funksione bazë për nxjerrjen e të dhënave nga paketat, kryerjen e operacioneve me të dhënat dhe menaxhimin e rrjedhës. Rregullat e filtrimit dhe përpunuesit e caktuar për protokollet kompilohen direkt në kodin e bytes në hapësirën e përdoruesit, pas së cilës ky kod narkohet në kernel përmes interfecës Netlink dhe ekzekutohet në kernel në një makinë virtuale të veçantë, e ngjashme me BPF (Filtrat e Paketave Berkeley). Ky qasje lejon reduktimin e ndjeshëm të madhësisë së kodit të filtrimit që funksionon në nivelin e kernelit dhe të zhvendosë të gjitha funksionet për analizimin e rregullave dhe logjikës së punës me protokollet në hapësirën e përdoruesit.
TĂ« rejat kryesore:
- Mbështetje për intervalet në bashkime (konkatinim, lidhjet e caktuara të adresave dhe porteve që lehtësojnë përputhjen). Për shembull, për grupin "whitelist", elementet e të cilit janë bashkime, specifikimi i flamurit "interval" do të tregojë se grupe të caktuara mund të përfshihen në bashkimin (për bashkimin "ipv4_addr . ipv4_addr . inet_service" më parë ishte e mundshme të renditni përputhje të sakta si "192.168.10.35 . 192.68.11.123 . 80", dhe tani mund të specifikoni grupe adresash "192.168.10.35-192.168.10.40 . 192.68.11.123-192.168.11.125 . 80"):
table ip foo {
set whitelist {
type ipv4_addr . ipv4_addr . inet_service
flags interval
elements = { 192.168.10.35-192.168.10.40 . 192.68.11.123-192.168.11.125 . 80 }
}chain bar {
type filter hook prerouting priority filter; policy drop;
ip saddr . ip daddr . tcp dport @whitelist accept
}
} - Në grupe dhe lista map është siguruar përdorimi i direktyvës "typeof", e cila përcakton formatin e elementit gjatë përputhjes.
Për shembull:table ip foo {
set whitelist {
typeof ip saddr
elements = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
}chain bar {
type filter hook prerouting priority filter; policy drop;
ip daddr @whitelist accept
}
}table ip foo {
map addr2mark {
typeof ip saddr : meta mark
elements = { 192.168.10.35 : 0x00000001, 192.168.10.135 : 0x00000002 }
}
} - Shtuar mundësia e përdorimin e bashkimeve në NAT, e cila lejon specifikimin e adresës dhe portës gjatë përcaktimit të transformimeve NAT në bazë të listave map ose grupeve të emëruara:
nft add rule ip nat pre dnat ip addr . port to ip saddr map { 1.1.1.1 : 2.2.2.2 . 30 }
nft add map ip nat destinations { type ipv4_addr . inet_service : ipv4_addr . inet_service \; }
nft add rule ip nat pre dnat ip addr . port to ip saddr . tcp dport map @destinations - Përkrahja e përshpejtimit të harduerit me transferimin e disa operacioneve të filtrimit te karta rrjetit. Përshpejtimi aktivizohet përmes utilitarit ethtool ("ethtool -K eth0 hw-tc-offload on"), pas së cilës aktivizohet në nftables për zinxhirin kryesor me flagun "offload". Duke përdorur bërthamën Linux 5.6, përkrahja e përshpejtimit të harduerit është për aplikimin e fushave të titullit dhe verifikimin e ndërfaqes hyrëse në kombinim me marrjen, hedhjen, kopjimin (dup) dhe ridrejtimin (fwd) e paketimeve. Në shembullin më poshtë, operacionet e hedhjes së paketimeve që vijnë nga adresa 192.168.30.20 kryhen në nivelin e kartës rrjetit, pa e kaluar paketën në bërthama:
# cat file.nft
table netdev x {
chain y {
type filter hook ingress device eth0 priority 10; flags offload;
ip saddr 192.168.30.20 drop
}
}
# nft -f file.nft - Informimi mbi vendin e gabimit në rregulla është përmirësuar.
# nft delete rule ip y z handle 7
Gabim: Nuk mund të përpunohej rregulla: Nuk ka një skedar ose drejtor.
delete rule ip y z handle 7
^# nft delete rule ip x x handle 7
Gabim: Nuk mund të përpunohej rregulla: Nuk ka një skedar ose drejtor.
delete rule ip x x handle 7
^# nft delete table twst
Gabim: Nuk ka një skedar ose drejtor; a do të thotë ti tabelën 'test' në familjen ip?
delete table twst
^^^^Në shembullin e parë, tregohet se tabela «y» mungon në sistem, në të dytin, se mungon përpunuesi «7», dhe në të tretin, se jepet një sugjerim për një gabim në shkrim gjatë shkrimit të emrit të tabelës.
- është shtuar mbështetje për kontrollin e ndërlidhësit slave përmes caktimit «meta sdif» ose «meta sdifname»:
⊠meta sdifname vrf1 âŠ
- është shtuar mbështetje për operacionin e lëvizjes së djathtë ose të majtë. Për shembull, për të zhvendosur një etiketë ekzistuese paketi në të majtë për 1 bit dhe për të vendosur bitin më të vogël në 1:
⊠meta mark set meta mark lshift 1 ose 0x1 âŠ
- është realizuar opsioni «-V» për të treguar informacion të zgjeruar mbi versionin.
# nft -V
nftables v0.9.4 (Jive at Five)
cli: readline
json: po
minigmp: jo
libxtables: po - Opsionet e komandës tani duhet të specifikohen domosdoshmërisht para komandave. Për shembull, duhet të specifikohet «nft -a list ruleset», ndërsa ekzekutimi «nft list ruleset -a» do të shkaktojë një gabim.
Burimi: opennet.ru
