Izdaja paketnega filtra nftables 1.0.3

Objavljena je bila izdaja paketnega filtra nftables 1.0.3, 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.3, so vključene v jedro Linuxa 5.18.

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:

  • Seznami naborov zdaj podpirajo ujemanje imen omrežnih vmesnikov z masko, na primer določeno s simbolom “*”: table inet testifsets { set simple_wild { type ifname flags interval elements = { “abcdef*”, “othername”, “ppp0” } } veriga v4icmp { tip kavelj filtra prednost vnosa 0; politika sprejeti; iifname @simple_wild števec paketov 0 bajtov 0 iifname { “abcdef*”, “eth0” } števec paketov 0 bajtov 0 } }
  • Implementirano samodejno združevanje sekajočih se elementov seznama nastavitev med delovanjem. Prej, ko je bila nastavljena možnost »samodejno združevanje«, je bilo združevanje izvedeno v fazi deklariranja pravil, zdaj pa deluje tudi, ko se med delovanjem postopno dodajajo novi elementi. Na primer, na stopnji deklaracije seznam nabora y { zastavic interval samodejnega spajanja elementov = { 1.2.3.0, 1.2.3.255, 1.2.3.0/24, 3.3.3.3, 4.4.4.4, 4.4.4.4-4.4.4.8 , 3.3.3.4 , 3.3.3.5 } } bodo spremenjeni v elemente = { 1.2.3.0/24, 3.3.3.3-3.3.3.5, 4.4.4.4-4.4.4.8 } in nato, če dodate nove elemente # nft dodaj element ip xy { 1.2.3.0 -1.2.4.255, 3.3.3.6 } bo videti kot elementi = { 1.2.3.0-1.2.4.255, 3.3.3.3-3.3.3.6, 4.4.4.4-4.4.4.8 }

    Ko s seznama odstranite posamezne elemente, ki spadajo v obstoječe elemente obsega, se obseg skrajša ali razdeli.

  • Podpora za združevanje pravil prevajanja več naslovov (NAT) v seznam zemljevidov je bila dodana optimizatorju pravil, ki se kliče, ko je podana možnost »-o/—optimize«. Na primer, za set # cat ruleset.nft table ip x { chain y { type nat hook postrouting priority srcnat; padec politike; ip saddr 1.1.1.1 tcp dport 8000 snat na 4.4.4.4:80 ip saddr 2.2.2.2 tcp dport 8001 snat na 5.5.5.5:90 } }

    izvedba »nft -o -c -f ruleset.nft« bo pretvorila ločena pravila »ip saddr« v seznam zemljevidov: snat v ip saddr. tcp dport zemljevid { 1.1.1.1. 8000: 4.4.4.4. 80, 2.2.2.2. 8001: 5.5.5.5. 90}

    Podobno lahko neobdelane izraze pretvorite v sezname zemljevidov: # cat ruleset.nft table ip x { […] chain nat_dns_acme { udp length 47-63 @th,160,128 0x0e373135363130333131303735353203 goto nat_dns_dnstc udp length 62-78 @th ,160,128 0x0e31393032383939353831343037320e pojdi na nat_dns_this_5301 dolžina udp 62-78 @th,160,128 0x0e31363436323733373931323934300e goto nat_dns_saturn_5301 dolžina udp 62-78 @th,160,128 0x0e32393535373539353636383732310 5302 62e goto nat_dns_saturn_78 udp length 160,128-0 @th,0 38353439353637323038363633390x5303eXNUMXe goto nat_dns_saturn_XNUMX drop } }

    po optimizaciji dobimo seznam map: udp length . @th,160,128 vmap { 47-63. 0x0e373135363130333131303735353203 : pojdi na nat_dns_dnstc, 62-78. 0x0e31393032383939353831343037320e : pojdi na nat_dns_this_5301, 62-78. 0x0e31363436323733373931323934300e : pojdi na nat_dns_saturn_5301, 62-78. 0x0e32393535373539353636383732310e : pojdi na nat_dns_saturn_5302, 62-78. 0x0e38353439353637323038363633390e : pojdi na nat_dns_saturn_5303 }

  • Dovoljena je uporaba neobdelanih izrazov v operacijah veriženja. Na primer: #nft dodaj pravilo xy ip saddr. @ih,32,32 { 1.1.1.1. 0x14, 2.2.2.2. 0x1e } ali tabela x {set y {typeof ip saddr. @ih,32,32 elementov = { 1.1.1.1. 0x14 } } }
  • Dodana podpora za določanje polj cele glave v operacijah veriženja: table inet t { map m1 { typeof udp length . @ih,32,32 : razsodba označuje intervalne elemente = { 20-80 . 0x14: sprejeti, 1-10. 0xa : spusti } } veriga c { tip kavelj filtra prioriteta vnosa 0; padec politike; dolžina udp. @ih,32,32 vmap @m1 } }
  • Dodana podpora za ponastavitev možnosti TCP (deluje samo z jedrom Linux 5.18+): tcp flags syn reset tcp option sack-perm
  • Pospešeno je izvajanje verižnih izhodnih ukazov (»nft list chain xy«).

Vir: opennet.ru

Dodaj komentar