nftables paketni filter 0.9.5 izdanje

objavljeno otpuštanje paketnog filtera nftables 0.9.5, koji se razvija kao zamena za iptables, ip6table, arptables i ebtables objedinjavanjem interfejsa za filtriranje paketa za IPv4, IPv6, ARP i mrežne mostove. Paket nftables uključuje komponente filtera paketa koje se pokreću u korisničkom prostoru, dok rad na razini kernela osigurava podsistem nf_tables, koji je dio Linux kernela od izdanja 3.13. Promjene potrebne da bi nftables 0.9.5 izdanje radilo uključene su u kernel Linux 5.7.

Nivo kernela pruža samo generički interfejs nezavisan od protokola koji obezbeđuje osnovne funkcije za izdvajanje podataka iz paketa, izvođenje operacija sa podacima i kontrolu toka. Pravila filtriranja i obrađivači specifični za protokol se kompajliraju u bajtkod u korisničkom prostoru, nakon čega se ovaj bajt kod učitava u kernel pomoću Netlink interfejsa i izvršava u kernelu u posebnoj virtuelnoj mašini koja podseća na BPF (Berkeley Packet Filters). Ovaj pristup vam omogućava da značajno smanjite veličinu koda za filtriranje koji radi na nivou kernela i premestite sve funkcije raščlanjivanja pravila i logike za rad sa protokolima u korisnički prostor.

Glavne inovacije:

  • Podrška za brojače paketa i saobraćaja koji su povezani sa elementima skupa je dodana skupovima. Brojači su omogućeni pomoću ključne riječi “counter”:

    tablica ip x {
    postaviti y {
    typeof ip saddr
    brojač
    elementi = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
    }

    lanac z {
    tip filter kuka izlazni prioritetni filter; prihvatiti politiku;
    ip daddr @y
    }
    }

  • Da biste postavili početne vrijednosti brojača, na primjer, za vraćanje prethodnih brojača nakon ponovnog pokretanja, možete koristiti naredbu "nft -f":

    # cat ruleset.nft
    tablica ip x {
    postaviti y {
    typeof ip saddr
    brojač
    elementi = { 192.168.10.35 brojač paketa 1 bajt 84, 192.168.10.101 \
    brojač p 192.168.10.135 brojač paketa 0 bajtova 0 }
    }

    lanac z {
    tip filter kuka izlazni prioritetni filter; prihvatiti politiku;
    ip daddr @y
    }
    }
    # nft -f set pravila.nft
    #nft skup pravila liste
    tablica ip x {
    postaviti y {
    typeof ip saddr
    brojač
    elementi = { 192.168.10.35 brojač paketa 1 bajt 84, 192.168.10.101 \
    brojač p 192.168.10.135 brojač paketa 0 bajtova 0 }
    }

    lanac z {
    tip filter kuka izlazni prioritetni filter; prihvatiti politiku;
    ip daddr @y
    }
    }

  • Podrška za Counter je također dodana u flowtable:

    tablica ip foo {
    flomaster bar {
    Prioritet ulaska kuke -100
    uređaji = { eth0, eth1 }
    brojač
    }

    lanac naprijed {
    tip filter zakaka prioritetni filter naprijed;
    flow add @bar counter
    }
    }

    Listu brojača možete pogledati pomoću naredbe “conntrack -L”:

    tcp 6 src=192.168.10.2 dst=10.0.1.2 sport=47278 dport=5201 paketa=9 bajtova=608 \
    src=10.0.1.2 dst=10.0.1.1 sport=5201 dport=47278 paketi=8 bajtova=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 bajtova=50310268 [OFFLOAD] mark=0 secctx=null use=2

  • U konkatenacionim skupovima (konkatenacija, određeni snopovi adresa i portova koji pojednostavljuju poređenje) moguće je koristiti direktivu “typeof” koja određuje tip podataka elemenata za sastavne dijelove elemenata skupa:

    tablica ip foo {
    postavi bijelu listu {
    typeof ip saddr . tcp dport
    elementi = { 192.168.10.35 . 80, 192.168.10.101. 80}
    }

    lanac {
    tip filter kuka za preusmjeravanje prioritetnog filtera; pad politike;
    ip daddr. tcp dport @whitelist prihvata
    }
    }

  • Direktiva typeof sada se također primjenjuje na spojeve u listama mapa:

    tablica ip foo {
    map addr2mark {
    typeof ip saddr . tcp dport : meta oznaka
    elementi = { 192.168.10.35 . 80 : 0x00000001,
    192.168.10.135. 80 : 0x00000002 }
    }

    lanac {
    tip filter kuka za preusmjeravanje prioritetnog filtera; pad politike;
    meta mark set ip daddr . tcp dport map @addr2mark prihvatiti
    }
    }

  • Dodata podrška za spajanje opsega u anonimnim (neimenovanim) skupovima:

    # nft dodaj pravilo inet filter input ip daddr . tcp dport\
    { 10.0.0.0/8 . 10-23, 192.168.1.1-192.168.3.8. 80-443 } prihvatiti

  • Omogućena je mogućnost odbacivanja paketa sa 802.1q (VLAN) zastavicama prilikom obrade mrežnih mostova:

    # nft add rule bridge foo bar ether tip vlan odbija sa tcp resetovanjem

  • Dodata podrška za podudaranje po identifikatoru TCP sesije (conntrack ID). Za određivanje conntrack ID-a, možete koristiti opciju “--output id”:

    # conntrack -L —izlaz id
    udp 17 18 src=192.168.2.118 dst=192.168.2.1 sport=36424 dport=53 paketa=2 \
    bajtova=122 src=192.168.2.1 dst=192.168.2.118 sport=53 dport=36424 paketa=2 bajta=320 \
    [ASSURED] mark=0 use=1 id=2779986232

    # nft dodaj pravilo foo bar ct id 2779986232 brojač

izvor: opennet.ru

Dodajte komentar