nftables pakkefilter 0.9.9 utgivelse

Utgivelsen av pakkefilter nftables 0.9.9 har blitt publisert, og forener pakkefiltreringsgrensesnitt for IPv4, IPv6, ARP og nettverksbroer (rettet mot å erstatte iptables, ip6table, arptables og ebtables). Samtidig ble utgivelsen av følgebiblioteket libnftnl 1.2.0 publisert, og ga et lavnivå-API for samhandling med nf_tables-undersystemet. Endringene som kreves for at nftables 0.9.9-utgivelsen skal fungere er inkludert i Linux-kjernen 5.13-rc1.

nftables-pakken inkluderer pakkefilterkomponenter som kjører i brukerrom, mens kjernenivået leveres av nf_tables-undersystemet, som har vært en del av Linux-kjernen siden utgivelse 3.13. På kjernenivå er det bare et generisk protokolluavhengig grensesnitt som gir grunnleggende funksjoner for å trekke ut data fra pakker, utføre operasjoner på data og kontrollere flyten.

Selve filtreringsreglene og protokollspesifikke behandlere kompileres til brukerromsbytekode, hvoretter denne bytekoden lastes inn i kjernen ved hjelp av Netlink-grensesnittet og kjøres i kjernen i en spesiell virtuell maskin som ligner BPF (Berkeley Packet Filters). Denne tilnærmingen gjør det mulig å redusere størrelsen på filtreringskoden som kjører på kjernenivå betydelig og flytte alle funksjonene til parsingsregler og logikken for å jobbe med protokoller inn i brukerområdet.

Hovedinnovasjoner:

  • Muligheten til å flytte flyttabellbehandling til nettverksadaptersiden er implementert, aktivert ved å bruke "offload"-flagget. Flowtable er en mekanisme for å optimalisere banen for pakkeomdirigering, der den fullstendige passasjen av alle regelbehandlingskjeder bare brukes på den første pakken, og alle andre pakker i flyten videresendes direkte. tabell ip global { flyttabell f { krokinngang prioritet filter + 1 enheter = { lan3, lan0, wan } flagg avlast } kjede fremover { type filter krok fremover prioritet filter; politikk akseptere; ip-protokoll { tcp, udp } flyt legg til @f } kjedepost { type nat krok postrouting prioritetsfilter; politikk akseptere; oifname "wan" maskerade } }
  • Lagt til støtte for å feste et eierflagg til en tabell for å sikre eksklusiv bruk av tabellen ved en prosess. Når en prosess avsluttes, blir tabellen tilknyttet den automatisk slettet. Informasjon om prosessen vises i regeldumpen i form av en kommentar: tabell ip x { # prognavn nft flagg eierkjede y { type filter krok input priority filter; politikk akseptere; tellerpakker 1 byte 309 } }
  • Lagt til støtte for IEEE 802.1ad-spesifikasjonen (VLAN-stabling eller QinQ), som definerer et middel for å erstatte flere VLAN-tagger i en enkelt Ethernet-ramme. For eksempel, for å sjekke typen ekstern Ethernet-ramme 8021ad og vlan id=342, kan du bruke konstruksjonen ... ether type 802.1ad vlan id 342 for å sjekke den eksterne typen Ethernet-ramme 8021ad/vlan id=1, nestet 802.1 q/vlan id=2 og ytterligere IP-pakkeinnkapsling: ... ether type 8021ad vlan id 1 vlan type 8021q vlan id 2 vlan type ip teller
  • Lagt til støtte for administrasjon av ressurser ved å bruke det enhetlige hierarki-cgroups v2. Hovedforskjellen mellom cgroups v2 og v1 er bruken av et felles cgroups-hierarki for alle typer ressurser, i stedet for separate hierarkier for tildeling av CPU-ressurser, for regulering av minneforbruk og for I/O. For eksempel, for å sjekke om stamfaren til en socket på første nivå cgroupv2 samsvarer med "system.slice"-masken, kan du bruke konstruksjonen: ... socket cgroupv2 level 1 "system.slice"
  • Lagt til muligheten til å sjekke komponenter i SCTP-pakker (funksjonaliteten som kreves for dette vil vises i Linux 5.14-kjernen). For eksempel, for å sjekke om en pakke inneholder en del med typen 'data' og feltet 'type': ... sctp chunk data eksisterer ... sctp chunk data type 0
  • Utførelsen av regelinnlastingsoperasjonen har blitt akselerert med omtrent to ganger ved å bruke "-f"-flagget. Utdataene fra listen over regler har også blitt fremskyndet.
  • Et kompakt skjema for å sjekke om flaggbiter er satt er gitt. For å kontrollere at snat- og dnat-statusbitene ikke er satt, kan du for eksempel spesifisere: ... ct status ! snat,dnat for å sjekke at syn-biten er satt i bitmasken syn,ack: ... tcp flagger syn / syn,ack for å sjekke at fin- og førstebiten ikke er satt i bitmasken syn,ack,fin,rst: ... tcp-flagg ! = fin, første / syn, ack, fin, første
  • Tillat nøkkelordet "dom" i sett/karttypedefinisjoner: legg til kart xm { typeof iifname . ip-protokoll th dport : dom ;}

Kilde: opennet.ru

Legg til en kommentar