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