Vydání paketového filtru nftables 0.9.5

Byl zveřejněn vydání paketového filtru nftables 0.9.5, vyvíjející 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. Balíček nftables obsahuje komponenty paketového filtr pro uživatelský prostor, zatímco na úrovni jádra zajišťuje práci subsystém nf_tables, který je součástí jádra Linux od verze 3.13. Nezbytné změny pro verzi nftables 0.9.5 jsou zahrnuty v jádře Linux 5.7.

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:

  • Byla přidána podpora pro počítadla paketů a provozu vázaných na prvky souboru. Počítadla se aktivují pomocí klíčového slova „counter“:

    tabulka ip x {
    set y {
    typeof ip saddr
    counter
    prvky = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
    }

    chain z {
    type filter hook output priority filter; policy accept;
    ip daddr @y
    }
    }

  • Pro nastavení počátečních hodnot počitadla, například pro obnovení minulých počitadla po restartu, lze použít příkaz „nft -f“:

    # cat ruleset.nft
    tabulka ip x {
    set y {
    typeof ip saddr
    counter
    elements = { 192.168.10.35 counter packets 1 bytes 84, 192.168.10.101 \
    counter p 192.168.10.135 counter packets 0 bytes 0 }
    }

    chain z {
    type filter hook output priority filter; policy accept;
    ip daddr @y
    }
    }
    # nft -f ruleset.nft
    # nft list ruleset
    tabulka ip x {
    set y {
    typeof ip saddr
    counter
    elements = { 192.168.10.35 counter packets 1 bytes 84, 192.168.10.101 \
    counter p 192.168.10.135 counter packets 0 bytes 0 }
    }

    chain z {
    type filter hook output priority filter; policy accept;
    ip daddr @y
    }
    }

  • Podpora počitadla byla také přidána do flowtable:

    tabulka ip foo {
    flowtable bar {
    hook ingress priority -100
    devices = { eth0, eth1 }
    counter
    }

    chain forward {
    type filter hook forward priority filter;
    flow add @bar counter
    }
    }

    Seznam počitadla lze zobrazit příkazem „conntrack -L“:

    tcp 6 src=192.168.10.2 dst=10.0.1.2 sport=47278 dport=5201 packets=9 bytes=608 \
    src=10.0.1.2 dst=10.0.1.1 sport=5201 dport=47278 packets=8 bytes=428 [OFFLOAD] mark=0 \
    secctx=null use=2 tcp 6 src=192.168.10.2 dst=10.0.1.2 sport=47280 dport=5201 \
    packets=1005763 bytes=44075714753 src=10.0.1.2 dst=10.0.1.1 sport=5201 dport=47280 \
    packets=967505 bytes=50310268 [OFFLOAD] mark=0 secctx=null use=2

  • V sadách pro spojení (konkatenaci, určené vazby adres a portů, usnadňující přiřazování) byla zajištěna možnost použití direktivy „typeof“, která určuje typ dat prvků pro složené části prvků souboru:

    tabulka ip foo {
    set whitelist {
    typeof ip saddr . tcp dport
    elements = { 192.168.10.35 . 80, 192.168.10.101 . 80 }
    }

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

  • Direktiva typeof je nyní také aplikovatelná pro spojení v mapových seznamích:

    tabulka ip foo {
    map addr2mark {
    typeof ip saddr . tcp dport : meta mark
    elements = { 192.168.10.35 . 80 : 0x00000001,
    192.168.10.135 . 80 : 0x00000002 }
    }

    řetězec bar {
    typ filtru hook prerouting priorita filter; politika drop;
    meta mark set ip daddr . tcp dport map @addr2mark accept
    }
    }

  • Byla přidána podpora spojení s rozsahy v anonymních (nepojmenovaných) seznamech:

    # nft add rule inet filter input ip daddr . tcp dport \
    { 10.0.0.0/8 . 10-23, 192.168.1.1-192.168.3.8 . 80-443 } accept

  • Byla poskytnuta možnost zahození paketů s příznaky 802.1q (VLAN) při zpracování síťových mostů:

    # nft add rule bridge foo bar ether type vlan reject with tcp reset

  • Byla přidána podpora pro přiřazení podle identifikátoru TCP spojení (conntrack ID). Pro určení conntrack ID lze použít volbu „—output id“:

    # conntrack -L —output id
    udp 17 18 src=192.168.2.118 dst=192.168.2.1 sport=36424 dport=53 packets=2 \
    bytes=122 src=192.168.2.1 dst=192.168.2.118 sport=53 dport=36424 packets=2 bytes=320 \
    [ASSURED] mark=0 use=1 id=2779986232

    # nft add rule foo bar ct id 2779986232 counter

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