nftables-pakettisuodattimen julkaisu 1.0.0

Pakettisuodattimen nftables 1.0.0 -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.0 -julkaisun toimimiseen sisältyvät Linux 5.13 -ytimeen. Merkittävä muutos versionumerossa ei liity mihinkään perustavanlaatuisiin muutoksiin, vaan se on vain seurausta numeroinnin johdonmukaisesta jatkamisesta desimaalimuodossa (edellinen versio oli 0.9.9).

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:

  • Tuki "*" maskielementille on lisätty joukkoluetteloihin, mikä laukeaa kaikille paketeille, jotka eivät kuulu muiden joukossa määriteltyjen elementtien alle. taulukko x { kartta estolista { tyyppi ipv4_addr : tuomion liput intervallielementit = { 192.168.0.0/16 : hyväksy, 10.0.0.0/8 : hyväksy, * : pudota } } ketju y { tyyppi suodatinkoukku prerouting prioriteetti 0; hyväksyä politiikka; ip saddr vmap @blocklist } }
  • Muuttujia on mahdollista määritellä komentoriviltä käyttämällä "--define" -vaihtoehtoa. # cat test.nft -taulukko netdev x { ketju y { tyyppi suodatinkoukun sisääntulolaitteet = $dev priority 0; politiikan lasku; } } # nft —define dev="{ eth0, eth1 }" -f test.nft
  • Karttalistoissa sallitaan vakiolausekkeiden käyttö: table inet filter { map portmap { type inet_service : tuomiolaskurielementit = { 22 laskuripakettia 0 tavua 0 : jump ssh_input, * laskuripaketit 0 tavua 0 : drop } } ketju ssh_input { } ketju wan_input { tcp dport vmap @portmap } ketjun esireititys { type filter hook prerouting priority raw; hyväksyä politiikka; iif vmap { "lo" : hyppää wan_input } } }
  • Lisätty "list hooks" -komento, joka näyttää luettelon tietyn pakettiperheen käsittelijöistä: # nft list hooks ip device eth0 family ip { hook ingress { +0000000010 chain netdev xy [nf_tables] +0000000300 chain inet mw [nf_tables input] } hook { -0000000100 chain ip ab [nf_tables] +0000000300 chain inet mz [nf_tables] } koukku eteenpäin { -0000000225 selinux_ipv4_forward 0000000000 chain ip ac [nf_0000000225 output] -4_0000000225ip4 uxin XNUMX_output } koukun jälkireititys { +XNUMX XNUMX selinux_ipvXNUMX_postroute } }
  • Jonolohkot mahdollistavat jhash-, symhash- ja numgen-lausekkeiden yhdistämisen pakettien jakamiseksi jonoihin käyttäjätilassa. … jono symhash modiin 65536 … jonon liput ohitetaan numgen inc mod 65536:een … jono jhash oif . metamark mod 32 "jono" voidaan myös yhdistää karttaluetteloihin jonon valitsemiseksi käyttäjätilassa mielivaltaisten avainten perusteella. ... jonon liput ohitetaan oifname map { "eth0" : 0, "ppp0" : 2, "eth1" : 2 }
  • Joukkoluettelon sisältäviä muuttujia on mahdollista laajentaa useiksi kartoiksi. määritä liitännät = { eth0, eth1 } taulukko ip x { ketju y { tyyppi suodatinkoukku syötteen prioriteetti 0; hyväksyä politiikka; iifname vmap { lo : hyväksy, $rajapinnat : pudota } } } # nft -f x.nft # nft lista sääntötaulukko ip x { ketju y { type filter hook input priority 0; hyväksyä politiikka; iifname vmap { "lo" : hyväksy, "eth0" : pudota, "eth1" : pudota } } }
  • Vmapsien (tuomiokartan) yhdistäminen aikavälein on sallittua: # nft add rule xy tcp dport . ip saddr vmap { 1025-65535 . 192.168.10.2 : hyväksy }
  • Yksinkertaistettu syntaksi NAT-kartoille. Sallittu määrittää osoitealueet: ... snat to ip saddr map { 10.141.11.4 : 192.168.2.2-192.168.2.4 } tai eksplisiittiset IP-osoitteet ja portit: ... dnat to ip saddr map { 10.141.11.4 .192.168.2.3:80. . 192.168.1.2 } tai IP-alueiden ja porttien yhdistelmät: ... dnat to ip saddr . tcp dport kartta { 80 . 10.141.10.2: 10.141.10.5-8888. 8999-XNUMX }

Lähde: opennet.ru

Lisää kommentti