ĂshtĂ« publikuar njĂ« version i filtrit tĂ« paketave nftables 1.0.6, i cili unifikon ndĂ«rfaqet e filtrimit tĂ« paketave pĂ«r IPv4, IPv6, ARP dhe urat rrjetĂ«sore (i destinuar pĂ«r tĂ« zĂ«vendĂ«suar iptables, ip6tables, arptables dhe ebtables). Paketa nftables pĂ«rfshin komponentĂ«t e filtrit tĂ« paketave qĂ« funksionojnĂ« nĂ« hapĂ«sirĂ«n e pĂ«rdoruesit, ndĂ«rsa nĂ« nivelin e bĂ«rthamĂ«s, menaxhimin e siguron nĂ«n-sistemi nf_tables, i cili Ă«shtĂ« pjesĂ« e bĂ«rthamĂ«s Linux qĂ« nga versioni 3.13. NĂ« nivelin e bĂ«rthamĂ«s ofrohet vetĂ«m njĂ« ndĂ«rfaqe e pĂ«rgjithshme, e cila nuk varet nga protocol specifik dhe ofron funksione bazĂ« pĂ«r nxjerrjen e tĂ« dhĂ«nave nga paketat, kryerjen e operacioneve me tĂ« dhĂ«na dhe menaxhimin e fluksit.
Rregullat për filtrimin 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ë mënyrë të veçantë, që i ngjan BPF (Filtrat e Paketa Berkeley). Ky qasje lejon të reduktohet ndjeshëm madhësia e kodit të filtrimit që operon në nivelin e bërthamës dhe të transferohet të gjitha funksionet e përpunimit të rregullave dhe logjikës së punës me protokollet në hapësirën e përdoruesit. makinën virtuale, që ngjan me BPF (Berkeley Packet Filters). Ky qasje lejon reduktimin e ndjeshëm të madhësisë së kodit të filtrimit që operon në nivelin e bërthamës dhe nxjerrjen e të gjitha funksioneve për të analizuar rregullat dhe logjikën e punës me protokollet në hapësirën e përdoruesit.
Ndryshimet kryesore:
- Në optimizuesin e rregullave, i cili aktivizohet kur tregoni opsionin "-o/--optimize", është vendosur paketimi automatik i rregullave përmes bashkimit dhe transformimit të tyre në lista map dhe set. Për shembull, rregullat # cat ruleset.nft table ip x { chain y { type filter hook input priority filter; policy drop; meta iifname eth1 ip saddr 1.1.1.1 ip daddr 2.2.2.3 accept meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.2.4 accept meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.3.0/24 accept meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.4.0-2.2.4.10 accept meta iifname eth2 ip saddr 1.1.1.3 ip daddr 2.2.2.5 accept } } pas ekzekutimit të "nft -o -c -f ruleset.nft" do të transformohen si më poshtë: ruleset.nft:4:17-74: meta iifname eth1 ip saddr 1.1.1.1 ip daddr 2.2.2.3 accept ruleset.nft:5:17-74: meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.2.4 accept ruleset.nft:6:17-77: meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.3.0/24 accept ruleset.nft:7:17-83: meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.4.0-2.2.4.10 accept ruleset.nft:8:17-74: meta iifname eth2 ip saddr 1.1.1.3 ip daddr 2.2.2.5 accept në: iifname . ip saddr . ip daddr { eth1 . 1.1.1.1 . 2.2.2.3, eth1 . 1.1.1.2 . 2.2.2.4, eth1 . 1.1.1.2 . 2.2.3.0/24, eth1 . 1.1.1.2 . 2.2.4.0-2.2.4.10, eth2 . 1.1.1.3 . 2.2.2.5 } accept
- Optimizuesi gjithashtu mund të konvertojë në një formë më të kompaktë rregullat, në të cilat tashmë përdoren lista të thjeshta set-esh, për shembull rregullat: # cat ruleset.nft tabela ip filter { zinxhir input { lloji filter hook input prioritet filter; politika drop; iifname «lo» accept ct state established,related accept comment «Në trafikun që ne origjinojmë, ne besojmë» iifname «enp0s31f6» ip saddr { 209.115.181.102, 216.197.228.230 } ip daddr 10.0.0.149 udp sport 123 udp dport 32768-65535 accept iifname «enp0s31f6» ip saddr { 64.59.144.17, 64.59.150.133 } ip daddr 10.0.0.149 udp sport 53 udp dport 32768-65535 accept } } pas ekzekutimit të «nft -o -c -f ruleset.nft» do të paketohen si më poshtë: ruleset.nft:6:22-149: iifname «enp0s31f6» ip saddr { 209.115.181.102, 216.197.228.230 } ip daddr 10.0.0.149 udp sport 123 udp dport 32768-65535 accept ruleset.nft:7:22-143: iifname «enp0s31f6» ip saddr { 64.59.144.17, 64.59.150.133 } ip daddr 10.0.0.149 udp sport 53 udp dport 32768-65535 accept në: iifname . ip saddr . ip daddr . udp sport . udp dport { enp0s31f6 . 209.115.181.102 . 10.0.0.149 . 123 . 32768-65535, enp0s31f6 . 216.197.228.230 . 10.0.0.149 . 123 . 32768-65535, enp0s31f6 . 64.59.144.17 . 10.0.0.149 . 53 . 32768-65535, enp0s31f6 . 64.59.150.133 . 10.0.0.149 . 53 . 32768-65535 } accept
- Problemi me gjenerimin e kodit të bajtëve për bashkimin e intervaleve, në të cilat aplikohen tipe me renditje të ndryshme bajtësh, për shembull IPv4 (renditja e bajtëve në rrjet) dhe meta mark (renditja e bajtëve sistemike), është zgjidhur. tabela ip x { harta w { lloji ip saddr . meta mark : verdikti flamuj interval kontatori elemente = { 127.0.0.1-127.0.0.4 . 0x123434-0xb00122 : accept, 192.168.0.10-192.168.1.20 . 0x0000aa00-0x0000aaff : accept, } } zinxhiri k { lloji filter hook input prioritet filter; politika drop; ip saddr . meta mark vmap @w } }
- Korrigjimi i përputhjes së protokolleve të rralla kur përdoren shprehje raw, për shembull: meta l4proto 91 @th,400,16 0x0 accept
- Problemet me përfshirjen e rregullave me intervale janë zgjidhur: insert rule x y tcp sport { 3478-3497, 16384-16387 } counter accept
- API JSON është përmirësuar, duke introduktuar mbështetje për shprehjet në set- dhe map-lista.
- Në shtesat e bibliotekës python për nftables është lejuar ngarkimi i grupeve të rregullave për procesim në modin e verifikimit («-c») dhe është shtuar mbështetje për përcaktimin e jashtëm të variablave.
- Në elementet e set-listave është lejuar shtimi i komenteve.
- Në byte ratelimit është lejuar specifikimi i një vlerë zero.
Burimi: opennet.ru
