Vydání paketového filtru nftables 0.9.2

Proběhlo vydání balíkového filtru nftables 0.9.2, vyvinutý jako náhrada za iptables, ip6tables, arptables a ebtables sjednocením rozhraní pro filtrování paketů pro IPv4, IPv6, ARP a síťové mosty. Balíček nftables obsahuje komponenty pro filtrování paketů, které pracují v uživatelském prostoru, zatímco na úrovni jádra zajišťuje činnost podvýkon nf_tables, který je součástí jádra Linux od verze 3.13. Požadované změny pro fungování verze nftables 0.9.2 jsou zahrnuty v jádře Linux 5.3.

Na úrovni jádra je poskytováno pouze obecné rozhraní, nezávislé na konkrétním protokolu a zajišťující základní funkce získávání dat z paketů, provádění operací s daty a řízení toku. Přímá logika filtrování a specifické pro protokoly zpracovatele jsou kompilovány do bajtkódu v uživatelském prostoru, který je potom nahrán do jádra pomocí rozhraní Netlink a vykonáván ve speciální virtuální stroji, která připomíná BPF (Berkeley Packet Filters). Tento přístup významně snižuje velikost kódu filtrování, který pracuje na úrovni jádra, a přenáší všechny funkce analýzy pravidel a logiku práce s protokoly do uživatelského prostoru.

Hlavní novinky:

  • Možnost kontroly čísla portu z hlavičky paketu transportní vrstvy bez ohledu na typ protokolu čtvrté vrstvy:

    add rule x y ip protocol { tcp, udp } th dport 53

  • Podpora obnovy životnosti souboru prvků:

    add element ip x y { 1.1.1.1 timeout 30s expires 15s }

  • Možnost kontroly jednotlivých možností (lsrr, rr, ssrr a ra) z paketů IPv4:

    add rule x y ip option rr exists drop

    Pro možnosti směrování je možné zkontrolovat pole type, ptr, length a addr:

    add rule x y ip option rr type 1 drop

  • Ve výrazech je nyní povoleno uvádět síťové prefixy a rozsahy adres:

    iifname ens3 snat to 10.0.0.0/28
    iifname ens3 snat to 10.0.0.1-10.0.0.15

  • Podpora používání proměnných v definicích řetězců:

    define default_policy = accept
    add chain ip foo bar { type filter hook input priority filter; policy $default_policy }

  • Určení priority řetězce může nyní probíhat jak v číselné, tak v symbolické podobě:

    define prio = filter
    define prionum = 10
    define prioffset = "filter - 150"

    add table ip foo
    add chain ip foo bar { type filter hook input priority $prio; }
    add chain ip foo ber { type filter hook input priority $prionum; }
    add chain ip foo bor { type filter hook input priority $prioffset; }

  • Byla implementována podpora modulu synproxy. Například pro umístění TCP portu 8888 pod ochranu synproxy lze použít sadu pravidel:

    tabulka ip x {
    chain y {
    type filter hook prerouting priority raw; policy accept;
    tcp dport 8888 tcp flags syn notrack
    }

    chain z {
    type filter hook forward priority filter; policy accept;
    tcp dport 8888 ct state invalid,untracked synproxy mss 1460 \
    wscale 7 timestamp sack-perm ct state invalid drop
    }
    }

  • Pro určení v tabulce conntrack očekávaných dalších připojení souvisejících s aktuálním připojením, která se používají v protokolech a scénářích vyžadujících navázání několika připojení, lze nyní určovat politiky prostřednictvím standartních sad pravidel. Například pro stanovení očekávaných po připojení k TCP portu 8888 následných připojení na port 5432 lze uvést následující pravidla:

    tabulka x {
    ct expectation myexpect {
    protocol tcp
    dport 5432
    timeout 1h
    size 12
    l3proto ip
    }

    chain input {
    type filter hook input priority 0;
    ct state new tcp dport 8888 ct expectation set myexpect
    ct state established,related counter accept
    }
    }

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