nftables paketų filtro išleidimas 1.0.0

Paskelbtas paketų filtro nftables 1.0.0 leidimas, sujungiantis IPv4, IPv6, ARP ir tinklo tiltų paketų filtravimo sąsajas (skirtas pakeisti iptables, ip6table, arptables ir ebtables). Pakeitimai, reikalingi, kad nftables 1.0.0 leidimas veiktų, yra įtraukti į Linux 5.13 branduolį. Reikšmingas versijos numerio pakeitimas nėra susijęs su jokiais esminiais pakeitimais, o yra tik nuoseklaus numeravimo dešimtainiu būdu (ankstesnė versija buvo 0.9.9) pasekmė.

Į paketą nftables yra paketų filtrų komponentai, kurie veikia vartotojo erdvėje, o branduolio lygio darbą užtikrina nf_tables posistemis, kuris yra Linux branduolio dalis nuo 3.13 leidimo. Branduolio lygis suteikia tik bendrąją nuo protokolo nepriklausomą sąsają, kuri suteikia pagrindines funkcijas duomenims iš paketų išgauti, duomenų operacijoms atlikti ir srauto valdymui.

Pačios filtravimo taisyklės ir specifiniams protokolams skirtos tvarkyklės yra sukompiliuojamos į vartotojo erdvės baitinį kodą, po kurio šis baito kodas įkeliamas į branduolį naudojant Netlink sąsają ir vykdomas branduolyje specialioje virtualioje mašinoje, primenančioje BPF (Berkeley Packet Filters). Šis metodas leidžia žymiai sumažinti branduolio lygiu veikiančio filtravimo kodo dydį ir perkelti visas analizavimo taisyklių funkcijas bei darbo su protokolais logiką į vartotojo erdvę.

Pagrindinės naujovės:

  • Prie rinkinių sąrašų pridėtas „*“ kaukės elemento palaikymas, kuris suaktyvinamas bet kokiems paketams, kurie nepatenka į kitus rinkinyje apibrėžtus elementus. 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; priimti politiką; ip saddr vmap @blocklist } }
  • Galima apibrėžti kintamuosius iš komandinės eilutės naudojant "--define" parinktį. # cat test.nft lentelė netdev x { grandinė y { tipas filtro kablio įėjimo įrenginiai = $dev prioritetas 0; politikos kritimas; } } # nft —define dev="{ eth0, eth1 }" -f test.nft
  • Žemėlapių sąrašuose leidžiama naudoti pastovias (nurodančius) išraiškas: 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 } } grandinė ssh_input { } grandinė wan_input { tcp dport vmap @portmap } grandinės išankstinis maršrutas { tipo filtras kabliukas prerouting priority raw; priimti politiką; iif vmap { "lo" : šuolis wan_input } } }
  • Pridėta komanda „list hooks“, kad būtų rodomas nurodytos paketų šeimos tvarkyklių sąrašas: # nft list kabliukai ip įrenginio eth0 šeimos ip { hook ingress { +0000000010 chain netdev xy [nf_tables] +0000000300 chain inet mw [nf_tables input] } { -0000000100 grandinės ip ab [nf_tables] +0000000300 grandinės inet mz [nf_tables] } hook forward { -0000000225 selinux_ipv4_forward 0000000000 grandinės ip ac [nf_0000000225 grandinės ip ac [nf_4 išvestis] išvestis } kablys postrouting { +0000000225 4 selinux_ipvXNUMX_postroute } }
  • Eilių blokai leidžia derinti jhash, symhash ir numgen išraiškas, kad būtų paskirstyti paketai eilėms vartotojo erdvėje. … eilė į symhash mod 65536 … eilės vėliavėlės apeiti numgen inc mod 65536 … eilė į jhash oif . meta mark mod 32 "eilė" taip pat gali būti derinama su žemėlapių sąrašais, kad būtų galima pasirinkti eilę vartotojo erdvėje pagal savavališkus raktus. ... eilės vėliavėlės apeina oifvardo žemėlapį { "eth0" : 0, "ppp0" : 2, "eth1" : 2}
  • Galima išplėsti kintamuosius, kuriuose yra rinkinių sąrašas, į kelis žemėlapius. apibrėžti sąsajas = { eth0, eth1 } lentelė ip x { grandinė y { tipo filtro kablio įvesties prioritetas 0; priimti politiką; iifname vmap { lo : accept, $interfaces : drop } } } # nft -f x.nft # nft sąrašo taisyklių lentelė ip x { grandinė y { tipo filtro kablio įvesties prioritetas 0; priimti politiką; iifname vmap { "lo" : priimti, "eth0" : drop, "eth1" : drop } } }
  • Leidžiama jungti vmaps (verdikto žemėlapį) intervalais: # nft add taisyklė xy tcp dport . ip saddr vmap { 1025-65535 . 192.168.10.2 : priimti }
  • Supaprastinta NAT susiejimo sintaksė. Leidžiama nurodyti adresų diapazonus: ... snat to ip saddr map { 10.141.11.4 : 192.168.2.2-192.168.2.4 } arba aiškius IP adresus ir prievadus: ... dnat to ip saddr map { 10.141.11.4:192.168.2.3 . . 80 } arba IP diapazonų ir prievadų deriniai: ... dnat to ip saddr . tcp dport žemėlapis { 192.168.1.2 . 80: 10.141.10.2-10.141.10.5. 8888-8999 }

Šaltinis: opennet.ru

Добавить комментарий