nftables-pakettisuodattimen julkaisu 0.9.1

Vuoden kehitystyön jälkeen esitetty pakettisuodattimen vapauttaminen nftables 0.9.1, joka on kehitetty korvaamaan iptables, ip6table, arptables ja ebtables yhdistämällä pakettisuodatusliitännät IPv4-, IPv6-, ARP- ja verkkosiltoja varten. Paketti nftables sisältää pakettisuodatinkomponentteja, jotka toimivat käyttäjätilassa, kun taas ydintason työn tarjoaa nf_tables-alijärjestelmä, joka on ollut osa Linux-ydintä julkaisusta 3.13 lähtien.

Ydintaso tarjoaa vain yleisen protokollasta riippumattoman rajapinnan, joka tarjoaa perustoiminnot datan poimimiseen paketeista, datatoimintojen suorittamiseen ja vuon ohjaukseen.
Itse suodatuslogiikka ja protokollakohtaiset käsittelijät kootaan tavukoodiksi käyttäjätilassa, jonka jälkeen tämä tavukoodi ladataan ytimeen Netlink-rajapinnan avulla ja suoritetaan erityisessä BPF:tä (Berkeley Packet Filters) muistuttavassa virtuaalikoneessa. Tämän lähestymistavan avulla voit pienentää merkittävästi ydintasolla käynnissä olevan suodatuskoodin kokoa ja siirtää kaikki jäsennyssääntöjen ja protokollien kanssa työskentelyn logiikan toiminnot käyttäjätilaan.

