nftables pakketfilter 0.9.5 release

publisearre pakket filter frijlitting nftables 0.9.5, ûntwikkeljen as ferfanging foar iptables, ip6table, arptables en ebtables troch it ferienigjen fan pakketfiltering-ynterfaces foar IPv4, IPv6, ARP en netwurkbrêgen. It nftables-pakket omfettet pakketfilterkomponinten dy't yn brûkersromte rinne, wylst it wurk op kernelnivo wurdt levere troch it nf_tables-subsysteem, dat sûnt release 3.13 diel is fan 'e Linux-kernel. Feroarings dy't nedich binne foar nftables 0.9.5 release om te wurkjen binne opnommen yn 'e kernel Linux 5.7.

It kernelnivo leveret allinich in generike protokol-ûnôfhinklike ynterface dy't basisfunksjes leveret foar it ekstrahearjen fan gegevens út pakketten, it útfieren fan gegevensoperaasjes en streamkontrôle. De filterregels en protokol-spesifike handlers wurde kompilearre yn bytekoade yn brûkersromte, wêrnei't dizze bytekoade yn 'e kearn laden wurdt mei de Netlink-ynterface en útfierd yn' e kearn yn in spesjale firtuele masine dy't docht tinken oan BPF (Berkeley Packet Filters). Dizze oanpak lit jo de grutte fan 'e filterkoade dy't op it kernelnivo rint signifikant ferminderje en alle funksjes fan parsingregels en logika foar wurkjen mei protokollen nei brûkersromte ferpleatse.

Wichtichste ynnovaasjes:

  • Stipe foar pakket- en ferkearstellers ferbûn mei ynstelde eleminten is tafoege oan sets. Tellers binne ynskeakele mei it kaaiwurd "teller":

    tabel ip x {
    set y {
    type ip saddr
    loket
    eleminten = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
    }

    ketting z {
    type filter hook útfier prioriteit filter; belied akseptearje;
    ip daddr @y
    }
    }

  • Om de begjinwearden fan tellers yn te stellen, bygelyks om eardere tellers te herstellen nei in trochstart, kinne jo it kommando "nft -f" brûke:

    # kat regelset.nft
    tabel ip x {
    set y {
    type ip saddr
    loket
    eleminten = { 192.168.10.35 tellerpakketten 1 bytes 84, 192.168.10.101 \
    teller p 192.168.10.135 tellerpakketten 0 bytes 0 }
    }

    ketting z {
    type filter hook útfier prioriteit filter; belied akseptearje;
    ip daddr @y
    }
    }
    # nft -f regelset.nft
    #nft list regelset
    tabel ip x {
    set y {
    type ip saddr
    loket
    eleminten = { 192.168.10.35 tellerpakketten 1 bytes 84, 192.168.10.101 \
    teller p 192.168.10.135 tellerpakketten 0 bytes 0 }
    }

    ketting z {
    type filter hook útfier prioriteit filter; belied akseptearje;
    ip daddr @y
    }
    }

  • Tellerstipe is ek tafoege oan flowtable:

    tabel ip foo {
    flowtable bar {
    heak ingress prioriteit -100
    apparaten = { eth0, eth1 }
    loket
    }

    keatling foarút {
    type filter hook foarút prioriteit filter;
    stream tafoegje @bar counter
    }
    }

    Jo kinne de list mei tellers besjen mei it kommando "conntrack -L":

    tcp 6 src=192.168.10.2 dst=10.0.1.2 sport=47278 dport=5201 pakketten=9 bytes=608 \
    src=10.0.1.2 dst=10.0.1.1 sport=5201 dport=47278 pakketten=8 bytes=428 [OFFLOAD] mark=0 \
    secctx=null gebrûk=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 \
    pakketten = 967505 bytes = 50310268 [OFFLOAD] mark = 0 secctx = null gebrûk = 2

  • Yn sets foar gearfoeging (konkatenaasje, bepaalde bondels fan adressen en havens dy't fergeliking ferienfâldigje), is it mooglik om de rjochtline "typeof" te brûken, dy't it gegevenstype fan eleminten bepaalt foar de gearstallende dielen fan 'e eleminten fan 'e set:

    tabel ip foo {
    set whitelist {
    type ip saddr. tcp dport
    eleminten = {192.168.10.35. 80, 192.168.10.101. 80}
    }

    kettingbalke {
    type filter hook prerouting prioriteit filter; belied drop;
    ip heit. tcp dport @whitelist akseptearje
    }
    }

  • It type rjochtline jildt no ek foar joins yn kaartlisten:

    tabel ip foo {
    map adr2mark {
    type ip saddr. tcp dport: meta mark
    eleminten = {192.168.10.35. 80: 0x00000001,
    192.168.10.135. 80 : 0x00000002 }
    }

    kettingbalke {
    type filter hook prerouting prioriteit filter; belied drop;
    meta mark set ip daddr. tcp dport map @addr2mark akseptearje
    }
    }

  • Stipe tafoege foar berik joins yn anonime (netneamde) sets:

    # nft tafoegje regel inet filter ynfier ip daddr. tcp dport\
    {10.0.0.0/8. 10-23, 192.168.1.1-192.168.3.8. 80-443 } akseptearje

  • De mooglikheid om pakketten mei 802.1q (VLAN) flaggen te ferwiderjen by it ferwurkjen fan netwurkbrêgen wurdt levere:

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

  • Stipe tafoege foar oerienkomst troch TCP-sesje-identifikaasje (conntrack ID). Om de conntrack ID te bepalen, kinne jo de opsje "--output id" brûke:

    # conntrack -L —útfier id
    udp 17 18 src=192.168.2.118 dst=192.168.2.1 sport=36424 dport=53 pakketten=2 \
    bytes=122 src=192.168.2.1 dst=192.168.2.118 sport=53 dport=36424 pakketten=2 bytes=320 \
    [ASSURED] mark=0 gebrûk=1 id=2779986232

    # nft tafoegje regel foo bar ct id 2779986232 teller

Boarne: opennet.ru

Add a comment