lansarea filtrului de pachete nftables 1.0.0

A fost publicată lansarea filtrului de pachete nftables 1.0.0, unificând interfețele de filtrare a pachetelor pentru IPv4, IPv6, ARP și punți de rețea (care vizează înlocuirea iptables, ip6table, arptables și ebtables). Modificările necesare pentru ca ediția nftables 1.0.0 să funcționeze sunt incluse în nucleul Linux 5.13. O modificare semnificativă a numărului versiunii nu este asociată cu nicio modificare fundamentală, ci este doar o consecință a continuării consecvente a numerotării în notație zecimală (versiunea anterioară a fost 0.9.9).

Pachetul nftables include componente de filtru de pachete care rulează în spațiul utilizatorului, în timp ce munca la nivel de kernel este asigurată de subsistemul nf_tables, care a făcut parte din nucleul Linux încă de la lansarea 3.13. Nivelul nucleului oferă doar o interfață generică independentă de protocol, care oferă funcții de bază pentru extragerea datelor din pachete, efectuarea operațiunilor de date și controlul fluxului.

Regulile de filtrare în sine și handlerele specifice protocolului sunt compilate în bytecode din spațiul utilizatorului, după care acest bytecode este încărcat în nucleu folosind interfața Netlink și executat în kernel într-o mașină virtuală specială asemănătoare BPF (Berkeley Packet Filters). Această abordare face posibilă reducerea semnificativă a dimensiunii codului de filtrare care rulează la nivel de kernel și mutarea tuturor funcțiilor de parsare a regulilor și a logicii de lucru cu protocoale în spațiul utilizatorului.

Principalele inovații:

  • Suportul pentru elementul masca „*” a fost adăugat la listele de set, care este declanșat pentru orice pachete care nu se încadrează în alte elemente definite în set. 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; acceptarea politicii; ip saddr vmap @blocklist } }
  • Este posibil să definiți variabile din linia de comandă folosind opțiunea „--define”. # cat test.nft table netdev x { chain y { tip filter hook ingress devices = $dev prioritate 0; scăderea politicii; } } # nft —define dev="{ eth0, eth1 }" -f test.nft
  • În listele de hărți, este permisă utilizarea expresiilor constante (stateful): tabel inet filter { map portmap { tip inet_service : elemente contor verdict = { 22 pachete de contor 0 octeți 0 : salt ssh_input, * pachete contor 0 octeți 0 : drop } } lanț ssh_input { } lanț wan_input { tcp dport vmap @portmap } lanț prerouting { tip filter hook prerouting prioritate brută; acceptarea politicii; iif vmap { "lo": săriți wan_input } } }
  • S-a adăugat comanda „list hooks” pentru a afișa o listă de gestionari pentru o anumită familie de pachete: # 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] } cârlig înainte { -0000000225 selinux_ipv4_forward 0000000000 chain ip ac [nf_tables] -0000000225 de hooklin. pune } hook postrouting { +4 0000000225 selinux_ipv4_postroute } }
  • Blocurile de cozi permit combinarea expresiilor jhash, symhash și numgen pentru a distribui pachete în cozile din spațiul utilizatorului. … coada la modul symhash 65536 … steagurile coadă ocolesc la numgen inc mod 65536 … coada la jhash oif . meta mark mod 32 "coadă" poate fi, de asemenea, combinat cu liste de hărți pentru a selecta o coadă în spațiul utilizatorului pe baza tastelor arbitrare. ... steagurile de coadă trec la harta numelui oif { "eth0" : 0, "ppp0" : 2, "eth1" : 2 }
  • Este posibil să extindeți variabilele care includ o listă de set în mai multe hărți. define interfețe = { eth0, eth1 } table ip x { chain y { tip filter hook priority input 0; acceptarea politicii; iifname vmap { lo : accept, $interfețe : drop } } } # nft -f x.nft # nft list ruleset table ip x { chain y { type filter hook priority input 0; acceptarea politicii; iifname vmap { "lo": accept, "eth0": drop, "eth1": drop } } }
  • Este permisă combinarea vmap-urilor (verdict map) la intervale: # nft add rule xy tcp dport . ip saddr vmap { 1025-65535 . 192.168.10.2 : accept }
  • Sintaxă simplificată pentru mapările NAT. Permis de a specifica intervale de adrese: ... snat to ip saddr map { 10.141.11.4 : 192.168.2.2-192.168.2.4 } sau adrese și porturi IP explicite: ... dnat to ip saddr map { 10.141.11.4 : 192.168.2.3 . 80 } sau combinații de intervale IP și porturi: ... dnat to ip saddr . tcp dport map { 192.168.1.2 . 80: 10.141.10.2-10.141.10.5. 8888-8999 }

Sursa: opennet.ru

Adauga un comentariu