Az nftables 0.9.5 csomagszűrő kiadása

Megjelent csomagszűrő kiadása nftables 0.9.5, amely az iptables, ip6tables, arptables és ebtables pótlásaként fejlődik, az IPv4, IPv6, ARP és hálózati hidak csomagszűrési interfészeinek egységesítésével. Az nftables csomag tartalmazza a felhasználói térben működő csomagszűrő komponenseket, míg a kernel szintjén a nf_tables alrendszer, amely a Linux 3.13-as kiadás óta része a kernelnek, biztosítja a működést. Az nftables 0.9.5 kiadásához szükséges módosítások a kernel részét képezik. Linux 5.7.

A kernel szintjén csupán egy általános interfész érhető el, amely független a konkrét protokoltól, és alapvető funkciókat nyújt az adatok csomagokból való kinyerésére, adatokkal való műveletek végrehajtására és az áramlás kezelésére. A szűrési szabályok és a protokoll-specifikus feldolgozók közvetlenül felhasználói térben byte-kódra vannak lefordítva, amelyet ezután a Netlink interfész segítségével töltenek be a kernelbe, és egy speciális virtuális gépben hajtanak végre a kernelben, amely hasonlít a BPF (Berkeley Packet Filter) működésére. Ez a megközelítés jelentősen csökkenti a kernel szintjén működő szűrési kód méretét, valamint a szabályok parsingját és a protokollokkal való logikai munkát a felhasználói térbe helyezi.

Főbb újítások:

  • A készletekhez hozzáadódott a becslők (counter) támogatása, amely a készletelemekhez van kötve. A becslők a "counter" kulcsszóval kapcsolhatók be:

    table ip x {
    set y {
    typeof ip saddr
    counter
    elemek = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
    }

    lánc z {
    type filter hook output priority filter; policy accept;
    ip daddr @y
    }
    }

  • A inicializáló értékek beállításához, például a múltbeli becslők helyreállításához újraindítás után, a "nft -f" parancsot használhatjuk:

    # 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 }
    }

    lánc 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 }
    }

    lánc z {
    type filter hook output priority filter; policy accept;
    ip daddr @y
    }
    }

  • A becslők támogatása a flowtable-hez is hozzáadódott:

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

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

    A becslők listáját a "conntrack -L" parancs segítségével lehet megtekinteni:

    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

  • A kapcsolódási készletekhez (concatenation, címek és portok meghatározott kombinációi, amelyek leegyszerűsítik a párosítást) hozzáadódott a "typeof" direktíva lehetősége, amely meghatározza az elemek adatainak típusát a készlet komponens elemeihez:

    tábla ip foo {
    halmaz whitelist {
    typeof ip saddr . tcp dport
    elements = { 192.168.10.35 . 80, 192.168.10.101 . 80 }
    }

    lánc bar {
    típus szűrő hook prerouting priority filter; politikai drop;
    ip daddr . tcp dport @whitelist accept
    }
    }

  • A typeof direktíva most már a map-listákban is alkalmazható:

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

    lánc bar {
    típus szűrő hook prerouting priority filter; politikai drop;
    meta mark set ip daddr . tcp dport map @addr2mark accept
    }
    }

  • Hozzáadódott a tartományok támogatása a névtelen (nem elnevezett) készletekhez:

    # 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

  • Lehetővé vált a VLAN (802.1q) zászlókkal rendelkező csomagok eldobása a hálózati hidak feldolgozása során:

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

  • Hozzáadódott a TCP kapcsolat azonosítóval (conntrack ID) való párosítás támogatása. A conntrack ID meghatározásához használható az "—output id" opció:

    # 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

Forrás: opennet.ru

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster