nftables pakešu filtra izlaišana 0.9.4

publicēts pakešu filtra atbrīvošana nftables 0.9.4, kas tiek izstrādāts kā iptables, ip6table, arptables un ebtables aizstājējs, apvienojot pakešu filtrēšanas saskarnes IPv4, IPv6, ARP un tīkla tiltiem. Pakotnē nftables ir iekļauti lietotāja telpas pakešu filtra komponenti, 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. Izmaiņas, kas nepieciešamas, lai nftables 0.9.4 laidiens darbotos, ir iekļautas nākotnes kodola filiālē Linux 5.6.

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. Filtrēšanas kārtulas un protokolam raksturīgie apstrādātāji tiek apkopoti baitkodā lietotāja telpā, 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 un loģikas funkcijas darbam ar protokoliem lietotāja telpā.

Galvenie jauninājumi:

  • Savienojumu diapazonu atbalsts (savienošana, noteikti adrešu un portu komplekti, kas vienkāršo salīdzināšanu). Piemēram, kopai "baltais saraksts", kuras elementi ir pielikums, norādot karodziņu "intervāls", tiks norādīts, ka kopa pielikumā var ietvert diapazonus (pielikumam "ipv4_addr . ipv4_addr . inet_service" iepriekš bija iespējams norādīt precīzu atbilst veidlapas "192.168.10.35. 192.68.11.123", un tagad varat norādīt adrešu grupas "80-192.168.10.35-192.168.10.40"):192.68.11.123.

    tabula ip foo {
    iestatīt balto sarakstu {
    ierakstiet ipv4_addr. ipv4_addr. inet_service
    karogu intervāls
    elementi = { 192.168.10.35-192.168.10.40 . 192.68.11.123-192.168.11.125. 80}
    }

    ķēdes josla {
    tipa filtrs āķis prerouting priority filter; politikas kritums;
    ip saddr. ip tētis. tcp dport @whitelist pieņemt
    }
    }

  • Kopās un karšu sarakstos ir iespējams izmantot direktīvu “typeof”, kas nosaka elementa formātu saskaņošanas laikā.
    Piemēram:

    tabula ip foo {
    iestatīt balto sarakstu {
    ip veids saddr
    elementi = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
    }

    ķēdes josla {
    tipa filtrs āķis prerouting priority filter; politikas kritums;
    ip daddr @whitelist pieņemt
    }
    }

    tabula ip foo {
    karte addr2mark {
    ip tips saddr: meta zīme
    elementi = { 192.168.10.35 : 0x00000001, 192.168.10.135 : 0x00000002 }
    }
    }

  • Pievienota iespēja izmantot savienojumus NAT saitēs, kas ļauj norādīt adresi un portu, definējot NAT transformācijas, pamatojoties uz karšu sarakstiem vai nosauktajām kopām:

    nft pievienošanas noteikums ip nat pre dnat ip addr . ports uz ip saddr karte { 1.1.1.1 : 2.2.2.2 . trīsdesmit }

    nft pievienot karti ip nat galamērķi { tipa ipv4_addr . inet_service: ipv4_addr. inet_service\\; }
    nft pievienošanas noteikums ip nat pre dnat ip addr . ports uz ip saddr. tcp dport karte @destinations

  • Atbalsts aparatūras paātrināšanai ar dažām filtrēšanas darbībām, ko veic tīkla karte. Paātrinājums tiek iespējots, izmantojot ethtool utilītu (“ethtool -K eth0 hw-tc-offload on”), pēc tam tas tiek aktivizēts galvenās ķēdes nftables, izmantojot karogu “offload”. Izmantojot Linux kodolu 5.6, tiek atbalstīts aparatūras paātrinājums galvenes lauku saskaņošanai un ienākošā saskarnes pārbaudei kopā ar pakešu saņemšanu, izmešanu, dublēšanu (dup) un pārsūtīšanu (fwd). Tālāk esošajā piemērā no adreses 192.168.30.20 nākošo pakešu nomešanas darbības tiek veiktas tīkla kartes līmenī, nenododot paketes kodolam:

    # kaķu fails.nft
    tabula netdev x {
    ķēde y {
    tipa filtra āķa ieejas ierīce eth0 prioritāte 10; karogu izkraušana;
    ip saddr 192.168.30.20 kritums
    }
    }
    # nft -f fails.nft

  • Uzlabota informācija par kļūdas atrašanās vietu noteikumos.

    # nft dzēšanas kārtula ip yz rokturis 7
    Kļūda: nevarēja apstrādāt kārtulu: šāda faila vai direktorija nav
    dzēst noteikumu ip yz rokturis 7
    ^

    # nft dzēšanas kārtula ip xx rokturis 7
    Kļūda: nevarēja apstrādāt kārtulu: šāda faila vai direktorija nav
    dzēst kārtulas ip xx rokturi 7
    ^

    # nft dzēst tabulu twst
    Kļūda: nav šāda faila vai direktorija; vai jūs domājāt tabulas ‘test' ģimenes IP?
    dzēst tabulu twst
    ^^^^

    Pirmajā piemērā redzams, ka tabulā “y” nav sistēmā, otrajā – trūkst apdarinātāja “7”, bet trešais, ka, ierakstot tabulas nosaukumu, tiek parādīta drukas kļūdas uzvedne.

  • Pievienots atbalsts vergu interfeisa pārbaudei, norādot “meta sdif” vai “meta sdifname”:

    ... meta sdifname vrf1 ...

  • Pievienots atbalsts maiņas darbībām pa labi vai pa kreisi. Piemēram, lai pārvietotu esošo paketes etiķeti pa kreisi par 1 bitu un iestatītu mazāko bitu uz 1:

    … meta atzīme iestatīt meta atzīme lshift 1 vai 0x1 …

  • Ieviesta opcija "-V", lai parādītu paplašinātās versijas informāciju.

    # nft -V
    nftables v0.9.4 (Jive at Five)
    cli:readline
    json: jā
    minigmp: nē
    libxtables: jā

  • Komandrindas opcijas tagad ir jānorāda pirms komandām. Piemēram, jums ir jānorāda “nft -a saraksta noteikumu kopa”, un, izpildot “nft list ruleset -a”, tiks parādīta kļūda.

    Avots: opennet.ru

Pievieno komentāru