Vydání paketového filtru nftables 0.9.5

zveřejněno uvolnění paketového filtru nftables 0.9.5, vyvíjející se 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 práci na úrovni 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 fungování nftables 0.9.5 jsou zahrnuty v jádře Linux 5.7.

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:

  • Do sad byla přidána podpora čítačů paketů a provozu spojených s prvky sady. Počítadla se aktivují pomocí klíčového slova „počítadlo“:

    tabulka ip x {
    nastavit y {
    typ ip saddr
    proti
    prvky = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
    }

    řetěz z {
    typ filtru háček výstupní prioritní filtr; přijmout politiku;
    ip daddr @y
    }
    }

  • Chcete-li nastavit počáteční hodnoty čítačů, například pro obnovení předchozích čítačů po restartu, můžete použít příkaz „nft -f“:

    # cat ruleset.nft
    tabulka ip x {
    nastavit y {
    typ ip saddr
    proti
    prvky = { 192.168.10.35 čítačové pakety 1 bajty 84, 192.168.10.101 \
    čítač p 192.168.10.135 pakety čítače 0 bajtů 0 }
    }

    řetěz z {
    typ filtru háček výstupní prioritní filtr; přijmout politiku;
    ip daddr @y
    }
    }
    # nft -f ruleset.nft
    #nft sada pravidel seznamu
    tabulka ip x {
    nastavit y {
    typ ip saddr
    proti
    prvky = { 192.168.10.35 čítačové pakety 1 bajty 84, 192.168.10.101 \
    čítač p 192.168.10.135 pakety čítače 0 bajtů 0 }
    }

    řetěz z {
    typ filtru háček výstupní prioritní filtr; přijmout politiku;
    ip daddr @y
    }
    }

  • Do flowtable byla také přidána podpora čítačů:

    tabulka ip foo {
    flowtable bar {
    priorita vstupu háku -100
    zařízení = { eth0, eth1 }
    proti
    }

    řetěz vpřed {
    typ filtrového háku dopředný prioritní filtr;
    flow add @bar counter
    }
    }

    Seznam čítačů můžete zobrazit pomocí příkazu „conntrack -L“:

    tcp 6 src=192.168.10.2 dst=10.0.1.2 sport=47278 dport=5201 pakety=9 bajtů=608 \
    src=10.0.1.2 dst=10.0.1.1 sport=5201 dport=47278 pakety=8 bajtů=428 [OFFLOAD] značka=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 zřetězení (zřetězení, určité svazky adres a portů, které zjednodušují srovnání) je možné použít direktivu „typeof“, která určuje datový typ prvků pro jednotlivé části prvků množiny:

    tabulka ip foo {
    nastavit seznam povolených {
    typ ip saddr. tcp dport
    prvky = { 192.168.10.35. 80, 192.168.10.101. 80}
    }

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

  • Direktiva typeof se nyní vztahuje také na spojení v seznamech map:

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

    řetězová lišta {
    typ filter hook prerouting priority filter; pokles politiky;
    meta mark set ip daddr . tcp dport map @addr2mark přijmout
    }
    }

  • Přidána podpora pro spojení rozsahů v anonymních (nepojmenovaných) sadách:

    # 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 } přijmout

  • Možnost zahodit pakety s příznaky 802.1q (VLAN) při zpracování síťových mostů je poskytována:

    # nft add rule bridge foo bar ether type vlan odmítnutí s tcp resetem

  • Přidána podpora pro párování podle identifikátoru relace TCP (conntrack ID). Chcete-li zjistit ID conntrack, můžete použít možnost „--output id“:

    # conntrack -L —ID výstupu
    udp 17 18 src=192.168.2.118 dst=192.168.2.1 sport=36424 dport=53 paketů=2 \
    bajtů=122 src=192.168.2.1 dst=192.168.2.118 sport=53 dport=36424 pakety=2 bajty=320 \
    [ZAJIŠTĚNO] známka=0 použití=1 id=2779986232

    # nft přidat pravidlo foo bar ct id 2779986232 counter

Zdroj: opennet.ru

Přidat komentář