Izdanje filtra paketa nftables 1.0.3

Objavljeno je izdanje filtera paketa nftables 1.0.3, koje objedinjuje sučelja za filtriranje paketa za IPv4, IPv6, ARP i mrežne mostove (s ciljem zamjene iptables, ip6table, arptables i ebtables). Promjene potrebne za rad izdanja nftables 1.0.3 uključene su u jezgru Linuxa 5.18.

Paket nftables uključuje komponente filtera paketa koje se izvode u korisničkom prostoru, dok rad na razini kernela osigurava podsustav nf_tables, koji je dio Linux kernela od izdanja 3.13. Razina kernela pruža samo generičko sučelje neovisno o protokolu koje pruža osnovne funkcije za izdvajanje podataka iz paketa, izvođenje podatkovnih operacija i kontrolu toka.

Pravila filtriranja i rukovatelji specifični za protokol kompajliraju se u bajt kod u korisničkom prostoru, nakon čega se ovaj bajt kod učitava u kernel pomoću Netlink sučelja i izvršava u kernelu u posebnom virtualnom stroju koji podsjeća na BPF (Berkeley Packet Filters). Ovaj pristup vam omogućuje da značajno smanjite veličinu koda za filtriranje koji se izvodi na razini jezgre i premjestite sve funkcije pravila parsiranja i logike za rad s protokolima u korisnički prostor.

Glavne inovacije:

  • Popisi skupova sada podržavaju podudaranje naziva mrežnih sučelja pomoću maske, na primjer, specificirane pomoću simbola “*”: table inet testifsets { set simple_wild { type ifname flags interval elements = { “abcdef*”, “othername”, “ppp0” } } lanac v4icmp { tip filtra hook prioritet unosa 0; politika prihvatiti; iifname @simple_wild brojač paketa 0 bajtova 0 iifname { “abcdef*”, “eth0” } brojač paketa 0 bajtova 0 } }
  • Implementirano automatsko spajanje međusobno povezanih elemenata set-liste tijekom rada. Ranije, kada je bila postavljena opcija “auto-merge”, spajanje se provodilo u fazi deklariranja pravila, ali sada radi i kada se novi elementi postupno dodaju tijekom rada. Na primjer, u fazi deklaracije, popis postavlja y { zastavice interval auto-merge elements = { 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 } } će se pretvoriti u elemente = { 1.2.3.0/24, 3.3.3.3-3.3.3.5, 4.4.4.4-4.4.4.8 } i onda ako dodate nove elemente # nft dodaj element ip xy { 1.2.3.0 -1.2.4.255, 3.3.3.6 } će izgledati kao 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 }

    Kada s popisa uklonite pojedinačne stavke koje spadaju unutar postojećih stavki raspona, raspon se skraćuje ili dijeli.

  • Podrška za kombiniranje višestrukih pravila prijevoda adresa (NAT) u popis mapa dodana je alatu za optimizaciju pravila, koji se poziva kada je navedena opcija "-o/—optimize". Na primjer, za set # cat ruleset.nft table ip x { chain y { type nat hook postrouting priority srcnat; pad 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 } }

    izvođenje “nft -o -c -f ruleset.nft” će konvertirati zasebna pravila “ip saddr” u popis mapa: snat u ip saddr . tcp dport karta { 1.1.1.1. 8000: 4.4.4.4. 80, 2.2.2.2. 8001: 5.5.5.5. 90}

    Slično, neobrađeni izrazi mogu se pretvoriti u popise mapa: # 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 idi na nat_dns_this_5301 udp duljina 62-78 @th,160,128 0x0e31363436323733373931323934300e goto nat_dns_saturn_5301 udp duljina 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 } }

    nakon optimizacije dobivamo popis mapa: udp length . @th,160,128 vmap { 47-63. 0x0e373135363130333131303735353203 : idi na nat_dns_dnstc, 62-78. 0x0e31393032383939353831343037320e : idi na nat_dns_this_5301, 62-78. 0x0e31363436323733373931323934300e : idi na nat_dns_saturn_5301, 62-78. 0x0e32393535373539353636383732310e : idi na nat_dns_saturn_5302, 62-78. 0x0e38353439353637323038363633390e : idi na nat_dns_saturn_5303 }

  • Dopuštena je upotreba neobrađenih izraza u operacijama ulančavanja. Na primjer: #nft dodaj pravilo xy ip saddr. @ih,32,32 { 1.1.1.1 . 0x14, 2.2.2.2. 0x1e } ili tablica x { set y { typeof ip saddr. @ih,32,32 elementa = { 1.1.1.1. 0x14 } } }
  • Dodana podrška za određivanje polja zaglavlja cjelobrojnih brojeva u operacijama ulančavanja: table inet t { map m1 { typeof udp length . @ih,32,32 : elementi intervala oznaka presude = { 20-80 . 0x14 : prihvatiti, 1-10 . 0xa : drop } } chain c { type filter hook input priority 0; pad politike; udp duljina. @ih,32,32 vmap @m1 } }
  • Dodana podrška za resetiranje TCP opcija (radi samo s Linux kernelom 5.18+): tcp flags syn reset tcp option sack-perm
  • Ubrzano je izvršavanje naredbi lančanog izlaza (“nft list chain xy”).

Izvor: opennet.ru

Dodajte komentar