Verzia paketového filtra nftables 0.9.5

Zverejnené vydanie paketového filtra nftables 0.9.5, vyvíjajúce sa ako náhrada za iptables, ip6tables, arptables a ebtables spojením rozhraní filtrácie paketov pre IPv4, IPv6, ARP a sieťové mosty. V balíku nftables sú zahrnuté komponenty paketového filtráciu, ktoré fungujú v užívateľskom priestore, zatiaľ čo na úrovni jadra zaisťuje funkciu podsystem nf_tables, ktorý je súčasťou jadra Linux od verzie 3.13. Potrebné zmeny na prácu verzie nftables 0.9.5 sú zahrnuté v jadre Linux 5.7.

Na úrovni jadra sa poskytuje iba všeobecné rozhranie, nezávislé od konkrétneho protokolu, ktoré ponúka základné funkcie extrakcie údajov z paketov, vykonávania operácií s údajmi a správy toku. Pravidlá filtrácie a špecifické pre protokoly spracovateľské moduly sa priamo kompilujú do bajtkódu v užívateľskom priestore, ktorý sa potom načítava do jadra cez rozhranie Netlink a vykonáva v jadre v špeciálnej virtuálnej máquina pripomínajúcej BPF (Berkeley Packet Filters). Tento prístup umožňuje výrazne znížiť veľkosť kódu filtrácie bežiaceho na úrovni jadra a preniesť všetky funkcie analýzy pravidiel a logiky práce s protokolmi do užívateľského priestoru.

Hlavné novinky:

  • Do setov bola pridaná podpora počítadiel paketov a prevádzky viazaných na prvky setu. Počítadlá sa aktivujú pomocou kľúčového slova „counter“:

    table ip x {
    set y {
    typeof ip saddr
    counter
    elements = { 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
    }
    }

  • Na nastavenie počiatočných hodnôt počítadiel, napríklad na obnovenie predchádzajúcich počítadiel po reštarte, je možné použiť príkaz „nft -f“:

    # cat ruleset.nft
    table 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
    table 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čítadiel bola tiež pridaná do flowtable:

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

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

    Zoznam počítadiel je možné zobraziť príkazom „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 súpravách na pripojenia (konkatenácia, určité kombinácie adries a portov, ktoré uľahčujú priradenie) je možné použiť príkaz „typeof“, ktorý určuje typ dátových prvkov pre komponenty prvkov súpravy:

    table ip foo {
    nastaviť bielu listinu {
    typeof ip saddr . tcp dport
    prvky = { 192.168.10.35 . 80, 192.168.10.101 . 80 }
    }

    chain bar {
    typ filter háčik predspracovanie priorita filter; politika zamietnuť;
    ip daddr . tcp dport @biela_listina prijmi
    }
    }

  • Príkaz typeof je teraz tiež aplikovateľný na pripojenia v mapovacíh zoznamoch:

    table ip foo {
    map addr2mark {
    typeof ip saddr . tcp dport : meta označenie
    prvky = { 192.168.10.35 . 80 : 0x00000001,
    192.168.10.135 . 80 : 0x00000002 }
    }

    chain bar {
    typ filter háčik predspracovanie priorita filter; politika zamietnuť;
    meta označenie nastav ip daddr . tcp dport mapa @addr2mark prijmi
    }
    }

  • Pridala sa podpora pre pripojenia s rozsahmi v anonymných (neomenovaných) súpravá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 } prijmi

  • Bola poskytnutá možnosť zamietania paketov s vlajkami 802.1q (VLAN) pri spracovaní sieťových mostov:

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

  • Pridala sa podpora pre priradenie podľa identifikátora TCP relácie (conntrack ID). Na určenie conntrack ID môžete použiť možnosť „—output id“:

    # conntrack -L —output id
    udp 17 18 src=192.168.2.118 dst=192.168.2.1 sport=36424 dport=53 pakety=2 \
    bajty=122 src=192.168.2.1 dst=192.168.2.118 sport=53 dport=36424 pakety=2 bajty=320 \
    [ZAISTENÉ] označenie=0 použitie=1 id=2779986232

    # nft add rule foo bar ct id 2779986232 counter

Zdroj: opennet.ru

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster