Vydanie paketového filtra nftables 1.0.0

Bolo zverejnené vydanie paketového filtra nftables 1.0.0, ktoré zjednocuje rozhrania na filtrovanie paketov pre IPv4, IPv6, ARP a sieťové mosty (zamerané na nahradenie iptables, ip6table, arptables a ebtables). Zmeny potrebné na fungovanie vydania nftables 1.0.0 sú zahrnuté v jadre Linuxu 5.13. Výrazná zmena čísla verzie nie je spojená so žiadnymi zásadnými zmenami, ale je len dôsledkom dôsledného pokračovania číslovania v desiatkovom zápise (predchádzajúca verzia bola 0.9.9).

Balík nftables obsahuje komponenty paketového filtra, ktoré bežia v užívateľskom priestore, zatiaľ čo prácu na úrovni jadra zabezpečuje subsystém nf_tables, ktorý je súčasťou linuxového jadra od vydania 3.13. Úroveň jadra poskytuje iba všeobecné rozhranie nezávislé od protokolu, ktoré poskytuje základné funkcie na extrahovanie údajov z paketov, vykonávanie operácií s údajmi a riadenie toku.

Samotné filtrovacie pravidlá a obslužné programy špecifické pre daný protokol sú skompilované do bajtkódu používateľského priestoru, po ktorom sa tento bajtkód načíta do jadra pomocou rozhrania Netlink a spustí sa v jadre v špeciálnom virtuálnom stroji pripomínajúcom BPF (Berkeley Packet Filters). Tento prístup umožňuje výrazne zmenšiť veľkosť filtrovacieho kódu spusteného na úrovni jadra a presunúť všetky funkcie pravidiel parsovania a logiku práce s protokolmi do užívateľského priestoru.

Hlavné inovácie:

  • Do zoznamov sád bola pridaná podpora pre prvok masky „*“, ktorý sa spúšťa pre všetky balíčky, ktoré nespadajú pod iné prvky definované v sade. tabuľka x { map blocklist { type ipv4_addr : verdikt flags interval elements = { 192.168.0.0/16 : accept, 10.0.0.0/8 : accept, * : drop } } chain y { type filter hook prerouting priorita 0; prijať politiku; ip saddr vmap @blocklist } }
  • Premenné je možné definovať z príkazového riadku pomocou voľby „--define“. # cat test.nft tabuľka netdev x { chain y { type filter hook ingress devices = $dev priorita 0; pokles politiky; } } # nft —define dev="{ eth0, eth1 }" -f test.nft
  • V zoznamoch máp je povolené používanie konštantných (stavových) výrazov: tabuľka inet filter { map portmap { type inet_service : prvky počítadla verdiktu = { 22 paketov počítadla 0 bajtov 0 : skok ssh_input, * pakety počítadla 0 bajtov 0 : pokles } } chain ssh_input { } chain wan_input { tcp dport vmap @portmap } chain prerouting { type filter hook prerouting priority raw; prijať politiku; iif vmap { "lo" : skok wan_input } } }
  • Pridaný príkaz „list hooks“ na zobrazenie zoznamu handlerov pre danú rodinu paketov: # nft list hooks ip device eth0 family ip { hook ingress { +0000000010 chain netdev xy [nf_tables] +0000000300 chain inet mw [nf_tables] } input { -0000000100 reťazová ip ab [nf_tables] +0000000300 reťazec inet mz [nf_tables] } hák dopredu { -0000000225 selinux_ipv4_forward 0000000000 reťazec ip ac] 0000000225x 4 výstupy nf_0000000225 tabuľky _output } hook postroute { +4 XNUMX selinux_ipvXNUMX_postroute } }
  • Bloky frontu umožňujú kombinovať výrazy jhash, symhash a numgen na distribúciu paketov do frontov v užívateľskom priestore. … front do symhash mod 65536 … front flags bypass to numgen inc mod 65536 … front to jhash oif . meta mark mod 32 "front" možno tiež kombinovať so zoznamami máp na výber frontu v užívateľskom priestore na základe ľubovoľných kľúčov. ... queue flags bypass to oifname map { "eth0" : 0, "ppp0" : 2, "eth1" : 2 }
  • Premenné, ktoré obsahujú zoznam množín, je možné rozšíriť do niekoľkých máp. definovať rozhrania = { eth0, eth1 } tabuľka ip x { reťazec y { typ filter hook input priority 0; prijať politiku; iifname vmap { lo : accept, $interfaces : drop } } } # nft -f x.nft # nft list tableset rules ip x { chain y { type filter hook input priority 0; prijať politiku; iifname vmap { "lo" : prijatie, "eth0" : pokles, "eth1" : pokles } } }
  • Kombinovanie vmaps (mapa verdiktov) v intervaloch je povolené: # nft add rule xy tcp dport . ip saddr vmap { 1025-65535 . 192.168.10.2 : prijať }
  • Zjednodušená syntax pre NAT mapovania. Povolené špecifikovať rozsahy adries: ... snat to ip saddr map { 10.141.11.4 : 192.168.2.2-192.168.2.4 } alebo explicitné adresy IP a porty: ... dnat to ip saddr map { 10.141.11.4 : 192.168.2.3 . 80 } alebo kombinácie rozsahov IP a portov: ... dnat na ip saddr . tcp dport mapa { 192.168.1.2 . 80: 10.141.10.2-10.141.10.5. 8888-8999 }

Zdroj: opennet.ru

Pridať komentár