nftables-pakettisuodattimen julkaisu 1.0.3

Pakettisuodattimen nftables 1.0.3 -julkaisu on julkaistu, ja se yhdistää IPv4:n, IPv6:n, ARP:n ja verkkosiltojen pakettisuodatusrajapinnat (joka on tarkoitettu korvaamaan iptables, ip6table, arptables ja ebtables). Tarvittavat muutokset nftables 1.0.3 -julkaisun toimimiseen sisältyvät Linux 5.18 -ytimeen.

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.

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:

  • Joukkoluettelot tukevat nyt verkkoliittymien nimien täsmäämistä maskilla, esimerkiksi määritettynä "*"-symbolilla: table inet testifsets { set simple_wild { type ifname flags interval elements = { "abcdef*", "othername", "ppp0" } } ketju v4icmp { tyyppi suodatinkoukun syöttöprioriteetti 0; hyväksyä politiikka; iifname @simple_wild laskuripaketit 0 tavua 0 iifname { “abcdef*”, “eth0” } laskuripaketit 0 tavua 0 } }
  • Toteutettu risteävien joukkolistan elementtien automaattinen yhdistäminen käytön aikana. Aikaisemmin, kun "automaattinen yhdistäminen" -vaihtoehto oli asetettu, yhdistäminen tehtiin sääntöjen julistusvaiheessa, mutta nyt se toimii myös silloin, kun uusia elementtejä lisätään asteittain käytön aikana. Esimerkiksi ilmoitusvaiheessa listajoukko y { merkitsee intervallin automaattisen yhdistämisen elementtejä = { 1.2.3.0, 1.2.3.255, 1.2.3.0/24, 3.3.3.3, 4.4.4.4, 4.4.4.4-4.4.4.8 , 3.3.3.4 , 3.3.3.5 } } muutetaan elementeiksi = { 1.2.3.0/24, 3.3.3.3-3.3.3.5, 4.4.4.4-4.4.4.8 } ja sitten jos lisäät uusia elementtejä # nft lisää elementti ip xy { 1.2.3.0 -1.2.4.255, 3.3.3.6 } näyttää elementeiltä = { 1.2.3.0-1.2.4.255, 3.3.3.3-3.3.3.6, 4.4.4.4-4.4.4.8 }

    Kun poistat luettelosta yksittäisiä kohteita, jotka kuuluvat olemassa oleviin alueisiin, alue lyhenee tai jaetaan.

  • Tuki useiden osoitteiden muunnossääntöjen (NAT) yhdistämiselle karttaluetteloksi on lisätty sääntöjen optimoijaan, jota kutsutaan, kun "-o/—optimize" on määritetty. Esimerkiksi joukolle # cat ruleset.nft table ip x { chain y { type nat hook postrouting priority srcnat; politiikan lasku; ip saddr 1.1.1.1 tcp dport 8000 snat arvoon 4.4.4.4:80 ip saddr 2.2.2.2 tcp dport 8001 snat 5.5.5.5:90 } }

    komento "nft -o -c -f ruleset.nft" muuntaa erilliset "ip saddr" -säännöt karttaluetteloksi: snat to ip saddr . tcp dport map { 1.1.1.1 . 8000: 4.4.4.4. 80, 2.2.2.2. 8001: 5.5.5.5. 90}

    Vastaavasti raakalausekkeet voidaan muuntaa karttaluetteloiksi: # cat säännöt.nft taulukko ip x { […] ketju nat_dns_acme { udp pituus 47-63 @th,160,128 0x0e373135363130333131303735353203 62 pituus @p 78p 160,128p dna ,0 0x31393032383939353831343037320e5301e goto nat_dns_this_62 udp pituus 78-160,128 @th,0 0x31363436323733373931323934300e5301e goto nat_dns_saturn_62 udp pituus 78-160,128 @th,0 0 32393535373539353636383732310 5302 62 78 160,128 0e goto nat_dns_saturn_0 udp pituus 38353439353637323038363633390-5303 @th,XNUMX XNUMXxXNUMXeXNUMXe goto nat_dns_saturn } drop_XNUMX_XNUMX

    optimoinnin jälkeen saamme karttaluettelon: udp pituus . @th,160,128 vmap { 47-63 . 0x0e373135363130333131303735353203 : goto nat_dns_dnstc, 62-78 . 0x0e31393032383939353831343037320e : goto nat_dns_this_5301, 62-78 . 0x0e31363436323733373931323934300e : goto nat_dns_saturn_5301, 62-78 . 0x0e32393535373539353636383732310e : goto nat_dns_saturn_5302, 62-78 . 0x0e38353439353637323038363633390e : goto nat_dns_saturn_5303 }

  • Raakojen lausekkeiden käyttö ketjutusoperaatioissa on sallittua. Esimerkki: #nft lisää sääntö xy ip saddr. @ih,32,32 { 1.1.1.1 . 0x14, 2.2.2.2 . 0x1e } tai taulukko x { set y { typeof ip saddr . @ih,32,32 elementtiä = { 1.1.1.1 . 0x14 } } }
  • Lisätty tuki kokonaislukujen otsikkokenttien määrittämiselle ketjutusoperaatioissa: taulukko inet t { map m1 { typeof udp pituus . @ih,32,32 : tuomion liput intervallielementit = { 20-80 . 0x14 : hyväksy, 1-10 . 0xa : drop } } chain c { type filter hook input priority 0; politiikan lasku; udp pituus. @ih,32,32 vmap @m1 } }
  • Lisätty tuki TCP-asetusten nollaukselle (toimii vain Linux-ytimen versiossa 5.18+): tcp flags syn reset tcp option sack-perm
  • Ketjun lähtökomentojen ("nft list chain xy") suorittamista on nopeutettu.

Lähde: opennet.ru

Lisää kommentti