Tärkeimmät innovaatiot:

  • IPsec-tuki, joka mahdollistaa tunneliosoitteiden täsmäämisen paketin, IPsec-pyyntötunnuksen ja SPI-tunnisteen (Security Parameter Index) perusteella. Esimerkiksi,

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

    On myös mahdollista tarkistaa, kulkeeko reitti IPsec-tunnelin läpi. Esimerkiksi liikenteen estäminen muualla kuin IPSecin kautta:

    … suodatinlähtö rt ipsec puuttuu pudotus

  • Tuki IGMP:lle (Internet Group Management Protocol). Voit esimerkiksi hylätä saapuvat IGMP-ryhmän jäsenyyspyynnöt säännön avulla

    nft lisäyssääntö netdev foo bar igmp type member-query counter drop

  • Mahdollisuus käyttää muuttujia siirtymäketjujen määrittämiseen (hyppy / goto). Esimerkiksi:

    määrittele kohde = ber
    lisää sääntö ip foo bar hyppy $dest

  • Tuki maskeille käyttöjärjestelmien tunnistamiseksi (OS Fingerprint) otsikon TTL-arvojen perusteella. Voit esimerkiksi merkitä paketteja lähettäjän käyttöjärjestelmän perusteella käyttämällä komentoa:

    ... metamark set osf ttl ohita nimikartta { "Linux" : 0x1,
    "Windows": 0x2,
    "MacOS": 0x3,
    "tuntematon": 0x0}
    ... osf ttl ohita versio "Linux:4.20"

  • Mahdollisuus sovittaa yhteen lähettäjän ARP-osoite ja kohdejärjestelmän IPv4-osoite. Voit esimerkiksi kasvattaa osoitteesta 192.168.2.1 lähetettyjen ARP-pakettien laskuria käyttämällä seuraavaa sääntöä:

    taulukko arp x {
    ketju y {
    tyyppi suodatin koukku tulo prioriteettisuodatin; hyväksyä politiikka;
    arp saddr ip 192.168.2.1 laskuripaketit 1 tavua 46
    }
    }

  • Tuki pyyntöjen läpinäkyvälle välittämiselle välityspalvelimen (tproxy) kautta. Voit esimerkiksi ohjata puhelut porttiin 80 välityspalvelimen porttiin 8080:

    taulukon ip x {
    ketju y {
    tyyppi suodatinkoukku esireititysprioriteetti -150; hyväksyä politiikka;
    tcp dport 80 tproxy numeroon :8080
    }
    }

  • Tuki pistojen merkitsemiselle, jolla on mahdollisuus hankkia setsockopt() -sovelluksella SO_MARK-tilassa. Esimerkiksi:

    taulukko inet x {
    ketju y {
    tyyppi suodatinkoukku esireititysprioriteetti -150; hyväksyä politiikka;
    tcp dport 8080 mark set socket mark
    }
    }

  • Tuki prioriteettien tekstinimien määrittämiseen ketjuille. Esimerkiksi:

    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 priority filter + 10; }

  • Tuki SELinux-tageille (Secmark). Voit esimerkiksi määrittää "sshtag"-tunnisteen SELinux-kontekstissa suorittamalla:

    nft lisää secmark inet -suodatin sshtag "system_u:object_r:ssh_server_packet_t:s0"

    Käytä sitten tätä etikettiä säännöissä:

    nft add rule inet filter input tcp dport 22 meta secmark set "sshtag"

    nft lisää kartta inet-suodatin secmapping { type inet_service : secmark; }
    nft add element inet filter secmapping { 22 : "sshtag" }
    nft lisäyssääntö inet-suodatin syöttö meta secmark set tcp dport map @secmapping

  • Mahdollisuus määrittää protokollille osoitetut portit tekstimuodossa, sellaisena kuin ne on määritelty /etc/services-tiedostossa. Esimerkiksi:

    nft lisää sääntö xy tcp dport "ssh"
    nft listan säännöt -l
    taulukko x {
    ketju y {
    ...
    tcp dport "ssh"
    }
    }

  • Mahdollisuus tarkistaa verkkoliitännän tyyppi. Esimerkiksi:

    lisää sääntö inet raw prerouting meta iifkind "vrf" hyväksy

  • Parannettu tuki joukkojen sisällön dynaamiselle päivittämiselle määrittämällä nimenomaisesti "dynaaminen" lippu. Esimerkiksi, jos haluat päivittää joukon "s" lisätäksesi lähdeosoitteen ja nollataksesi merkinnän, jos paketteja ei ole 30 sekuntiin:

    lisää taulukko x
    add set xs { type ipv4_addr; koko 128; aikakatkaisu 30s; dynaamiset liput; }
    add chain xy { type filter hook input priority 0; }
    lisää sääntö xy päivitys @s { ip saddr }

  • Mahdollisuus asettaa erillinen aikakatkaisuehto. Esimerkiksi, jos haluat ohittaa oletusaikakatkaisun porttiin 8888 saapuville paketeille, voit määrittää:

    taulukon ip-suodatin {
    ct aikakatkaisu aggressive-tcp {
    protokolla tcp;
    l3proto ip;
    käytäntö = {aseblished: 100, close_wait: 4, close: 4}
    }
    ketjun lähtö {
    ...
    tcp dport 8888 ct aikakatkaisu asetettu "aggressive-tcp"
    }
    }

  • NAT-tuki inet-perheelle:

    taulukko inet nat {
    ...
    ip6 daddr kuollut::2::1 dnat to dead:2::99
    }

  • Parannettu kirjoitusvirheilmoitus:

    nft lisää ketjusuodatintesti

    Virhe: Ei tällaista tiedostoa tai hakemistoa; Tarkoititko taulukon "suodatin" perhe-ip:ssä?
    lisää ketjusuodattimen testi
    ^^^^^^

  • Mahdollisuus määrittää käyttöliittymänimiä sarjoissa:

    set sc {
    kirjoita inet_service. ifname
    elementit = { "ssh" . "eth0" }
    }

  • Päivitetty vuotaulukon sääntöjen syntaksi:

    nft lisää taulukko x
    nft add flowtable x ft { hook ingress priority 0; laitteet = { eth0, wlan0 }; }
    ...
    nft add rule x eteenpäin ip-protokolla { tcp, udp } flow add @ft

  • Parannettu JSON-tuki.

Lähde: opennet.ru

Lisää kommentti