lansarea filtrului de pachete nftables 1.0.6

A fost publicată lansarea filtrului de pachete nftables 1.0.6, 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). 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 modificări:

  • Optimizatorul de reguli, numit atunci când este specificată opțiunea „-o/—optimize”, are împachetare automată a regulilor, combinându-le și transformându-le în hărți și liste de setări. De exemplu, regulile # cat ruleset.nft table ip x { chain y { tip filter hook input priority filter; scăderea politicii; meta iifname eth1 ip saddr 1.1.1.1 ip daddr 2.2.2.3 accept meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.2.4 accept meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.3.0 eth 24 meta iifname 1/1.1.1.2 eth saddr .2.2.4.0 ip daddr 2.2.4.10-2 accept meta iifname eth1.1.1.3 ip saddr 2.2.2.5 ip daddr 4 accept } } după executarea „nft -o -c -f ruleset.nft” va fi convertit în următorul set de reguli: .nft:17:74-1: meta iifname eth1.1.1.1 ip saddr 2.2.2.3 ip daddr 5 accept ruleset.nft:17:74-1: meta iifname eth1.1.1.2 ip saddr 2.2.2.4 ip daddr 6 accept ruleset.nft : 17:77-1: meta iifname eth1.1.1.2 ip saddr 2.2.3.0 ip daddr 24/7 accept ruleset.nft:17:83-1: meta iifname eth1.1.1.2 ip saddr 2.2.4.0 ip daddr 2.2.4.10-8. accept ruleset.nft:17:74-2: meta iifname eth1.1.1.3 ip saddr 2.2.2.5 ip daddr 1 accept into: iifname . ip saddr. ip daddr { eth1.1.1.1 . 2.2.2.3. 1, et1.1.1.2. 2.2.2.4. 1, et1.1.1.2. 2.2.3.0. 24/1, et1.1.1.2 . 2.2.4.0. 2.2.4.10-2, et1.1.1.3. 2.2.2.5. XNUMX } accept
  • Optimizatorul poate, de asemenea, converti regulile care folosesc deja liste simple de setări într-o formă mai compactă, de exemplu regulile: # cat ruleset.nft table ip filter { chain input { type filter hook input filter priority; scăderea politicii; iifname „lo” acceptă starea ct stabilită, conexă acceptă comentariul „În trafic avem încredere, avem încredere” iifname „enp0s31f6” ip saddr { 209.115.181.102, 216.197.228.230 } ip daddr 10.0.0.149 sport 123 ud32768 d65535 accept 0 ud31 iifname "enp6s64.59.144.17f64.59.150.133" ip saddr { 10.0.0.149, 53 } ip daddr 32768 udp sport 65535 udp dport 6-22 accept } } } după executarea pachetului ca urmare a regulilor "nft" -f urmați. : ruleset.nft:149:0-31: iifname "enp6s209.115.181.102f216.197.228.230" ip saddr { 10.0.0.149, 123 } ip daddr 32768 udp sport 65535 udp sport 7 udp:-22 dport: 143 udp dport 0 : iifname "enp31s6f64.59.144.17" ip saddr { 64.59.150.133, 10.0.0.149 } ip daddr 53 udp sport 32768 udp dport 65535-0 accept into: iifname . ip saddr. ip daddr. sport udp. udp dport { enp31s6f209.115.181.102 . 10.0.0.149. 123. 32768. 65535-0, enp31s6f216.197.228.230. 10.0.0.149. 123. 32768. 65535-0, enp31s6f64.59.144.17. 10.0.0.149. 53. 32768. 65535-0, enp31s6f64.59.150.133. 10.0.0.149. 53. 32768. 65535-XNUMX } accept
  • S-a rezolvat problema cu generarea de bytecode pentru îmbinarea intervalelor care utilizează tipuri cu o ordine diferită a octetilor, cum ar fi IPv4 (ordinea octeților de rețea) și marcajul meta (ordinea octeților de sistem). table ip x { map w { typeof ip saddr . meta mark: verdictul semnalează elemente de contor interval = {127.0.0.1-127.0.0.4. 0x123434-0xb00122 : accept, 192.168.0.10-192.168.1.20 . 0x0000aa00-0x0000aaff : accept, } } chain k { tip filter hook input priority filter; scăderea politicii; ip saddr. meta mark vmap @w } }
  • Comparație îmbunătățită a protocoalelor rare atunci când se utilizează expresii brute, de exemplu: meta l4proto 91 @th,400,16 0x0 accept
  • Problemele legate de activarea regulilor la intervale au fost rezolvate: inserați regula xy tcp sport { 3478-3497, 16384-16387 } counter accept
  • API-ul JSON a fost îmbunătățit pentru a include suport pentru expresii în listele de set și hărți.
  • Extensiile la biblioteca nftables python permit încărcarea seturilor de reguli pentru procesare în modul de validare ("-c") și adaugă suport pentru definirea externă a variabilelor.
  • Adăugarea de comentarii este permisă în elementele listei de setări.
  • Byte ratelimit permite specificarea unei valori zero.

Sursa: opennet.ru

Adauga un comentariu