Izdanje filtra paketa nftables 0.9.1

Nakon godinu dana razvoja predstavio otpuštanje paketnog filtra nftables 0.9.1, koji se razvija kao zamjena za iptables, ip6table, arptables i ebtables objedinjavanjem sučelja za filtriranje paketa za IPv4, IPv6, ARP i mrežne mostove. Paket nftables uključuje komponente filtera paketa koje se izvode u korisničkom prostoru, dok rad na razini kernela osigurava podsustav nf_tables, koji je dio Linux kernela od izdanja 3.13.

Razina kernela pruža samo generičko sučelje neovisno o protokolu koje pruža osnovne funkcije za izdvajanje podataka iz paketa, izvođenje podatkovnih operacija i kontrolu toka.
Sama logika filtriranja i rukovatelji specifični za protokol kompajliraju se u bajt kod u korisničkom prostoru, nakon čega se ovaj bajt kod učitava u kernel pomoću Netlink sučelja i izvršava u posebnom virtualnom stroju koji podsjeća na BPF (Berkeley Packet Filters). Ovaj pristup vam omogućuje da značajno smanjite veličinu koda za filtriranje koji se izvodi na razini jezgre i premjestite sve funkcije pravila parsiranja i logike za rad s protokolima u korisnički prostor.

Glavne inovacije:

  • Podrška za IPsec, omogućuje podudaranje adresa tunela na temelju paketa, ID-a IPsec zahtjeva i oznake SPI (Indeks sigurnosnih parametara). Na primjer,

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

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

    … izlaz filtera rt ipsec nedostaje pad

  • Podrška za IGMP (Internet Group Management Protocol). Na primjer, možete koristiti pravilo za odbacivanje dolaznih zahtjeva za članstvo u IGMP grupi

    nft dodaj pravilo netdev foo bar igmp type membership-query counter drop

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

    definirati dest = ber
    dodaj pravilo ip foo bar jump $dest

  • Podrška za maske za identifikaciju operativnih sustava (OS Fingerprint) na temelju TTL vrijednosti u zaglavlju. Na primjer, za označavanje paketa na temelju OS-a pošiljatelja, možete koristiti naredbu:

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

  • Mogućnost podudaranja ARP adrese pošiljatelja i IPv4 adrese ciljnog sustava. Na primjer, za povećanje brojača ARP paketa poslanih s adrese 192.168.2.1, možete koristiti sljedeće pravilo:

    tablica arp x {
    lanac y {
    vrsta filtra kuka filtar ulaznog prioriteta; politika prihvatiti;
    arp saddr ip 192.168.2.1 brojač paketa 1 bajtova 46
    }
    }

  • Podrška za transparentno prosljeđivanje zahtjeva kroz proxy (tproxy). Na primjer, za preusmjeravanje poziva na priključak 80 na proxy priključak 8080:

    tablica ip x {
    lanac y {
    tip filtera hook prioritet predusmjeravanja -150; politika prihvatiti;
    tcp dport 80 tproxy do :8080
    }
    }

  • Podrška za označavanje utičnica s mogućnošću daljnjeg dobivanja postavljene oznake putem setsockopt() u načinu rada SO_MARK. Na primjer:

    tablica inet x {
    lanac y {
    tip filtera hook prioritet predusmjeravanja -150; politika prihvatiti;
    tcp dport 8080 oznaka postavljena oznaka utičnice
    }
    }

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

    nft add chain ip x raw { type filter hook prerouting priority raw; }
    nft dodaj lanac ip x filtar { filtar tipa hook prioritetni filtar preusmjeravanja; }
    nft add chain ip x filter_later { type filter hook prerouting priority filter + 10; }

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

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

    Zatim upotrijebite ovu oznaku u pravilima:

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

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

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

    nft dodaj pravilo xy tcp dport "ssh"
    skup pravila popisa nft -l
    tablica x {
    lanac y {
    ...
    tcp dport "ssh"
    }
    }

  • Mogućnost provjere vrste mrežnog sučelja. Na primjer:

    dodaj pravilo inet raw prerouting meta iifkind "vrf" prihvatiti

  • Poboljšana podrška za dinamičko ažuriranje sadržaja skupova izričitim navođenjem oznake "dinamičko". Na primjer, za ažuriranje skupa "s" za dodavanje izvorne adrese i poništavanje unosa ako nema paketa 30 sekundi:

    dodati tablicu x
    add set xs { type ipv4_addr; veličina 128; vrijeme čekanja 30s; zastave dinamične; }
    dodaj lanac xy { tip filter hook prioritet unosa 0; }
    dodaj pravilo xy ažuriraj @s { ip saddr }

  • Mogućnost postavljanja zasebnog uvjeta čekanja. Na primjer, za nadjačavanje zadanog vremenskog ograničenja za pakete koji stižu na priključak 8888, možete odrediti:

    tablica IP filtar {
    ct timeout aggressive-tcp {
    protokol tcp;
    l3proto ip;
    politika = {uspostavljeno: 100, close_wait: 4, close: 4}
    }
    lančani izlaz {
    ...
    tcp dport 8888 ct timeout set "aggressive-tcp"
    }
    }

  • NAT podrška za inet obitelj:

    tablica inet nat {
    ...
    ip6 daddr mrtav::2::1 dnat mrtvom:2::99
    }

  • Poboljšano izvješćivanje o slovnim pogreškama:

    nft dodaj test lančanog filtra

    Pogreška: Nema takve datoteke ili direktorija; jeste li mislili "filter" tablice u IP obitelji?
    dodaj test filtra lanca
    ^^^^^^

  • Mogućnost određivanja naziva sučelja u skupovima:

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

  • Ažurirana sintaksa pravila tablice toka:

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

  • Poboljšana podrška za JSON.

Izvor: opennet.ru

Dodajte komentar