nftables pakketfilter 1.0.0 release

De frijlitting fan pakketfilter nftables 1.0.0 is publisearre, it ferienigjen fan pakketfiltering-ynterfaces foar IPv4, IPv6, ARP en netwurkbrêgen (rjochte op it ferfangen fan iptables, ip6table, arptables en ebtables). De wizigingen dy't nedich binne foar de nftables 1.0.0-release om te wurkjen binne opnommen yn 'e Linux 5.13-kernel. In wichtige feroaring yn it ferzjenûmer is net ferbûn mei alle fûnemintele feroarings, mar is allinich in gefolch fan 'e konsekwinte fuortsetting fan nûmering yn desimale notaasje (de foarige útjefte wie 0.9.9).

It nftables-pakket omfettet pakketfilterkomponinten dy't yn brûkersromte rinne, wylst it kernelnivo wurdt fersoarge troch it nf_tables-subsysteem, dat sûnt release 3.13 diel is fan 'e Linux-kernel. Op it kernelnivo wurdt allinich in generike protokol-ûnôfhinklike ynterface levere dy't basisfunksjes leveret foar it ekstrahearjen fan gegevens út pakketten, it útfieren fan operaasjes op gegevens en it kontrolearjen fan stream.

De filterregels sels en protokol-spesifike handlers wurde kompilearre yn bytekoade foar brûkersromte, wêrnei't dizze bytekoade yn 'e kearn laden wurdt mei de Netlink-ynterface en útfierd yn' e kearn yn in spesjale firtuele masine dy't liket op BPF (Berkeley Packet Filters). Dizze oanpak makket it mooglik om de grutte fan 'e filterkoade dy't op it kernelnivo rint signifikant te ferminderjen en alle funksjes fan parsingregels en de logika fan wurkjen mei protokollen yn brûkersromte te ferpleatsen.

Wichtichste ynnovaasjes:

  • Stipe foar it maskerelemint "*" is tafoege oan setlisten, dy't wurdt aktivearre foar alle pakketten dy't net falle ûnder oare eleminten definieare yn 'e set. tabel x {map blocklist {type ipv4_addr: oardiel flaggen ynterval eleminten = {192.168.0.0/16: akseptearje, 10.0.0.0/8: akseptearje, *: drop}} ketting y {type filter hook prerouting prioriteit 0; belied akseptearje; ip saddr vmap @blocklist } }
  • It is mooglik om fariabelen te definiearjen fanút de kommandorigel mei de opsje "--define". # cat test.nft tabel netdev x {keten y {type filter hook ingress apparaten = $ dev prioriteit 0; belied drop; } } # nft —define dev="{ eth0, eth1 }" -f test.nft
  • Yn kaartlisten is it gebrûk fan konstante (stateful) útdrukkingen tastien: tabel inet filter { map portmap { type inet_service : verdict counter eleminten = { 22 tellerpakketten 0 bytes 0 : jump ssh_input, * tellerpakketten 0 bytes 0 : drop } } chain ssh_input {} chain wan_input {tcp dport vmap @portmap} chain prerouting {type filter hook prerouting prioriteit rau; belied akseptearje; iif vmap {"lo": jump wan_input }}}
  • Tafoege "list haken" kommando om in list mei handlers foar in opjûne pakket famylje werjaan: # nft list haken ip apparaat eth0 famylje ip { hook ingress { +0000000010 chain netdev xy [nf_tables] +0000000300 ketting inet mw [nf_hook tabellen] } { -0000000100 keten ip ab [nf_tables] +0000000300 ketting inet mz [nf_tables] } heak foarút { -0000000225 selinux_ipv4_forward 0000000000 keten inet mz [nf_tables] } heak foarút { -0000000225 selinux_ipv4_forward 0000000225 chain inet mz {nf_tables] ipv4_output } hook postrouting { +XNUMX XNUMX selinux_ipvXNUMX_postroute } }
  • Wachtrige blokken kinne jhash, symhash, en numgen ekspresjes wurde kombinearre om pakketten te fersprieden nei wachtrijen yn brûkersromte. … wachtrige nei symhash mod 65536 … wachtrige flaggen omgean nei numgen inc mod 65536 … wachtrige nei jhash oif . meta mark mod 32 "wachtrige" kin ek wurde kombinearre mei map listen foar in selektearje in wachtrige yn brûkersromte basearre op willekeurige kaaien. ... wachtrige flaggen omgean nei oifname map { "eth0": 0, "ppp0": 2, "eth1": 2}
  • It is mooglik om fariabelen út te wreidzjen dy't in setlist befetsje yn ferskate kaarten. definiearje ynterfaces = {eth0, eth1} tabel ip x {keten y {type filter hook ynfier prioriteit 0; belied akseptearje; iifname vmap {lo: akseptearje, $interfaces: drop}}} # nft -f x.nft # nft list regelset tabel ip x {keten y {type filter haak ynfier prioriteit 0; belied akseptearje; iifname vmap { "lo": akseptearje, "eth0": drop, "eth1": drop } } }
  • It kombinearjen fan vmaps (ferdict map) mei yntervallen is tastien: # nft add regel xy tcp dport . ip saddr vmap {1025-65535. 192.168.10.2 : akseptearje }
  • Ienfâldige syntaksis foar NAT mappings. Tastimming om adresberiken op te jaan: ... snat nei ip saddr map { 10.141.11.4 : 192.168.2.2-192.168.2.4 } of eksplisite IP-adressen en poarten: ... dnat nei ip saddr map { 10.141.11.4. . 192.168.2.3 } of kombinaasjes fan IP-beriken en havens: ... dnat nei ip saddr . tcp dport map {80. 192.168.1.2: 80-10.141.10.2. 10.141.10.5-8888 }

Boarne: opennet.ru

Add a comment