nftables packet filter versione 0.9.1

Dopu un annu di sviluppu prisentatu liberazione di filtru di pacchettu nftables 0.9.1, 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ì hè stata parti di u kernel Linux da a versione 3.13.

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.
A logica di filtrazione stessu è 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 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:

  • Supportu IPsec, chì permette l'abbinamentu di l'indirizzi di u tunnel basatu nantu à u pacchettu, l'ID di dumanda IPsec è l'etichetta SPI (Indice di Parametri di Sicurezza). Per esempiu,

    ... ipsec in ip saddr 192.168.1.0/24
    ... ipsec in spi 1-65536

    Hè ancu pussibule di verificà se una strada passa per un tunnel IPsec. Per esempiu, per bluccà u trafficu micca via IPSec:

    … filtru output rt ipsec goccia mancante

  • Supportu per IGMP (Protokollu di Gestione di Gruppi Internet). Per esempiu, pudete aduprà una regula per scartà e richieste di appartenenza à u gruppu IGMP entranti

    nft add rule netdev foo bar igmp tipu di adesione-query counter drop

  • Possibilità d'utilizà variabili per definisce e catene di transizione (jump / goto). Per esempiu:

    define dest = ber
    aghjunghje regula ip foo bar jump $dest

  • Supportu per e maschere per identificà i sistemi operativi (OS Fingerprint) basatu nantu à i valori TTL in l'intestazione. Per esempiu, per marcà i pacchetti basati nantu à u SO di u mittente, pudete aduprà u cumandimu:

    ... meta mark set osf ttl skip name map { "Linux" : 0x1,
    "Windows": 0x2,
    "MacOS": 0x3,
    "inconnu" : 0x0 }
    ... osf ttl salta a versione "Linux: 4.20"

  • Capacità di currisponde à l'indirizzu ARP di u mittente è l'indirizzu IPv4 di u sistema di destinazione. Per esempiu, per aumentà u cuntatore di pacchetti ARP mandati da l'indirizzu 192.168.2.1, pudete aduprà a seguente regula:

    table arp x {
    catena y {
    tipu filtru ganciu input filtru priurità; accetta a pulitica;
    arp saddr ip 192.168.2.1 contatore pacchetti 1 byte 46
    }
    }

  • Supportu per l'invio trasparente di e dumande attraversu un proxy (tproxy). Per esempiu, per reindirizzà e chjama à u portu 80 à u portu proxy 8080:

    table ip x {
    catena y {
    tippu filtru ganciu prerouting priurità -150; accetta a pulitica;
    tcp dport 80 tproxy à: 8080
    }
    }

  • Supportu per a marcatura di sockets cù a capacità di ottene più a marca stabilita via setsockopt () in modu SO_MARK. Per esempiu:

    table inet x {
    catena y {
    tippu filtru ganciu prerouting priurità -150; accetta a pulitica;
    tcp dport 8080 mark set socket mark
    }
    }

  • Supportu per specificà i nomi di testu di priorità per e catene. Per esempiu:

    nft add chain ip x raw { type filter hook prerouting priority raw; }
    nft add chain ip x filter { type filter hook prerouting filtru priurità; }
    nft add chain ip x filter_later { type filter hook prerouting filtru di priorità + 10; }

  • Supportu per i tag SELinux (Secmark). Per esempiu, per definisce a tag "sshtag" in un cuntestu SELinux, pudete eseguisce:

    nft add secmark inet filter sshtag "system_u:object_r:ssh_server_packet_t:s0"

    È dopu aduprà sta etichetta in e regule:

    nft aghjunghje regula inet filter input tcp dport 22 meta secmark set "sshtag"

    nft aghjunghje mappa inet filter secmapping { type inet_service : secmark; }
    nft aghjunghje l'elementu filtru inet secmapping { 22 : "sshtag" }
    nft aghjunghje regula inet filter input meta secmark set tcp dport map @secmapping

  • Capacità di specificà i porti assignati à i protokolli in forma di testu, cum'è sò definiti in u schedariu /etc/services. Per esempiu:

    nft aghjunghje regula xy tcp dport "ssh"
    nft list ruleset -l
    table x {
    catena y {
    ...
    tcp dport "ssh"
    }
    }

  • Capacità di verificà u tipu di interfaccia di rete. Per esempiu:

    aghjunghje regula inet raw prerouting meta iifkind "vrf" accetta

  • Supportu migliuratu per aghjurnà dinamicamente u cuntenutu di i setti specificendu esplicitamente a bandiera "dinamica". Per esempiu, per aghjurnà u set "s" per aghjunghje l'indirizzu fonte è resettate l'entrata se ùn ci sò micca pacchetti per 30 seconde:

    aghjunghje a tavola x
    aghjunghje set xs { type ipv4_addr; taglia 128; timeout 30s; bandiere dinamiche; }
    aghjunghje a catena xy { tippu filtru hook input priority 0; }
    aghjunghje regula xy update @s { ip saddr }

  • Capacità di stabilisce una cundizione di timeout separata. Per esempiu, per annullà u timeout predeterminatu per i pacchetti chì arrivanu à u portu 8888, pudete specificà:

    filtru ip di table {
    ct timeout aggressivu-tcp {
    protocolu tcp;
    l3proto ip;
    pulitica = {stabilitu: 100, close_wait: 4, close: 4}
    }
    output di catena {
    ...
    tcp dport 8888 ct timeout set "aggressive-tcp"
    }
    }

  • Supportu NAT per a famiglia inet:

    table inet nat {
    ...
    ip6 daddr mortu::2::1 dnat à mortu:2::99
    }

  • Rapportu di errore di battitura migliuratu:

    nft aghjunghje a prova di filtru di a catena

    Errore: Nisun schedariu o cartulare; intendevi a tavola "filtru" in l'ip di famiglia?
    aghjunghje a prova di filtru di a catena
    ^^^^^^

  • Capacità di specificà i nomi di l'interfaccia in set:

    set sc {
    tipu inet_service . ifname
    elementi = { "ssh" . "eth0"}
    }

  • Sintaxi di regule di flowtable aghjurnata:

    nft aghjunghje a tavola x
    nft add flowtable x ft { hook ingress priority 0; dispusitivi = {eth0, wlan0}; }
    ...
    nft add rule x forward ip protocol { tcp, udp } flow add @ft

  • Supportu JSON mejoratu.

Source: opennet.ru

Add a comment