nftables packet filter versione 1.0.3

A liberazione di filtru di pacchetti nftables 1.0.3 hè stata publicata, unificatu l'interfacce di filtrazione di pacchetti per IPv4, IPv6, ARP è ponti di rete (destinata à rimpiazzà iptables, ip6table, arptables è ebtables). I cambiamenti necessarii per a liberazione di nftables 1.0.3 per u travagliu sò inclusi in u kernel Linux 5.18.

U pacchettu nftables include cumpunenti di filtru di pacchettu chì funzionanu in u spaziu di l'utilizatori, mentre chì u livellu di u kernel hè furnitu da u subsistema nf_tables, chì hè stata parti di u kernel Linux da a versione 3.13. À u livellu di u kernel, hè furnita solu una interfaccia generica indipendente da u protokollu chì furnisce e funzioni basiche per l'estrazione di dati da i pacchetti, a realizazione di operazioni nantu à e dati è u cuntrollu di u flussu.

I reguli di filtrazione stessi è i gestori specifichi di u protocolu sò compilati in u bytecode di u spaziu di l'utilizatori, dopu chì stu bytecode hè caricatu in u kernel utilizendu l'interfaccia Netlink è eseguitu in u kernel in una macchina virtuale speciale chì s'assumiglia à BPF (Berkeley Packet Filters). Stu approcciu permette di riduce significativamente a dimensione di u codice di filtrazione chì corre à u livellu di u kernel è move tutte e funzioni di e regule di analisi è a logica di travaglià cù protokolli in u spaziu di l'utilizatori.

Innuvazioni principali:

  • Set-lists supportanu avà i nomi di l'interfaccia di a rete chì currispondenu cù una maschera, per esempiu, specificatu cù u caratteru "*": table inet testifsets { set simple_wild { type ifname flags interval elements = { "abcdef*", "othername", "ppp0" } } chain v4icmp { tippu filtru hook input priorità 0; accetta a pulitica; iifname @simple_wild contatore pacchetti 0 byte 0 iifname { "abcdef*", "eth0" } contatore pacchetti 0 byte 0 } }
  • Implementazione di l'unione automatica di elementi di lista di set-list intersecting durante l'operazione. Prima, quandu si stabilisce l'opzione "auto-fusione", a fusione hè stata realizata in u stadiu di dichjarà e regule, ma avà funziona ancu quandu aghjunghjenu elementi novi in ​​u prucessu. Per esempiu, in u passu di dichjarazione, a lista hè stabilita 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 } } diventeranu elementi = { 24/3.3.3.3, 3.3.3.5-4.4.4.4, 4.4.4.8-1.2.3.0 } è dopu si aghjunghjenu novi elementi # nft add element ip xy { 1.2.4.255 -3.3.3.6, 1.2.3.0 } diventa elementi = { 1.2.4.255-3.3.3.3, 3.3.3.6-4.4.4.4, 4.4.4.8-XNUMX }

    Quandu sguassate l'articuli individuali da a lista chì entranu in l'articuli esistenti, a gamma hè ridutta o divisa.

  • Aghjunghje supportu per cumminà e regule di traduzzione di indirizzi multipli (NAT) in una lista di carte in l'ottimisatore di regule chjamatu quandu specifica l'opzione "-o/--optimize". Per esempiu, per u set # cat ruleset.nft table ip x {chain y { type nat hook postrouting priorità srcnat; caduta di pulitica; ip saddr 1.1.1.1 tcp dport 8000 snat à 4.4.4.4:80 ip saddr 2.2.2.2 tcp dport 8001 snat à 5.5.5.5:90 } }

    l'esecuzione di "nft -o -c -f ruleset.nft" cunvertisce e regule separate "ip saddr" in una lista di carte: snat to 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}

    In listessu modu, l'espressioni crude ponu ancu esse cunvertite in listi di carte: # cat ruleset.nft table ip x { […] chain nat_dns_acme { udp length 47-63 @th,160,128 0x0e373135363130333131303735353203 th,62 78x160,128e0e vai à nat_dns_this_0 lunghezza udp 31393032383939353831343037320-5301 @th,62 78x160,128e0e goto nat_dns_saturn_0 lunghezza udp 31363436323733373931323934300-5301, @ 62-78, 160,128e 0 0e goto nat_dns_saturn_32393535373539353636383732310 udp length 5302-62 @th,78 160,128x0e0e goto 38353439353637323038363633390_saturn_dn 5303} na

    dopu l'ottimisazione, avemu una lista di carte: udp length . @th,160,128 vmap { 47-63 . 0x0e373135363130333131303735353203 : vai à nat_dns_dnstc, 62-78 . 0x0e31393032383939353831343037320e : vai à nat_dns_this_5301, 62-78 . 0x0e31363436323733373931323934300e : vai à nat_dns_saturn_5301, 62-78 . 0x0e32393535373539353636383732310e : vai à nat_dns_saturn_5302, 62-78 . 0x0e38353439353637323038363633390e : vai à nat_dns_saturn_5303 }

  • L'usu di espressioni crudi in operazioni di concatenazione hè permessu. Per esempiu: # nft add rule xy ip saddr . @ih,32,32 { 1.1.1.1 . 0x14, 2.2.2.2. 0x1e } o table x {set y {typeof ip saddr. @ih,32,32 elementi = { 1.1.1.1 . 0x14 } } }
  • Aghjunghje supportu per specificà campi integer header in operazioni di concatenazione: table inet t { map m1 { typeof udp length . @ih,32,32 : verdict flags interval elements = { 20-80 . 0x14 : accettà, 1-10 . 0xa : goccia } } catena c { tippu filtru ganciu priorità di input 0; caduta di pulitica; lunghezza udp. @ih,32,32 vmap @m1 } }
  • Supportu aghjuntu per resetting opzioni TCP (funziona solu cù u kernel Linux 5.18+): tcp flags syn reset tcp option sack-perm
  • Esecuzione più veloce di cumandamenti di output di a catena ("nft list chain xy").

Source: opennet.ru

Add a comment