nftables paketų filtro išleidimas 0.9.1

Po metų plėtros pateiktas paketų filtro išleidimas nftables 0.9.1, kuriamas kaip iptables, ip6table, arptables ir ebtables pakaitalas, suvienodinant IPv4, IPv6, ARP ir tinklo tiltų paketų filtravimo sąsajas. Į paketą nftables yra paketų filtrų komponentai, kurie veikia vartotojo erdvėje, o branduolio lygio darbą užtikrina nf_tables posistemis, kuris yra Linux branduolio dalis nuo 3.13 leidimo.

Branduolio lygis suteikia tik bendrąją nuo protokolo nepriklausomą sąsają, kuri suteikia pagrindines funkcijas duomenims iš paketų išgauti, duomenų operacijoms atlikti ir srauto valdymui.
Pati filtravimo logika ir specifiniams protokolams skirtos tvarkyklės yra sukompiliuojamos į baitinį kodą vartotojo erdvėje, po to šis baitinis kodas, naudojant Netlink sąsają, įkeliamas į branduolį ir vykdomas specialioje virtualioje mašinoje, primenančioje BPF (Berkeley Packet Filters). Šis metodas leidžia žymiai sumažinti branduolio lygiu veikiančio filtravimo kodo dydį ir perkelti visas analizavimo taisyklių ir logikos funkcijas, skirtas darbui su protokolais į vartotojo erdvę.

