Vydání paketového filtru nftables 0.9.4

Byl zveřejněn vydání paketového filtru nftables 0.9.4, vyvíjejícího se jako náhrada za iptables, ip6tables, arptables a ebtables díky unifikaci rozhraní pro filtrování paketů pro IPv4, IPv6, ARP a síťové mosty. V balíčku nftables jsou zahrnuty komponenty paketového filtru, které fungují v uživatelském prostoru, zatímco na úrovni jádra zajišťuje funkce systém nf_tables, začleněný do jádra Linuxu od verze 3.13. Nezbytné změny pro fungování vydání nftables 0.9.4 jsou zahrnuty v budoucích větvích jádra. Linux 5.6.

Na úrovni jádra je poskytováno pouze obecné rozhraní, které není závislé na konkrétním protokolu a poskytuje základní funkce pro extrakci dat z paketů, provádění operací s daty a řízení toku. Pravidla filtrování a specifické zpracovávače protokolů jsou přímo kompilovány do bajtkódu v uživatelském prostoru, po čemž je tento bajtkód nahrán do jádra pomocí rozhraní Netlink a prováděn v jádře ve speciálním virtuálním stroji, který připomíná BPF (Berkeley Packet Filters). Tento přístup výrazně zkracuje velikost kódu filtrování běžícího na úrovni jádra a přenáší všechny funkce zpracování pravidel a logiku práce s protokoly do uživatelského prostoru.

Hlavní novinky:

  • Podpora rozsahů v připojeních (konkatenace, specifické kombinace adres a portů, usnadňující mapování). Například pro set „whitelist“, jehož prvky jsou připojením, by uvedení příznaku „interval“ ukazovalo na to, že set může zahrnovat rozsahy v připojení (pro připojení „ipv4_addr . ipv4_addr . inet_service“ bylo dříve možné uvést přesné shody jako „192.168.10.35 . 192.68.11.123 . 80“, ale nyní je možné uvádět skupiny adres „192.168.10.35-192.168.10.40 . 192.68.11.123-192.168.11.125 . 80“):

    tabulka ip foo {
    set whitelist {
    typ ipv4_addr . ipv4_addr . inet_service
    příznaky interval
    prvky = { 192.168.10.35-192.168.10.40 . 192.68.11.123-192.168.11.125 . 80 }
    }

    řetězec bar {
    typ filtru hook prerouting priorita filter; politika drop;
    ip saddr . ip daddr . tcp dport @whitelist akceptovat
    }
    }

  • V setech a map-seznamech je zajištěna možnost použití direktivy „typeof“, určující formát prvku při mapování.
    Například:

    tabulka ip foo {
    set whitelist {
    typeof ip saddr
    prvky = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
    }

    řetězec bar {
    typ filtru hook prerouting priorita filter; politika drop;
    ip daddr @whitelist akceptovat
    }
    }

    tabulka ip foo {
    map addr2mark {
    typeof ip saddr : meta mark
    prvky = { 192.168.10.35 : 0x00000001, 192.168.10.135 : 0x00000002 }
    }
    }

  • Byla přidána možnost použití připojení v NAT vazbách, což umožňuje specifikovat adresu a port při definování NAT transformací na základě map seznamů nebo pojmenovaných sad:

    nft add rule ip nat pre dnat ip addr . port to ip saddr map { 1.1.1.1 : 2.2.2.2 . 30 }

    nft add map ip nat destinations { type ipv4_addr . inet_service : ipv4_addr . inet_service \; }
    nft add rule ip nat pre dnat ip addr . port to ip saddr . tcp dport map @destinations

  • Podpora hardwarového zrychlení s přesunem některých operací filtrování na ramena síťové karty. Zrychlení se aktivuje pomocí utilitky ethtool ("ethtool -K eth0 hw-tc-offload on"), po čemž se aktivuje v nftables pro hlavní řetězec pomocí příznaku "offload". Při použití jádra Linux 5.6 je podporováno hardwarové zrychlení pro porovnávání polí hlavičky a kontrolu příchozího rozhraní v kombinaci se zpracováváním, zahazováním, duplikováním (dup) a přesměrováním (fwd) paketů. V níže uvedeném příkladu jsou operace zahazování paketů, přicházejících z adresy 192.168.30.20, prováděny na úrovni síťové karty, bez předání paketů jádru:

    # cat file.nft
    table netdev x {
    chain y {
    type filter hook ingress device eth0 priority 10; flags offload;
    ip saddr 192.168.30.20 drop
    }
    }
    # nft -f file.nft

  • Bylo vylepšeno informování o místě chyby v pravidlech.

    # nft delete rule ip y z handle 7
    Error: Could not process rule: No such file or directory
    delete rule ip y z handle 7
    ^

    # nft delete rule ip x x handle 7
    Error: Could not process rule: No such file or directory
    delete rule ip x x handle 7
    ^

    # nft delete table twst
    Error: No such file or directory; did you mean table ‘test’ in family ip?
    delete table twst
    ^^^^

    V prvním příkladu je ukázáno, že tabulka „y“ chybí v systému, ve druhém, že zpracovatel „7“ chybí, a ve třetím, že je zobrazena nápověda k překlepu při zadávání názvu tabulky.

  • Byla přidána podpora pro kontrolu slave rozhraní prostřednictvím označení „meta sdif“ nebo „meta sdifname“:

    … meta sdifname vrf1 …

  • Byla přidána podpora pro operaci posunu doprava nebo doleva. Například pro posunutí existující značky paketu doleva o 1 bit a nastavení nižšího bitu na 1:

    … meta mark set meta mark lshift 1 or 0x1 …

  • Byla implementována volba „-V“ pro zobrazení rozšířených informací o verzi.

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

  • Možnosti příkazového řádku nyní musí být vždy uvedeny před příkazy. Například je nutné uvádět „nft -a list ruleset“, zatímco spuštění „nft list ruleset -a“ povede k zobrazení chyby.

    Zdroj: opennet.ru

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster