nftables paketni filter 0.9.1 izdanje

Nakon godinu dana razvoja predstavljen otpuštanje paketnog filtera nftables 0.9.1, 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.

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.
Sama logika filtriranja i rukovaoci 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 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 IPsec, omogućavajući podudaranje adresa tunela na osnovu paketa, ID-a IPsec zahtjeva i SPI (Indeks sigurnosnih parametara) oznake. Na primjer,

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

    Također je moguće provjeriti da li ruta prolazi kroz IPsec tunel. Na primjer, da blokirate promet ne putem IPSec-a:

    … izlaz filtera rt ipsec nedostaje kap

  • Podrška za IGMP (Internet Group Management Protocol). Na primjer, možete koristiti pravilo da odbacite dolazne zahtjeve za članstvo u IGMP grupi

    nft add pravilo netdev foo bar igmp tip članstvo-upit brojač ispuštanje

  • Mogućnost korištenja varijabli za definiranje prijelaznih lanaca (skok / prelazak). Na primjer:

    definiraj odredište = ber
    dodaj pravilo ip foo bar skok $dest

  • Podrška za maske za identifikaciju operativnih sistema (OS Fingerprint) na osnovu TTL vrijednosti u zaglavlju. Na primjer, da označite pakete na osnovu OS pošiljatelja, možete koristiti naredbu:

    ... meta oznaka set osf ttl preskoči mapu imena { "Linux" : 0x1,
    "Windows": 0x2,
    "MacOS": 0x3,
    "nepoznato" : 0x0 }
    ... osf ttl preskoči verziju "Linux:4.20"

  • Mogućnost podudaranja ARP adrese pošiljaoca i IPv4 adrese ciljnog sistema. Na primjer, da povećate brojač ARP paketa poslatih sa adrese 192.168.2.1, možete koristiti sljedeće pravilo:

    stolni arp x {
    lanac y {
    tip filter kuka ulazni prioritetni filter; prihvatiti politiku;
    arp saddr ip 192.168.2.1 brojač paketa 1 bajt 46
    }
    }

  • Podrška za transparentno prosljeđivanje zahtjeva preko proxyja (tproxy). Na primjer, za preusmjeravanje poziva na port 80 na proxy port 8080:

    tablica ip x {
    lanac y {
    tip filter kuka prioritet prerouting -150; prihvatiti politiku;
    tcp dport 80 tproxy na :8080
    }
    }

  • Podrška za označavanje utičnica sa mogućnošću daljeg dobijanja postavljene oznake preko setsockopt() u SO_MARK modu. Na primjer:

    tablica inet x {
    lanac y {
    tip filter kuka prioritet prerouting -150; prihvatiti politiku;
    tcp dport 8080 oznaka postavlja oznaku utičnice
    }
    }

  • Podrška za određivanje prioritetnih tekstualnih imena za lance. Na primjer:

    nft add chain ip x raw { type filter hook prerouting priority raw; }
    nft add chain ip x filter { type filter hook prerouting priority filter; }
    nft add chain ip x filter_later { type filter hook prerouting prioritetni filter + 10; }

  • Podrška za SELinux oznake (Secmark). Na primjer, da definirate oznaku "sshtag" u SELinux kontekstu, možete pokrenuti:

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

    I onda koristite ovu oznaku u pravilima:

    nft dodaj pravilo inet filter ulaz tcp dport 22 meta secmark set “sshtag”

    nft add map inet filter secmapping { type inet_service : secmark; }
    nft add element inet filter secmapping { 22 : "sshtag" }
    nft add pravilo inet filter input meta secmark set tcp dport map @secmapping

  • Mogućnost specificiranja portova dodijeljenih protokolima u tekstualnom obliku, kako su definirani u datoteci /etc/services. Na primjer:

    nft dodaj pravilo xy tcp dport "ssh"
    nft lista pravila set -l
    tabela x {
    lanac y {
    ...
    tcp dport "ssh"
    }
    }

  • Mogućnost provjere tipa mrežnog interfejsa. Na primjer:

    dodaj pravilo inet raw prerouting meta iifkind "vrf" prihvati

  • Poboljšana podrška za dinamičko ažuriranje sadržaja skupova eksplicitnim specificiranjem “dinamičke” zastavice. Na primjer, da ažurirate skup "s" za dodavanje izvorne adrese i resetiranje unosa ako nema paketa 30 sekundi:

    dodati tabelu x
    add set xs { type ipv4_addr; veličina 128; timeout 30s; zastave dinamičke; }
    dodaj lanac xy { tip filter kuka prioritet unosa 0; }
    dodaj pravilo xy update @s { ip saddr }

  • Mogućnost postavljanja posebnog uvjeta vremenskog ograničenja. Na primjer, da poništite zadano vremensko ograničenje za pakete koji pristižu na port 8888, možete odrediti:

    tabela ip filter {
    ct timeout agresivno-tcp {
    protokol tcp;
    l3proto ip;
    politika = {utvrđeno: 100, zatvori_čekaj: 4, zatvori: 4}
    }
    lančani izlaz {
    ...
    tcp dport 8888 ct timeout set "aggressive-tcp"
    }
    }

  • NAT podrška za inet porodicu:

    tablica inet nat {
    ...
    ip6 tata mrtav::2::1 dnat do mrtav:2::99
    }

  • Poboljšano prijavljivanje grešaka u kucanju:

    nft add test filter filtera

    Greška: nema takve datoteke ili direktorija; da li ste mislili tabela "filter" u porodičnom IP-u?
    dodajte test filtera lanca
    ^^^^^^

  • Mogućnost specificiranja imena interfejsa u setovima:

    set sc {
    upišite inet_service . ifname
    elementi = { "ssh" . "eth0" }
    }

  • Ažurirana sintaksa pravila protoka:

    nft dodaj tabelu x
    nft add flowtable x ft { hook ingress priority 0; uređaji = { eth0, wlan0 }; }
    ...
    nft dodaj pravilo x naprijed ip protokol { tcp, udp } tok dodaj @ft

  • Poboljšana podrška za JSON.

izvor: opennet.ru

Dodajte komentar