Izdaja paketnega filtra nftables 1.0.0

Objavljena je bila izdaja paketnega filtra nftables 1.0.0, ki poenoti vmesnike za filtriranje paketov za IPv4, IPv6, ARP in omrežne mostove (ki so namenjeni zamenjavi iptables, ip6table, arptables in ebtables). Spremembe, ki so potrebne za delovanje izdaje nftables 1.0.0, so vključene v jedro Linuxa 5.13. Bistvena sprememba številke različice ni povezana z nobenimi temeljnimi spremembami, ampak je le posledica doslednega nadaljevanja številčenja v decimalnem zapisu (prejšnja izdaja je bila 0.9.9).

Paket nftables vključuje komponente paketnega filtra, ki se izvajajo v uporabniškem prostoru, medtem ko delo na ravni jedra zagotavlja podsistem nf_tables, ki je del jedra Linuxa od izdaje 3.13. Raven jedra zagotavlja le generični vmesnik, neodvisen od protokola, ki zagotavlja osnovne funkcije za pridobivanje podatkov iz paketov, izvajanje podatkovnih operacij in nadzor pretoka.

Sama pravila filtriranja in obdelovalci, specifični za protokol, so prevedeni v bajtno kodo uporabniškega prostora, nakar se ta bajtna koda naloži v jedro z uporabo vmesnika Netlink in izvede v jedru v posebnem virtualnem stroju, ki spominja na BPF (Berkeley Packet Filters). Ta pristop omogoča znatno zmanjšanje velikosti filtrirne kode, ki se izvaja na ravni jedra, in premikanje vseh funkcij pravil razčlenjevanja in logike dela s protokoli v uporabniški prostor.

Glavne novosti:

  • Seznamom naborov je bila dodana podpora za element maske »*«, ki se sproži za vse pakete, ki ne spadajo pod druge elemente, definirane v naboru. tabela x { seznam blokiranih zemljevidov { vrsta ipv4_addr : zastavice razsodbe intervalni elementi = { 192.168.0.0/16 : sprejme, 10.0.0.0/8 : sprejme, * : spusti } } veriga y { vrsta kavelj filtra prioriteta pred usmerjanjem 0; politika sprejeti; ip saddr vmap @blocklist } }
  • Možno je definirati spremenljivke iz ukazne vrstice z uporabo možnosti “--define”. # cat test.nft table netdev x { chain y { type filter hook ingress devices = $dev priority 0; padec politike; } } # nft —define dev="{ eth0, eth1 }" -f test.nft
  • V seznamih preslikav je dovoljena uporaba stalnih (stateful) izrazov: table inet filter { map portmap { type inet_service : verdict counter elements = { 22 counter packets 0 bytes 0 : jump ssh_input, * counter packets 0 bytes 0 : drop } } veriga ssh_input { } veriga wan_input { tcp dport vmap @portmap } veriga vnaprejšnjega usmerjanja { vrsta filtra kavelj vnaprejšnjega usmerjanja prioriteta raw; politika sprejeti; iif vmap { "lo": skok wan_input } } }
  • Dodan ukaz "list hooks" za prikaz seznama obdelovalcev za dano družino paketov: # nft list hooks ip device eth0 family ip { hook ingress { +0000000010 chain netdev xy [nf_tables] +0000000300 chain inet mw [nf_tables] } hook input { -0000000100 veriga ip ab [nf_tables] +0000000300 veriga inet mz [nf_tables] } hook forward { -0000000225 selinux_ipv4_forward 0000000000 veriga ip ac [nf_tables] } hook output { -0000000225 selinux_ipv4_ izhod } hook postrouting { +0000000225 4 selinux_ipvXNUMX_postroute } }
  • Bloki čakalne vrste omogočajo kombiniranje izrazov jhash, symhash in numgen za distribucijo paketov v čakalne vrste v uporabniškem prostoru. … čakalna vrsta v symhash mod 65536 … zastavice čakalne vrste obidejo v numgen inc mod 65536 … čakalna vrsta v jhash oif. meta mark mod 32 "queue" je mogoče kombinirati tudi s seznami zemljevidov za izbiro čakalne vrste v uporabniškem prostoru na podlagi poljubnih ključev. ... zastavice čakalne vrste obidejo mapo oifname { "eth0" : 0, "ppp0" : 2, "eth1" : 2 }
  • Spremenljivke, ki vključujejo seznam naborov, je mogoče razširiti na več zemljevidov. definirajte vmesnike = { eth0, eth1 } tabela ip x { veriga y { vrsta kavelj filtra prioriteta vnosa 0; politika sprejeti; iifname vmap { lo : accept, $interfaces : drop } } } # nft -f x.nft # nft tabela nabora pravil seznama ip x { veriga y { tip filter hook prioriteta vnosa 0; politika sprejeti; iifname vmap { "lo" : sprejme, "eth0" : spusti, "eth1" : spusti } } }
  • Dovoljeno je združevanje vmaps (pregled razsodbe) v intervalih: # nft add rule xy tcp dport. ip saddr vmap {1025-65535. 192.168.10.2 : sprejmi }
  • Poenostavljena sintaksa za preslikave NAT. Dovoljeno določanje obsegov naslovov: ... snat to ip saddr map { 10.141.11.4 : 192.168.2.2-192.168.2.4 } ali izrecni IP naslovi in ​​vrata: ... dnat to ip saddr map { 10.141.11.4 : 192.168.2.3 . 80 } ali kombinacije obsegov IP in vrat: ... dnat v ip saddr . tcp dport zemljevid {192.168.1.2. 80: 10.141.10.2-10.141.10.5. 8888-8999 }

Vir: opennet.ru

Dodaj komentar