lëshimi i filtrit të paketave , duke po zhvilluar si një zëvendësim për iptables, ip6tables, arptables dhe ebtables falë unifikimit të interfeseve të filtrimit të paketave për IPv4, IPv6, ARP dhe ura rrjetesh. Pakoja nftables përfshin komponentë të filtrimit të paketave që punojnë në hapësirën e përdoruesit, ndërsa në nivelin e bërthamës, sistemi nf_tables, i përfshirë në bërthamën Linux që nga lëshimi 3.13, garanton funksionimin. Ndryshimet e nevojshme për lëshimin e nftables 0.9.4 janë përfshirë në degën e ardhshme të bërthamës. .
Në nivelin e bërthames ofrohet vetëm një ndërfaqe e përgjithshme, që nuk varet nga protokolli specifik dhe ofron funksione të bazës për nxjerrjen e të dhënave nga paketat, kryerjen e operacioneve me të dhëna dhe menaxhimin e rrjedhës. Rregullat e filtrimit dhe trajtuesit specifikë për protokollet kompilohet në kod bajtësh në hapësirën e përdoruesit, pas së cilës ky kod bajtësh ngarkohet në bërthamë përmes ndërfaqes Netlink dhe ekzekutohet në bërthamë në një makinë virtuale speciale, e cila i ngjan BPF (Berkeley Packet Filters). Ky qasje lejon të zvogëlohet në mënyrë të konsiderueshme madhësia e kodit të filtrimit që punon në nivelin bërthamor dhe të transferohen të gjitha funksionet e analizës së rregullave dhe logjikës së punës me protokollet në hapësirën e përdoruesit.
Novitetet kryesore:
- Mbështetje për intervale në bashkime (concatenation, lidhje të caktuara të adresave dhe portëve që lehtësojnë përputhjen). Për shembull, për një grup "whitelist", elementët e të cilit janë bashkime, caktimi i flamurit "interval" do të tregojë se grupi mund të përfshijë intervale në bashkim (për bashkimin "ipv4_addr . ipv4_addr . inet_service" më parë ishte e mundur të renditesh përputhje të sakta të tipit "192.168.10.35 . 192.68.11.123 . 80", ndërsa tani është e mundur të caktohen grupe adresash "192.168.10.35-192.168.10.40 . 192.68.11.123-192.168.11.125 . 80"):
tabela 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ë grupet dhe listat e hartave është e mundur të përdoret direktiva "typeof", e cila përcakton formatin e elementit gjatë përputhjes.
Për shembull:tabela ip foo {
set whitelist {
lloji i ip saddr
elementët = { 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
}
}tabela 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ërdorimit të bashkimeve në lidhjet NAT, që lejon caktimin e adresës dhe portit gjatë përcaktimit të transformimeve NAT bazuar në listat e hartave ose grupet me emra:
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 - Mbështetje për përshpejtimin harduerik duke përjashtuar disa operacione filtrimi në barrën e kartës rrjetësore. Përshpejtimi aktivizohet përmes utilitarit ethtool ("ethtool -K eth0 hw-tc-offload on"), dhe pas kësaj aktivizohet në nftables për zinxhirin bazë me flamurin "offload". Kur përdoret bërthama Linux 5.6, mbështetet përshpejtimi harduerik për përputhjen e fushave të kokës dhe verifikimin e ndërfaqes hyrëse në kombinim me pranim, heqje, dublim (dup) dhe ridrejtim (fwd) paketash. Në shembullin më poshtë, operacionet e heqjes së paketave që vijnë nga adresa 192.168.30.20 kryhen në nivelin e kartës rrjetësore, pa kaluar paketat në bërthamë:
# cat file.nft
table netdev x {
zinxhir y {
filtri i tipit të aparatëve hyrës ethe0 prioritet 10; flamuj offload;
ip saddr 192.168.30.20 heq
}
}
# nft -f file.nft - Informimi për vendin e gabimit në rregulla është përmirësuar.
# nft delete rule ip y z handle 7
Gabim: Nuk mund të përpunohet rregulli: Nuk ka një skedar ose direktor.
fshi rregull ip y z menaxho 7
^# nft delete rule ip x x handle 7
Gabim: Nuk mund të përpunohet rregulli: Nuk ka një skedar ose direktor.
fshi rregull ip x x menaxho 7
^# nft delete table twst
Gabim: Nuk ka një skedar ose direktor; a keni dashur tabelën 'test' në familjen ip?
fshi tabelën twst
^^^^Në shembullin e parë tregohet se tabela «y» nuk është e pranishme në sistem, në të dytin se menaxheri «7» mungon, dhe në të tretin se tregohet një sugjerim për gabim gjatë shpërndarjes së emrit të tabelës.
- Shtuar mbështetje për verifikimin e interface slave përmes caktimit të «meta sdif» ose «meta sdifname»:
⊠meta sdifname vrf1 âŠ
- Shtuar mbështetje për operacionin e zhvendosjes djathtas ose majtas. Për shembull, për të zhvendosur etiketën ekzistuese të paketës majtas për 1 bit dhe të vendosni bitin më të vogël në 1:
⊠meta mark set meta mark lshift 1 ose 0x1 âŠ
- Realizuar opsioni «-V» për të shfaqur informacion të zgjeruar mbi_versionin.
# nft -V
nftables v0.9.4 (Jive at Five)
cli: readline
json: po
minigmp: jo
libxtables: po - Opcione të komandës tani duhet të specifikohen patjetër para komandave. Për shembull, duhet të shkruani «nft -a list ruleset», ndërsa ekzekutimi «nft list ruleset -a» do të sjellë një gabim.
Burimi: opennet.ru
