Lëshimi i filtrit të paketave nftables 1.0.6

Është publikuar lëshimi i filtrit të paketave nftables 1.0.6, duke unifikuar ndërfaqet e filtrimit të paketave për IPv4, IPv6, ARP dhe urat e rrjetit (që synojnë zëvendësimin e iptables, ip6table, arptables dhe ebtables). Paketa nftables përfshin komponentët e filtrit të paketave që funksionojnë në hapësirën e përdoruesit, ndërsa puna në nivel kernel ofrohet nga nënsistemi nf_tables, i cili ka qenë pjesë e kernelit Linux që nga lëshimi 3.13. Niveli i kernelit siguron vetëm një ndërfaqe gjenerike të pavarur nga protokolli që ofron funksione bazë për nxjerrjen e të dhënave nga paketat, kryerjen e operacioneve të të dhënave dhe kontrollin e rrjedhës.

Rregullat e filtrimit dhe mbajtësit specifikë të protokollit përpilohen në bytecode në hapësirën e përdoruesit, pas së cilës ky bajtkod ngarkohet në kernel duke përdorur ndërfaqen Netlink dhe ekzekutohet në kernel në një makinë virtuale speciale që të kujton BPF (Berkeley Packet Filters). Kjo qasje ju lejon të zvogëloni ndjeshëm madhësinë e kodit të filtrimit që funksionon në nivelin e kernelit dhe të zhvendosni të gjitha funksionet e rregullave të analizimit dhe logjikës për të punuar me protokollet në hapësirën e përdoruesit.

Ndryshimet kryesore:

  • Optimizuesi i rregullave, i thirrur kur specifikohet opsioni "-o/-optimize", ka paketim automatik të rregullave duke i kombinuar dhe konvertuar në lista hartash dhe grupesh. Për shembull, rregullat # cat ruleset.nft tabela ip x { chain y { type filter hook input input filter priority; rënie e politikës; meta iifname eth1 ip saddr 1.1.1.1 ip daddr 2.2.2.3 pranoj meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.2.4 prano meta iifname eth1 ip saddr 1.1.1.2 prano meta iifname eth2.2.3.0 ip sadr 24 .1 ip daddr 1.1.1.2-2.2.4.0 pranoj meta iifname eth2.2.4.10 ip saddr 2 ip daddr 1.1.1.3 prano } } pas ekzekutimit të "nft -o -c -f ruleset.nft" do të konvertohen në rregullat e mëposhtme: nft:2.2.2.5:4-17: meta iifname eth74 ip saddr 1 ip daddr 1.1.1.1 prano rregullat.nft:2.2.2.3:5-17: meta iifname eth74 ip saddr 1 ip daddr.1.1.1.2 prano rregullat. : 2.2.2.4:6-17: meta iifname eth77 ip saddr 1 ip daddr 1.1.1.2/2.2.3.0 prano rregullat.nft:24:7-17: meta iifname eth83 ip saddr 1 ip daddr 1.1.1.2/2.2.4.0. prano rregullat.nft:2.2.4.10:8-17: meta iifname eth74 ip saddr 2 ip daddr 1.1.1.3 prano në: iifname . ip sadr. ip daddr { eth2.2.2.5 . 1. 1.1.1.1, eth2.2.2.3. 1. 1.1.1.2, eth2.2.2.4. 1. 1.1.1.2/2.2.3.0, eth24. 1. 1.1.1.2-2.2.4.0, eth2.2.4.10. 2. 1.1.1.3 } pranoni
  • Optimizuesi gjithashtu mund të konvertojë rregullat që tashmë përdorin lista të thjeshta grupesh në një formë më kompakte, për shembull rregullat: # cat ruleset.nft ip filter tabela { chain input { type filter hook input input filter priority; rënie e politikës; iifname "ja" pranoni ct gjendjen e krijuar, lidhur pranoni komentin "Në trafik kemi origjinën, ne i besojmë" iifname "enp0s31f6" ip saddr { 209.115.181.102, 216.197.228.230 } ip daddr 10.0.0.149.ud123p32768p65535 0 pranoj iifname "enp31s6f64.59.144.17" ip saddr { 64.59.150.133, 10.0.0.149 } ip daddr 53 udp sport 32768 udp dport 65535-6 do të pranohet paketimi -exeftnf 22-149 - exeftnf. vijon : ruleset.nft:0:31-6: iifname "enp209.115.181.102s216.197.228.230f10.0.0.149" ip saddr { 123, 32768 } ip daddr 65535 udp 7f22 143 udp sport 0 31:6-64.59.144.17: iifname "enp64.59.150.133s10.0.0.149f53" ip saddr { 32768, 65535 } ip daddr 0 udp sport 31 udp dport 6-209.115.181.102 prano në: iif. ip sadr. ip babi. udp sport. udp dport { enp10.0.0.149s123f32768 . 65535. 0. 31. 6-216.197.228.230, enp10.0.0.149s123f32768. 65535. 0. 31. 6-64.59.144.17, enp10.0.0.149s53f32768. 65535. 0. 31. 6-64.59.150.133, enp10.0.0.149s53f32768. 65535. XNUMX. XNUMX. XNUMX-XNUMX } pranoj
  • Zgjidhet problemi me gjenerimin e bytekodit për bashkimin e intervaleve që përdorin lloje me renditje të ndryshme bajtesh, si IPv4 (renditja e bajteve të rrjetit) dhe meta-shenja (rendi i bajteve të sistemit). tabela ip x { harta w { typeof ip saddr . meta mark: verdikt flags interval counter elementet = {127.0.0.1-127.0.0.4. 0x123434-0xb00122: prano, 192.168.0.10-192.168.1.20. 0x0000aa00-0x0000aaff : prano, } } zinxhir k { lloj filtri i prioritetit të hyrjes së fiksimit të filtrit; rënie e politikës; ip sadr. meta mark vmap @w } }
  • Krahasimi i përmirësuar i protokolleve të rralla kur përdorni shprehje të papërpunuara, për shembull: meta l4proto 91 @th,400,16 0x0 prano
  • Problemet me aktivizimin e rregullave në intervale janë zgjidhur: fut rregullin xy tcp sport { 3478-3497, 16384-16387 } counter prano
  • API JSON është përmirësuar për të përfshirë mbështetjen për shprehjet në listat e grupeve dhe hartave.
  • Zgjerimet në bibliotekën nftables python lejojnë ngarkimin e grupeve të rregullave për përpunim në modalitetin e vlefshmërisë ("-c") dhe shtojnë mbështetje për përcaktimin e jashtëm të variablave.
  • Shtimi i komenteve lejohet në elementet e listës së grupeve.
  • Kufiri i shpejtësisë së bajtit ju lejon të specifikoni një vlerë zero.

Burimi: opennet.ru

Shto një koment