nftables packet filter versione 1.0.0

A liberazione di packet filter nftables 1.0.0 hè stata publicata, unificate interfacce di filtrazione di pacchetti per IPv4, IPv6, ARP è ponti di rete (destinata à rimpiazzà iptables, ip6table, arptables è ebtables). I cambiamenti necessarii per a liberazione nftables 1.0.0 per travaglià sò inclusi in u kernel Linux 5.13. Un cambiamentu significativu in u numeru di versione ùn hè micca assuciatu cù qualsiasi cambiamenti fundamentali, ma hè solu una cunsequenza di a continuazione coherente di a numerazione in notazione decimale (a versione precedente era 0.9.9).

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:

  • U supportu per l'elementu di maschera "*" hè statu aghjuntu à e liste di set, chì hè attivatu per qualsiasi pacchetti chì ùn sò micca sottumessi à altri elementi definiti in u settore. table x { map blocklist { type ipv4_addr : verdict flags interval elements = { 192.168.0.0/16 : accept, 10.0.0.0/8 : accept, * : drop } } chain y { type filter hook prerouting priority 0; accetta a pulitica; ip saddr vmap @blocklist } }
  • Hè pussibule di definisce variàbili da a linea di cummanda utilizendu l'opzione "--define". # cat test.nft table netdev x { chain y { type filter hook ingress devices = $ dev priurità 0; caduta di pulitica; } } # nft —define dev="{ eth0, eth1 }" -f test.nft
  • In listi di carte, l'usu di espressioni custanti (stateful) hè permessu: 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 } } chain ssh_input { } chain wan_input { tcp dport vmap @portmap } chain prerouting { type filter hook prerouting priority raw ; accetta a pulitica; iif vmap { "lo" : salta wan_input } } }
  • Aggiuntu cumandamentu "list hooks" per vede una lista di gestori per una famiglia di pacchetti data: # 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 chain ip ab [nf_tables] +0000000300 chain inet mz [nf_tables] } hook forward {-0000000225 selinux_ipv4_forward 0000000000 chain ip ac [nf_tables output] -0000000225_4] mette } hook postrouting { + 0000000225 4 selinux_ipvXNUMX_postroute } }
  • I blocchi di fila permettenu l'espressioni jhash, symhash è numgen per esse cumminati per distribuisce pacchetti à file in u spaziu di l'utilizatori. ... fila à symhash mod 65536 ... coda bandiere bypass à numgen inc mod 65536 ... fila à jhash oif . meta mark mod 32 "queue" pò ancu esse cumminati cù listi di carte per selezziunà una fila in u spaziu di l'utilizatori basatu nantu à chjavi arbitrarie. ... i bandieri di fila passanu à a mappa oifname { "eth0" : 0, "ppp0" : 2, "eth1" : 2 }
  • Hè pussibule espansione variàbili chì includenu una lista di set in parechje carte. define interfaces = { eth0, eth1 } table ip x {chain y { type filter hook input priority 0; accetta a pulitica; iifname vmap { lo : accettà, $ interfaces : drop } } } # nft -f x.nft # nft list ruleset table ip x {chain y { type filter hook input priority 0; accetta a pulitica; iifname vmap { "lo": accetta, "eth0": drop, "eth1": drop } } }
  • Cumminendu vmaps (verdict map) à intervalli hè permessu: # nft add rule xy tcp dport . ip saddr vmap {1025-65535. 192.168.10.2 : accettà }
  • Sintassi simplificata per i mappings NAT. Hè permessu di specificà intervalli di indirizzu: ... snat to ip saddr map { 10.141.11.4 : 192.168.2.2-192.168.2.4 } o indirizzi IP espliciti è porti: ... dnat to ip saddr map { 10.141.11.4 : 192.168.2.3. . 80 } o cumminazzioni di intervalli IP è porti: ... dnat to ip saddr . tcp dport map { 192.168.1.2 . 80: 10.141.10.2-10.141.10.5. 8888-8999 }

Source: opennet.ru

Add a comment