nftables-pakettisuodattimen julkaisu 0.9.4

julkaistu pakettisuodattimen vapauttaminen nftables 0.9.4, 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. Muutokset, jotka ovat tarpeen nftables 0.9.4 -julkaisun toimimiseksi, sisältyvät tulevaan ytimen haaraan Linux 5.6.

Ydintaso tarjoaa vain yleisen protokollasta riippumattoman rajapinnan, joka tarjoaa perustoiminnot datan poimimiseen paketeista, datatoimintojen suorittamiseen ja vuon ohjaukseen. Suodatussäännöt ja protokollakohtaiset käsittelijät käännetään käyttäjätilassa tavukoodiksi, jonka jälkeen tämä tavukoodi ladataan ytimeen Netlink-rajapinnan avulla ja suoritetaan ytimessä erityisessä BPF:ää (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:

  • Tuki yhteyksien alueille (ketjuttaminen, tietyt osoiteniput ja portit, jotka yksinkertaistavat vertailua). Esimerkiksi joukolle "valkoinen lista", jonka elementit ovat liite, "intervalli"-lipun määrittäminen osoittaa, että joukko voi sisältää alueita liitteeseen (liitteelle "ipv4_addr . ipv4_addr . inet_service" oli aiemmin mahdollista listata tarkka vastaa muotoa "192.168.10.35. 192.68.11.123", ja nyt voit määrittää osoiteryhmiä "80-192.168.10.35-192.168.10.40"):192.68.11.123-192.168.11.125"

    table ip foo {
    aseta sallittujen lista {
    kirjoita ipv4_addr. ipv4_addr. inet_service
    lippujen väli
    elementit = { 192.168.10.35-192.168.10.40 . 192.68.11.123-192.168.11.125. 80}
    }

    ketjutanko {
    tyyppi suodatinkoukku prerouting prioriteettisuodatin; politiikan lasku;
    ip saddr. ip isä tcp dport @whitelist hyväksy
    }
    }

  • Joukoissa ja karttalistoissa on mahdollista käyttää "typeof"-direktiiviä, joka määrittää elementin muodon sovittaessa.
    Esimerkiksi:

    table ip foo {
    aseta sallittujen lista {
    ip-tyyppi saddr
    elementit = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
    }

    ketjutanko {
    tyyppi suodatinkoukku prerouting prioriteettisuodatin; politiikan lasku;
    ip daddr @whitelist hyväksy
    }
    }

    table ip foo {
    kartta addr2mark {
    ip:n tyyppi saddr: metamerkki
    elementit = { 192.168.10.35 : 0x00000001, 192.168.10.135 : 0x00000002 }
    }
    }

  • Lisätty mahdollisuus käyttää liitoksia NAT-sidoksissa, jonka avulla voit määrittää osoitteen ja portin määritettäessä NAT-muunnoksia karttaluetteloiden tai nimettyjen joukkojen perusteella:

    nft add rule ip nat pre dnat ip addr . portti ip:hen saddr kartta { 1.1.1.1 : 2.2.2.2 . kolmekymmentä }

    nft lisää kartta ip nat-kohteet { type ipv4_addr . inet_service: ipv4_addr. inet_service \\; }
    nft add rule ip nat pre dnat ip addr . portti ip:hen saddr. tcp dport -kartta @destinations

  • Tuki laitteistokiihdytykseen joillakin verkkokortin suorittamilla suodatustoiminnoilla. Kiihdytys otetaan käyttöön ethtool-apuohjelman kautta ("ethtool -K eth0 hw-tc-offload on"), jonka jälkeen se aktivoidaan pääketjun nftablesissa "offload"-lipulla. Käytettäessä Linux-ydintä 5.6, laitteistokiihdytys on tuettu otsikkokenttien täsmäykseen ja saapuvan käyttöliittymän tarkastukseen yhdessä pakettien vastaanottamisen, hylkäämisen, monistamisen (dup) ja edelleenlähetyksen (fwd) kanssa. Alla olevassa esimerkissä osoitteesta 192.168.30.20 tulevien pakettien pudotustoiminnot suoritetaan verkkokorttitasolla välittämättä paketteja ytimeen:

    # cat file.nft
    taulukko netdev x {
    ketju y {
    tyyppi suodatinkoukun sisääntulolaite eth0 prioriteetti 10; lippujen purkaminen;
    ip saddr 192.168.30.20 drop
    }
    }
    # nft -f tiedosto.nft

  • Parannetut tiedot virheen sijainnista säännöissä.

    # nft poista sääntö ip yz kahva 7
    Virhe: Sääntöä ei voitu käsitellä: Ei tällaista tiedostoa tai hakemistoa
    poista sääntö ip yz kahva 7
    ^

    # nft poista sääntö ip xx -kahva 7
    Virhe: Sääntöä ei voitu käsitellä: Ei tällaista tiedostoa tai hakemistoa
    poista sääntö ip xx -kahva 7
    ^

    # nft poista taulukko twst
    Virhe: Ei tällaista tiedostoa tai hakemistoa; Tarkoititko perhe-ip:ssä taulukon ‘test'?
    poista taulukko twst
    ^^^^

    Ensimmäinen esimerkki osoittaa, että taulukko "y" ei ole järjestelmässä, toinen, että "7"-käsittelijä puuttuu ja kolmas, että kirjoitusvirhekehote näytetään taulukon nimeä kirjoitettaessa.

  • Lisätty tuki orjaliitännän tarkistamiseen määrittämällä "meta sdif" tai "meta sdifname":

    ... meta sdifname vrf1 ...

  • Lisätty tuki oikealle tai vasemmalle vuorotyölle. Esimerkiksi, jos haluat siirtää olemassa olevaa pakettinimiötä vasemmalle 1 bitin verran ja asettaa sivubitin arvoksi 1:

    … metamerkki aseta metamerkki lshift 1 tai 0x1 …

  • Toteutettu "-V"-vaihtoehto näyttää laajennetut versiotiedot.

    # nft -V
    nftables v0.9.4 (Jive at Five)
    cli:readline
    json: kyllä
    minigmp: ei
    libxtables: kyllä

  • Komentorivivalinnat on nyt määritettävä ennen komentoja. Sinun on esimerkiksi määritettävä "nft -a list ruleet", ja "nft list rulet -a" -ajon suorittaminen aiheuttaa virheen.

    Lähde: opennet.ru

Lisää kommentti