nftables packet filter versione 0.9.5

publicatu liberazione di filtru di pacchettu nftables 0.9.5, sviluppendu cum'è un sustitutu per iptables, ip6table, arptables è ebtables unificà l'interfacce di filtrazione di pacchetti per IPv4, IPv6, ARP è ponti di rete. U pacchettu nftables include cumpunenti di filtru di pacchettu chì funzionanu in u spaziu di l'utilizatori, mentre chì u travagliu à livellu di u kernel hè furnitu da u subsistema nf_tables, chì face parte di u kernel Linux da a versione 3.13. I cambiamenti necessarii per a liberazione di nftables 0.9.5 per u travagliu sò inclusi in u kernel Linux 5.7.

U nivellu di u kernel furnisce solu una interfaccia generica indipendente da u protokollu chì furnisce funzioni basiche per l'estrazione di dati da i pacchetti, eseguisce operazioni di dati è u cuntrollu di flussu. I reguli di filtrazione è i manipulatori specifichi di u protokollu sò compilati in bytecode in u spaziu di l'utilizatori, dopu chì stu bytecode hè caricatu in u kernel utilizendu l'interfaccia Netlink è eseguitu in u kernel in una macchina virtuale speciale chì ricorda BPF (Berkeley Packet Filters). Stu approcciu permette di riduce significativamente a dimensione di u codice di filtrazione chì corre à u livellu di u kernel è move tutte e funzioni di e regule di analisi è a logica per travaglià cù protokolli in u spaziu di l'utilizatori.

Innuvazioni principali:

  • U supportu per i cuntatori di pacchetti è di trafficu assuciati cù elementi di set hè statu aghjuntu à i setti. I contatori sò attivati ​​​​aduprendu a chjave "counter":

    table ip x {
    set y {
    tipu di ip saddr
    tumblr
    elementi = {192.168.10.35, 192.168.10.101, 192.168.10.135}
    }

    catena z {
    tipu di filtru ganciu filtru priurità di output; accetta a pulitica;
    ip daddr @y
    }
    }

  • Per stabilisce i valori iniziali di i cuntatori, per esempiu, per restaurà i contatori precedenti dopu un riavviu, pudete aduprà u cumandimu "nft -f":

    # cat ruleset.nft
    table ip x {
    set y {
    tipu di ip saddr
    tumblr
    elementi = { 192.168.10.35 counter packets 1 bytes 84, 192.168.10.101 \
    contatore p 192.168.10.135 contatore pacchetti 0 bytes 0 }
    }

    catena z {
    tipu di filtru ganciu filtru priurità di output; accetta a pulitica;
    ip daddr @y
    }
    }
    # nft -f ruleset.nft
    #nft liste di regule
    table ip x {
    set y {
    tipu di ip saddr
    tumblr
    elementi = { 192.168.10.35 counter packets 1 bytes 84, 192.168.10.101 \
    contatore p 192.168.10.135 contatore pacchetti 0 bytes 0 }
    }

    catena z {
    tipu di filtru ganciu filtru priurità di output; accetta a pulitica;
    ip daddr @y
    }
    }

  • U supportu di counter hè statu ancu aghjuntu à flowtable:

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

    catena in avanti {
    tipu filtru ganciu filtru priurità avanti;
    flussu aghjunghje @bar counter
    }
    }

    Pudete vede a lista di cuntatori cù u cumandimu "conntrack -L":

    tcp 6 src = 192.168.10.2 dst = 10.0.1.2 sport = 47278 dport = 5201 pacchetti = 9 bytes = 608 \
    src=10.0.1.2 dst=10.0.1.1 sport=5201 dport=47278 pacchetti=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 \
    pacchetti = 1005763 bytes = 44075714753 src = 10.0.1.2 dst = 10.0.1.1 sport = 5201 dport = 47280 \
    pacchetti = 967505 bytes = 50310268 [OFFLOAD] mark = 0 secctx = null use = 2

  • In i setti per a concatenazione (concatenazione, certi bundle di indirizzi è porti chì simplificanu a comparazione), hè pussibule aduprà a direttiva "typeof", chì determina u tipu di dati di elementi per i parti custituenti di l'elementi di u settore:

    table ip foo {
    stabilisce a lista bianca {
    tipu d'ip saddr. tcp dport
    elementi = { 192.168.10.35 . 80, 192.168.10.101. 80}
    }

    barra di catena {
    tippu filtru ganciu prerouting filtru priurità; caduta di pulitica;
    ip daddr. tcp dport @whitelist accetta
    }
    }

  • U tipu di direttiva avà s'applica ancu à i join in listi di carte:

    table ip foo {
    mappa addr2mark {
    tipu d'ip saddr. tcp dport: meta marca
    elementi = { 192.168.10.35 . 80 : 0x00000001,
    192.168.10.135. 80 : 0x00000002}
    }

    barra di catena {
    tippu filtru ganciu prerouting filtru priurità; caduta di pulitica;
    meta mark set ip daddr . tcp dport map @addr2mark accetta
    }
    }

  • Aggiuntu supportu per i ghjunghjini di gamma in setti anonimi (senza nome):

    # nft aghjunghje regula inet filter input ip daddr . tcp dport\
    { 10.0.0.0/8 . 10-23, 192.168.1.1-192.168.3.8. 80-443 } accettà

  • A capacità di scartà i pacchetti cù bandiere 802.1q (VLAN) durante u processu di ponti di rete hè furnita:

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

  • Aghjunghje supportu per l'abbinamentu per identificatore di sessione TCP (ID di cuntrack). Per determinà l'ID di cuntrack, pudete aduprà l'opzione "--output id":

    # conntrack -L - ID di output
    udp 17 18 src=192.168.2.118 dst=192.168.2.1 sport=36424 dport=53 pacchetti=2 \
    bytes=122 src=192.168.2.1 dst=192.168.2.118 sport=53 dport=36424 pacchetti=2 bytes=320 \
    [ASSURED] marca = 0 usu = 1 id = 2779986232

    # nft aghjunghje regula foo bar ct id 2779986232 counter

Source: opennet.ru

Add a comment