nftables pakešu filtra izlaišana 0.9.9

Ir publicēts pakešu filtra nftables 0.9.9 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). Tajā pašā laikā tika publicēts pavadošās bibliotēkas libnftnl 1.2.0 laidiens, kas nodrošina zema līmeņa API mijiedarbībai ar nf_tables apakšsistēmu. Izmaiņas, kas nepieciešamas, lai nftables 0.9.9 laidiens darbotos, ir iekļautas Linux kodolā 5.13-rc1.

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:

  • Ir ieviesta iespēja pārvietot plūsmas tabulas apstrādi uz tīkla adaptera pusi, iespējota, izmantojot karogu “izkraušana”. Flowtable ir mehānisms pakešu novirzīšanas ceļa optimizēšanai, kurā visu noteikumu apstrādes ķēžu pilnīga pāreja tiek piemērota tikai pirmajai paketei, bet visas pārējās plūsmas paketes tiek pārsūtītas tieši. table ip global { flowtable f { hook ingress priority filter + 1 devices = { lan3, lan0, wan } flags offload } chain forward { type filter hook forward priority filter; pieņemt politiku; ip protokols { tcp, udp } flow add @f } chain post { type nat hook postrouting priority filter; pieņemt politiku; oifname "wan" maskarāde } }
  • Pievienots atbalsts īpašnieka karoga pievienošanai tabulai, lai nodrošinātu ekskluzīvu tabulas izmantošanu procesā. Kad process beidzas, ar to saistītā tabula tiek automātiski dzēsta. Informācija par procesu tiek parādīta noteikumu dump komentāra veidā: table ip x { # progname nft flags owner chain y { type filter hook input priority filter; pieņemt politiku; skaitītāju paketes 1 baiti 309 } }
  • Pievienots atbalsts IEEE 802.1ad specifikācijai (VLAN stacking vai QinQ), kas definē līdzekļus vairāku VLAN tagu aizstāšanai vienā Ethernet rāmī. Piemēram, lai pārbaudītu ārējā Ethernet rāmja tipu 8021ad un vlan id=342, varat izmantot konstrukcijas ... ether type 802.1ad vlan id 342, lai pārbaudītu Ethernet rāmja ārējo tipu 8021ad/vlan id=1, ligzdots 802.1. q/vlan id=2 un turpmāka IP pakešu iekapsulēšana: ... ētera tips 8021ad vlan id 1 vlan tips 8021q vlan id 2 vlan tips ip skaitītājs
  • Pievienots atbalsts resursu pārvaldībai, izmantojot vienotās hierarhijas cgroups v2. Galvenā atšķirība starp cgroups v2 un v1 ir kopējas cgroups hierarhijas izmantošana visu veidu resursiem, nevis atsevišķas hierarhijas CPU resursu piešķiršanai, atmiņas patēriņa regulēšanai un I/O. Piemēram, lai pārbaudītu, vai ligzdas priekštecis pirmajā līmenī cgroupv2 atbilst maskai “system.slice”, varat izmantot konstrukciju: ... ligzda cgroupv2 1. līmenis “system.slice”
  • Pievienota iespēja pārbaudīt SCTP pakešu komponentus (tam nepieciešamā funkcionalitāte parādīsies Linux kodolā 5.14). Piemēram, lai pārbaudītu, vai paketē ir gabals ar tipu "data" un lauks "tips": ... eksistē sctp gabala dati ... sctp gabala datu tips 0
  • Noteikumu ielādes darbības izpilde ir paātrināta aptuveni divas reizes, izmantojot karogu “-f”. Ir paātrināta arī noteikumu saraksta izvade.
  • Ir nodrošināta kompakta forma, lai pārbaudītu, vai ir iestatīti karoga biti. Piemēram, lai pārbaudītu, vai snat un dnat statusa biti nav iestatīti, varat norādīt: ... ct status ! snat,dnat, lai pārbaudītu, vai sin bits ir iestatīts bitmaskā syn,ack: ... tcp karodziņi syn / syn,ack, lai pārbaudītu, vai fin un pirmie biti nav iestatīti bitmaskā syn,ack,fin,rst: ... tcp karogi! = fin,rst / syn,ack,fin,rst
  • Atļaut atslēgvārdu "spriedums" set/map typeof definīcijās: add map xm { typeof iifname . ip protokols th dport: spriedums ;}

Avots: opennet.ru

Pievieno komentāru