nftables pakešu filtra izlaišana 1.0.0

Ir publicēts pakešu filtra nftables 1.0.0 izlaidums, kas apvieno IPv4, IPv6, ARP un tīkla tiltu pakešu filtrēšanas saskarnes (kuras mērķis ir aizstāt iptables, ip6table, arptables un ebtables). Izmaiņas, kas nepieciešamas, lai nftables 1.0.0 laidiens darbotos, ir iekļautas Linux 5.13 kodolā. Būtiskas versijas numura izmaiņas nav saistītas ar būtiskām izmaiņām, bet ir tikai sekas konsekventai numerācijas turpināšanai decimāldaļās (iepriekšējā versija bija 0.9.9).

Pakotnē nftables ir iekļauti pakešu filtru komponenti, kas darbojas lietotāja telpā, savukārt kodola līmeņa darbu nodrošina apakšsistēma nf_tables, kas ir daļa no Linux kodola kopš 3.13. izlaiduma. Kodola līmenis nodrošina tikai vispārīgu no protokola neatkarīgu saskarni, kas nodrošina pamatfunkcijas datu ieguvei no paketēm, datu operāciju veikšanai un plūsmas kontrolei.

Paši filtrēšanas noteikumi un protokolam raksturīgie apstrādātāji tiek apkopoti lietotāja telpas baitkodā, pēc kura šis baitkods tiek ielādēts kodolā, izmantojot Netlink interfeisu, un tiek izpildīts kodolā īpašā virtuālajā mašīnā, kas atgādina BPF (Berkeley Packet Filters). Šī pieeja ļauj ievērojami samazināt kodola līmenī strādājošā filtrēšanas koda lielumu un pārvietot visas parsēšanas noteikumu funkcijas un darba ar protokoliem loģiku lietotāja telpā.

Galvenie jauninājumi:

  • Kopu sarakstiem ir pievienots maskas elementa “*” atbalsts, kas tiek aktivizēts visām pakotnēm, kas neietilpst citos komplektā definētos elementos. tabula x { map blocklist { type ipv4_addr : verdict flags interval elements = { 192.168.0.0/16 : akceptēt, 10.0.0.0/8 : akceptēt, * : nomest } } ķēde y { type filter hook prerouting priority 0; pieņemt politiku; ip saddr vmap @blocklist } }
  • Mainīgos ir iespējams definēt no komandrindas, izmantojot opciju “--define”. # cat test.nft tabula netdev x { ķēde y { tipa filtra āķa ieejas ierīces = $dev prioritāte 0; politikas kritums; } } # nft — define dev="{ eth0, eth1 }" -f test.nft
  • Karšu sarakstos ir atļauta konstantu (stateful) izteiksmju izmantošana: 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 } } ķēde ssh_input { } ķēde wan_input { tcp dport vmap @portmap } ķēdes priekšmaršrutēšana { type filter hook prerouting priority raw; pieņemt politiku; iif vmap { "lo" : lēkt wan_input } } }
  • Pievienota komanda "list hooks", lai parādītu dotās pakešu saimes apstrādātāju sarakstu: # nft list hooks ip device eth0 family ip { hook ingress { +0000000010 chain netdev xy [nf_tables] +0000000300 chain inet mw [nf_tables input] } hook { -0000000100 ķēde ip ab [nf_tables] +0000000300 ķēde inet mz [nf_tables] } hook forward { -0000000225 selinux_ipv4_forward 0000000000 chain ip ac {0000000225 chain ip ac {4 ķēde ip ac 0000000225_output } āķa postrouting { +4 XNUMX selinux_ipvXNUMX_postroute } }
  • Rindas bloki ļauj apvienot jhash, symhash un numgen izteiksmes, lai izplatītu paketes rindām lietotāja telpā. ... rinda uz symhash mod 65536 ... rindas karodziņi apiet numgen inc mod 65536 ... rinda uz jhash oif . meta mark mod 32 "rindu" var apvienot arī ar karšu sarakstiem, lai izvēlētos rindu lietotāja telpā, pamatojoties uz patvaļīgām atslēgām. ... rindas karodziņi apiet oifname karti { "eth0" : 0, "ppp0" : 2, "eth1" : 2}
  • Mainīgos, kas ietver kopu sarakstu, ir iespējams paplašināt vairākās kartēs. definēt saskarnes = { eth0, eth1 } tabula ip x { ķēde y { tipa filtra āķa ievades prioritāte 0; pieņemt politiku; iifname vmap { lo : accept, $interfaces : drop } } } # nft -f x.nft # nft saraksta noteikumu tabula ip x { ķēde y { tipa filtra āķa ievades prioritāte 0; pieņemt politiku; iifname vmap { "lo" : pieņemt, "eth0": nomest, "eth1": nomest } } }
  • Ir atļauta vmaps (spriedumu karte) apvienošana ar intervāliem: # nft add rule xy tcp dport . ip saddr vmap {1025-65535. 192.168.10.2 : pieņemt }
  • Vienkāršota sintakse NAT kartējumiem. Atļauts norādīt adrešu diapazonus: ... snat to ip saddr karte { 10.141.11.4 : 192.168.2.2-192.168.2.4 } vai skaidras IP adreses un porti: ... dnat uz ip saddr karte { 10.141.11.4 .192.168.2.3 .80 . . 192.168.1.2 } vai IP diapazonu un portu kombinācijas: ... dnat to ip saddr . tcp dport karte { 80 . 10.141.10.2: 10.141.10.5-8888. 8999-XNUMX }

Avots: opennet.ru

Pievieno komentāru