Vydání paketového filtru nftables 0.9.4

zveřejněno uvolnění paketového filtru nftables 0.9.4, který se vyvíjí jako náhrada za iptables, ip6table, arptables a ebtables sjednocením rozhraní pro filtrování paketů pro IPv4, IPv6, ARP a síťové mosty. Balíček nftables obsahuje komponenty paketového filtru, které běží v uživatelském prostoru, zatímco úroveň jádra zajišťuje subsystém nf_tables, který je součástí linuxového jádra od vydání 3.13. Změny požadované pro vydání nftables 0.9.4, aby fungovaly, jsou zahrnuty v budoucí větvi jádra Linux 5.6.

Na úrovni jádra je k dispozici pouze generické rozhraní nezávislé na protokolu, které poskytuje základní funkce pro extrakci dat z paketů, provádění operací s daty a řízení toku. Samotná pravidla filtrování a obslužné rutiny specifické pro protokol jsou zkompilovány do bajtkódu uživatelského prostoru, načež je tento bajtkód načten do jádra pomocí rozhraní Netlink a spuštěn v jádře ve speciálním virtuálním stroji připomínajícím BPF (Berkeley Packet Filters). Tento přístup umožňuje výrazně zmenšit velikost filtrovacího kódu běžícího na úrovni jádra a přesunout všechny funkce parsovacích pravidel a logiku práce s protokoly do uživatelského prostoru.

Hlavní inovace:

  • Podpora rozsahů ve spojeních (zřetězení, určité vazby adres a portů, které zjednodušují párování). Například pro sadu „whitelist“, jejíž prvky jsou přílohou, uvedení příznaku „interval“ bude znamenat, že sada může obsahovat rozsahy v příloze (pro přílohu „ipv4_addr . ipv4_addr . inet_service“ bylo dříve možné uvést přesné shoduje se jako „192.168.10.35. 192.68.11.123“ a nyní můžete zadat skupiny adres „80-192.168.10.35“): 192.168.10.40.

    tabulka ip foo {
    nastavit seznam povolených {
    zadejte ipv4_addr. ipv4_addr. inet_service
    interval příznaků
    prvky = { 192.168.10.35-192.168.10.40. 192.68.11.123-192.168.11.125. 80}
    }

    řetězová lišta {
    typ filter hook prerouting priority filter; pokles politiky;
    ip saddr. ip tatínek. tcp dport@whitelist přijmout
    }
    }

  • V sadách a map-listech je možné použít direktivu „typeof“, která určuje formát prvku při mapování.
    Například:

    tabulka ip foo {
    nastavit seznam povolených {
    typ ip saddr
    prvky = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
    }

    řetězová lišta {
    typ filter hook prerouting priority filter; pokles politiky;
    ip daddr @whitelist přijmout
    }
    }

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

  • Přidána možnost používat přílohy ve vazbách NAT, což vám umožňuje zadat adresu a port při definování překladů NAT na základě seznamů map nebo pojmenovaných sad:

    nft přidat pravidlo ip nat pre dnat ip addr . port na ip saddr mapu { 1.1.1.1 : 2.2.2.2 . třicet }

    nft add map ip nat destinations { type ipv4_addr . inet_service: ipv4_addr. inet_service\\; }
    nft přidat pravidlo ip nat pre dnat ip addr . port na ip saddr. tcp dport map @destinations

  • Podpora hardwarové akcelerace s odstraněním některých operací filtrování na bedrech síťové karty. Akcelerace je povolena pomocí utility ethtool ("ethtool -K eth0 hw-tc-offload on"), poté je aktivována v nftables pro hlavní řetězec pomocí příznaku "offload". Při použití jádra Linux 5.6 je podporována hardwarová akcelerace pro shodu polí hlavičky a kontrolu příchozího rozhraní v kombinaci s přijímáním, zahazováním, duplikováním (dup) a předáváním (fwd) paketů. V níže uvedeném příkladu se operace zahazování paketů přicházejících z adresy 192.168.30.20 provádějí na úrovni síťové karty, aniž by se pakety předávaly jádru:

    # cat file.nft
    tabulka netdev x {
    řetěz y {
    typ háčku filtru vstupní zařízení eth0 priorita 10; vyložení vlajek;
    IP saddr 192.168.30.20 pokles
    }
    }
    # nft -f soubor.nft

  • Vylepšené informace o místě chyby v pravidlech.

    # nft odstranit pravidlo ip yz rukojeť 7
    Chyba: Pravidlo nelze zpracovat: Žádný takový soubor nebo adresář
    odstranit pravidlo ip yz rukojeť 7
    ^

    # nft delete rule ip xx handle 7
    Chyba: Pravidlo nelze zpracovat: Žádný takový soubor nebo adresář
    odstranit pravidlo ip xx rukojeť 7
    ^

    # nft odstranit tabulku twst
    Chyba: Žádný takový soubor nebo adresář; měli jste na mysli tabulku 'test' v rodinné IP?
    odstranit zkroucení tabulky
    ^^^^

    První příklad ukazuje, že tabulka 'y' není v systému přítomná, druhý ukazuje, že chybí obslužná rutina '7', a třetí ukazuje nápovědu k překlepu při psaní názvu tabulky.

  • Přidána podpora pro kontrolu podřízeného rozhraní zadáním „meta sdif“ nebo „meta sdifname“:

    … meta sdifname vrf1…

  • Přidána podpora pro řazení vpravo nebo vlevo. Chcete-li například posunout existující návěští paketu doleva o 1 bit a nastavit spodní bit na 1:

    … meta značka nastavit meta značku lshift 1 nebo 0x1 …

  • Implementována možnost "-V" pro zobrazení rozšířených informací o verzi.

    #nft -V
    nftables v0.9.4 (Jive at Five)
    cli:readline
    json: ano
    minigmp: ne
    libxtables: ano

  • Volby příkazového řádku musí být nyní zadány před příkazy. Například musíte zadat "nft -a list ruleset" a spuštění "nft list ruleset -a" bude mít za následek chybu.

    Zdroj: opennet.ru

Přidat komentář