nftables paketni filter 1.0.3 izdanje

Objavljeno je izdanje paketnog filtera nftables 1.0.3 koje objedinjuje interfejse za filtriranje paketa za IPv4, IPv6, ARP i mrežne mostove (s ciljem zamjene iptables, ip6table, arptables i ebtables). Promjene potrebne da bi nftables 1.0.3 izdanje funkcioniralo uključene su u Linux 5.18 kernel.

Paket nftables uključuje komponente filtera paketa koje se pokreću u korisničkom prostoru, dok nivo kernela obezbjeđuje nf_tables podsistem, koji je dio Linux kernela od izdanja 3.13. Na nivou kernela, obezbeđen je samo generički interfejs nezavisan od protokola koji obezbeđuje osnovne funkcije za izdvajanje podataka iz paketa, izvođenje operacija nad podacima i kontrolu toka.

Sama pravila filtriranja i rukovaoci specifični za protokol se kompajliraju u bajt-kod korisničkog prostora, nakon čega se ovaj bajt kod učitava u kernel pomoću Netlink interfejsa i izvršava u kernelu u posebnoj virtuelnoj mašini koja liči na BPF (Berkeley paketni filteri). Ovaj pristup omogućava značajno smanjenje veličine koda za filtriranje koji radi na nivou kernela i premještanje svih funkcija raščlanjivanja pravila i logike rada s protokolima u korisnički prostor.

Glavne inovacije:

  • Set-liste sada podržavaju podudaranje imena mrežnog interfejsa pomoću maske, na primjer, specificiranih pomoću znaka "*": tablica inet testifsets { set simple_wild { type ifname flags interval elements = { "abcdef*", "othername", "ppp0" } } lanac v4icmp { tip filter kuka prioritet unosa 0; prihvatiti politiku; iifname @simple_wild brojač paketa 0 bajtova 0 iifname { "abcdef*", "eth0" } brojač paketa 0 bajtova 0 } }
  • Implementirano automatsko spajanje elemenata set-liste koji se ukrštaju tokom rada. Ranije, prilikom postavljanja opcije „auto-merge“, spajanje se vršilo u fazi deklarisanja pravila, ali sada radi i pri postepenom dodavanju novih elemenata u procesu. Na primjer, u koraku deklaracije, lista je postavljena y { flags 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 , 1.2.3.0 } } će postati elementi = { 24/3.3.3.3, 3.3.3.5-4.4.4.4, 4.4.4.8-1.2.3.0 } i onda ako dodate nove elemente # nft dodajte element ip xy { 1.2.4.255 -3.3.3.6, 1.2.3.0 } postaje elementi = { 1.2.4.255-3.3.3.3, 3.3.3.6-4.4.4.4, 4.4.4.8-XNUMX }

    Kada uklonite pojedinačne stavke sa liste koje spadaju u postojeće rangirane stavke, raspon se smanjuje ili dijeli.

  • Dodata podrška za kombinovanje pravila prevođenja višestrukih adresa (NAT) u listu mapa u optimizatoru pravila koji se poziva kada se specificira opcija "-o/--optimize". Na primjer, za skup # cat ruleset.nft tablicu 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 } }

    izvršavanje "nft -o -c -f ruleset.nft" će konvertovati posebna pravila "ip saddr" u listu mapa: snat u ip saddr . tcp dport map { 1.1.1.1 . 8000 : 4.4.4.4 . 80, 2.2.2.2. 8001:5.5.5.5. 90}

    Slično, sirovi izrazi se također mogu konvertirati u liste mapa: # cat ruleset.nft tablica ip x { […] lanac nat_dns_acme { udp dužina 47-63 @th,160,128 0x0e373135363130333131303735353203d @ gotoo nat_cd ,62 78x160,128e0e goto nat_dns_this_0 udp dužina 31393032383939353831343037320-5301 @th,62 78x160,128e0e prešao na nat_dns_saturn_0 udp dužina 31363436323733373931323934300-5301 @th,62 @78 160,128e idi nat_dns_saturn_0 udp dužina 0-32393535373539353636383732310 @th,5302 62x78e160,128e goto nat_dns_dns_0}

    nakon optimizacije, dobijamo map-listu: 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 : pređi na nat_dns_saturn_5303 }

  • Dozvoljena je upotreba sirovih izraza u operacijama spajanja. Na primjer: # nft dodaj pravilo xy ip saddr . @ih,32,32 { 1.1.1.1 . 0x14, 2.2.2.2 . 0x1e } ili tabela x { set y { typeof ip saddr. @ih,32,32 elementi = { 1.1.1.1 . 0x14 } } }
  • Dodata podrška za specificiranje cjelobrojnih polja zaglavlja u operacijama konkatenacije: tablica inet t { map m1 { typeof udp length . @ih,32,32 : zastavice presude elementi intervala = { 20-80 . 0x14 : prihvatiti, 1-10 . 0xa : ispusti } } lanac c { tip filter kuka prioritet unosa 0; pad politike; udp dužina. @ih,32,32 vmap @m1 } }
  • Dodata podrška za resetiranje TCP opcija (radi samo sa Linux kernelom 5.18+): tcp flags syn reset tcp opcija sack-perm
  • Brže izvršavanje lančanih izlaznih komandi ("nft list chain xy").

izvor: opennet.ru

Dodajte komentar