Pagrindinės naujovės:

  • IPsec palaikymas, leidžiantis suderinti tunelio adresus pagal paketą, IPsec užklausos ID ir SPI (saugumo parametrų indekso) žymą. Pavyzdžiui,

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

    Taip pat galima patikrinti, ar maršrutas eina per IPsec tunelį. Pavyzdžiui, norėdami blokuoti srautą ne per IPSec:

    … filtro išvesties rt ipsec trūksta kritimo

  • IGMP (Internet Group Management Protocol) palaikymas. Pavyzdžiui, galite naudoti taisyklę, kad atmestumėte gaunamas IGMP grupės narystės užklausas

    nft pridėti taisyklė netdev foo bar igmp tipo narystės užklausos skaitiklio kritimas

  • Galimybė naudoti kintamuosius perėjimo grandinėms apibrėžti (jump / goto). Pavyzdžiui:

    apibrėžti dest = ber
    pridėti taisyklę ip foo bar šuolis $dest

  • Kaukių palaikymas operacinei sistemai identifikuoti (OS pirštų atspaudas), remiantis TTL reikšmėmis antraštėje. Pavyzdžiui, norėdami pažymėti paketus pagal siuntėjo OS, galite naudoti komandą:

    ... meta žymų rinkinys osf ttl praleisti pavadinimo žemėlapį { "Linux" : 0x1,
    "Windows": 0x2,
    „MacOS“: 0x3,
    "nežinomas": 0x0}
    ... osf ttl praleisti versiją "Linux: 4.20"

  • Galimybė suderinti siuntėjo ARP adresą ir tikslinės sistemos IPv4 adresą. Pavyzdžiui, norėdami padidinti ARP paketų, siunčiamų iš adreso 192.168.2.1, skaitiklį, galite naudoti šią taisyklę:

    lentelė arp x {
    grandinė y {
    tipo filtras kabliukas įvesties prioriteto filtras; priimti politiką;
    arp saddr ip 192.168.2.1 skaitiniai paketai 1 baitas 46
    }
    }

  • Skaidraus užklausų persiuntimo per tarpinį serverį (tproxy) palaikymas. Pavyzdžiui, norėdami peradresuoti skambučius į 80 prievadą į tarpinio serverio prievadą 8080:

    lentelės ip x {
    grandinė y {
    tipo filtro kablio prerouting prioritetas -150; priimti politiką;
    tcp dport 80 tproxy į :8080
    }
    }

  • Lizdų žymėjimo palaikymas su galimybe toliau gauti rinkinį per setsockopt() SO_MARK režimu. Pavyzdžiui:

    lentelė inet x {
    grandinė y {
    tipo filtro kablio prerouting prioritetas -150; priimti politiką;
    tcp dport 8080 mark rinkinio lizdo ženklas
    }
    }

  • Grandinių prioritetinių teksto pavadinimų nustatymo palaikymas. Pavyzdžiui:

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

  • SELinux žymų (Secmark) palaikymas. Pavyzdžiui, norėdami apibrėžti "sshtag" žymą SELinux kontekste, galite paleisti:

    nft pridėti secmark inet filtrą sshtag "system_u:object_r:ssh_server_packet_t:s0"

    Tada naudokite šią etiketę taisyklėse:

    nft pridėti taisyklė inet filtro įvestis tcp dport 22 meta secmark rinkinys "sshtag"

    nft pridėti žemėlapį inet filtras secmapping { tipas inet_service : secmark; }
    nft add element inet filtras secmapping { 22 : "sshtag" }
    nft pridėti taisyklę inet filtro įvestis meta secmark set tcp dport map @secmapping

  • Galimybė teksto forma nurodyti protokolams priskirtus prievadus, kaip jie apibrėžti faile /etc/services. Pavyzdžiui:

    nft pridėti taisyklę xy tcp dport "ssh"
    nft sąrašo taisyklių rinkinys -l
    lentelė x {
    grandinė y {
    ...
    tcp dport "ssh"
    }
    }

  • Galimybė patikrinti tinklo sąsajos tipą. Pavyzdžiui:

    pridėti taisyklę inet raw prerouting meta iifkind "vrf" priimti

  • Patobulintas dinaminio rinkinių turinio atnaujinimo palaikymas, aiškiai nurodant „dinaminę“ vėliavėlę. Pavyzdžiui, norėdami atnaujinti rinkinį „s“, kad pridėtumėte šaltinio adresą ir iš naujo nustatytumėte įrašą, jei 30 sekundžių nėra paketų:

    pridėti lentelę x
    pridėti rinkinį xs { tipo ipv4_addr; 128 dydis; timeout 30s; vėliavėlės dinamiškos; }
    pridėti grandinę xy { tipo filtras kabliukas įvesties prioritetas 0; }
    pridėti taisyklę xy atnaujinimas @s { ip saddr }

  • Galimybė nustatyti atskirą skirtojo laiko sąlygą. Pavyzdžiui, norėdami pakeisti numatytąjį paketų, gaunamų per 8888 prievadą, skirtąjį laiką, galite nurodyti:

    lentelės ip filtras {
    ct timeout aggressive-tcp {
    protokolas tcp;
    l3proto ip;
    politika = {nustatyta: 100, uždaryti_laukti: 4, uždaryti: 4}
    }
    grandinės išvestis {
    ...
    tcp dport 8888 ct skirtasis laikas nustatytas "agresyvus-tcp"
    }
    }

  • NAT palaikymas inet šeimai:

    lentelė inet nat {
    ...
    ip6 tėtis miręs::2::1 dnat to dead:2::99
    }

  • Patobulintas rašybos klaidų ataskaitų teikimas:

    nft pridėti grandinės filtro testą

    Klaida: nėra tokio failo ar katalogo; ar turėjote galvoje lentelės "filtrą" šeimos ip?
    pridėti grandinės filtro testą
    ^^^^^^

  • Galimybė nurodyti sąsajų pavadinimus rinkiniuose:

    set sc {
    įveskite inet_service . ifname
    elementai = { "ssh" . "eth0" }
    }

  • Atnaujinta srautinės lentelės taisyklių sintaksė:

    nft pridėti lentelę x
    nft pridėti srauto lentelę x ft { kablio įėjimo prioritetas 0; įrenginiai = { eth0, wlan0 }; }
    ...
    nft pridėti taisyklę x persiųsti ip protokolą { tcp, udp } srautas pridėti @ft

  • Patobulintas JSON palaikymas.

Šaltinis: opennet.ru

Добавить комментарий