Vydanie paketového filtra nftables 0.9.4

publikovaný uvoľnenie paketového filtra nftables 0.9.4, vyvíja sa ako náhrada za iptables, ip6table, arptables a ebtables zjednotením rozhraní filtrovania paketov pre IPv4, IPv6, ARP a sieťové mosty. Balík nftables obsahuje komponenty filtrovania paketov v užívateľskom priestore, zatiaľ čo prácu na úrovni jadra zabezpečuje subsystém nf_tables, ktorý je súčasťou linuxového jadra od vydania 3.13. Zmeny potrebné na fungovanie vydania nftables 0.9.4 sú zahrnuté v budúcej vetve jadra Linux 5.6.

Úroveň jadra poskytuje iba všeobecné rozhranie nezávislé od protokolu, ktoré poskytuje základné funkcie na extrahovanie údajov z paketov, vykonávanie operácií s údajmi a riadenie toku. Filtrovacie pravidlá a obslužné programy špecifické pre protokol sa skompilujú do bajtového kódu v užívateľskom priestore, potom sa tento bajtový kód nahrá do jadra pomocou rozhrania Netlink a spustí sa v jadre v špeciálnom virtuálnom stroji, ktorý pripomína BPF (Berkeley Packet Filters). Tento prístup umožňuje výrazne znížiť veľkosť filtrovacieho kódu spusteného na úrovni jadra a presunúť všetky funkcie pravidiel parsovania a logiky pre prácu s protokolmi do užívateľského priestoru.

Hlavné inovácie:

  • Podpora rozsahov pripojení (reťazenie, určité zväzky adries a portov, ktoré zjednodušujú porovnávanie). Napríklad pre množinu „bielej listiny“, ktorej prvky sú prílohou, zadanie príznaku „interval“ bude indikovať, že množina môže obsahovať rozsahy v prílohe (pre prílohu „ipv4_addr . ipv4_addr . inet_service“ bolo predtým možné uviesť presné zhody vo formáte "192.168.10.35. 192.68.11.123" a teraz môžete špecifikovať skupiny adries "80-192.168.10.35-192.168.10.40"):192.68.11.123.

    tabuľka ip foo {
    nastaviť bielu listinu {
    zadajte ipv4_addr. ipv4_addr. inet_service
    interval vlajok
    prvky = { 192.168.10.35-192.168.10.40 . 192.68.11.123-192.168.11.125. 80}
    }

    reťazová lišta {
    typ filter hook prerouting priority filter; pokles politiky;
    ip saddr. ip ocko. tcp dport @whitelist prijať
    }
    }

  • V množinách a zoznamoch máp je možné použiť direktívu „typeof“, ktorá určuje formát prvku pri párovaní.
    napríklad:

    tabuľka ip foo {
    nastaviť bielu listinu {
    typ ip saddr
    prvky = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
    }

    reťazová lišta {
    typ filter hook prerouting priority filter; pokles politiky;
    ip daddr @whitelist prijať
    }
    }

    tabuľka ip foo {
    mapa addr2mark {
    typ ip saddr: meta značka
    prvky = { 192.168.10.35 : 0x00000001, 192.168.10.135 : 0x00000002 }
    }
    }

  • Pridaná možnosť používať spojenia vo väzbách NAT, čo vám umožňuje zadať adresu a port pri definovaní transformácií NAT na základe zoznamov máp alebo pomenovaných množín:

    nft pridať pravidlo ip nat pre dnat ip addr . port na ip saddr mapu { 1.1.1.1 : 2.2.2.2 . tridsať }

    nft pridať mapu ip nat destinácie { typ ipv4_addr . inet_service: ipv4_addr. inet_service \\; }
    nft pridať pravidlo ip nat pre dnat ip addr . port na ip saddr. tcp dport mapa @destinácie

  • Podpora hardvérovej akcelerácie s niektorými operáciami filtrovania vykonávanými sieťovou kartou. Zrýchlenie je povolené pomocou nástroja ethtool („ethtool -K eth0 hw-tc-offload on“), po ktorom sa aktivuje v nftables pre hlavný reťazec pomocou príznaku „offload“. Pri použití linuxového jadra 5.6 je podporovaná hardvérová akcelerácia na porovnávanie poľa hlavičky a kontrolu prichádzajúceho rozhrania v kombinácii s prijímaním, vyhadzovaním, duplikovaním (dup) a preposielaním (fwd) paketov. V nižšie uvedenom príklade sa operácie zahadzovania paketov prichádzajúcich z adresy 192.168.30.20 vykonávajú na úrovni sieťovej karty bez toho, aby sa pakety odovzdávali do jadra:

    # cat file.nft
    tabuľka netdev x {
    reťaz y {
    typ háku filtra vstupné zariadenie eth0 priorita 10; vyloženie vlajok;
    IP saddr 192.168.30.20 pokles
    }
    }
    # nft -f súbor.nft

  • Vylepšené informácie o umiestnení chyby v pravidlách.

    # nft odstrániť pravidlo ip yz rukoväť 7
    Chyba: Nepodarilo sa spracovať pravidlo: Žiadny takýto súbor alebo adresár
    odstrániť pravidlo ip yz rukoväť 7
    ^

    # nft odstrániť pravidlo ip xx rukoväť 7
    Chyba: Nepodarilo sa spracovať pravidlo: Žiadny takýto súbor alebo adresár
    odstrániť rukoväť ip xx pravidla 7
    ^

    # nft odstrániť tabuľku twst
    Chyba: Žiadny takýto súbor alebo adresár; mali ste na mysli slovo „test“ v rodine IP?
    zmazať tabuľku twst
    ^^^^

    Prvý príklad ukazuje, že tabuľka „y“ nie je v systéme, druhý, že chýba obslužný program „7“ a tretí, že pri zadávaní názvu tabuľky sa zobrazí výzva na preklep.

  • Pridaná podpora pre kontrolu podriadeného rozhrania zadaním „meta sdif“ alebo „meta sdifname“:

    ... meta sdifname vrf1 ...

  • Pridaná podpora pre operácie posunu vpravo alebo vľavo. Ak chcete napríklad posunúť existujúce návestie paketu doľava o 1 bit a nastaviť vedľajší bit na 1:

    … meta značka nastaviť meta značku lshift 1 alebo 0x1 …

  • Implementovaná možnosť „-V“ na zobrazenie informácií o rozšírenej verzii.

    # nft -V
    nftables v0.9.4 (Jive at Five)
    cli:readline
    json: áno
    minigmp: nie
    libxtables: áno

  • Voľby príkazového riadka musia byť teraz špecifikované pred príkazmi. Napríklad musíte zadať „nft -a list ruleset“ a spustenie „nft list ruleset -a“ bude mať za následok chybu.

    Zdroj: opennet.ru

Pridať komentár