nftables pakettfiltri 1.0.0 väljalase

Avaldatud on paketifiltri nftables 1.0.0 väljalase, mis ühendab IPv4, IPv6, ARP ja võrgusildade pakettfiltri liidesed (eesmärk on asendada iptables, ip6table, arptables ja ebtables). Nftables 1.0.0 väljalaske toimimiseks vajalikud muudatused sisalduvad Linuxi 5.13 kernelis. Versiooninumbri olulist muutust ei seostata mingite põhimõtteliste muudatustega, vaid see on ainult kümnendmärgistuses nummerdamise järjekindla jätkamise tagajärg (eelmine versioon oli 0.9.9).

Pakett nftables sisaldab pakettfiltri komponente, mis töötavad kasutajaruumis, samas kui kerneli tasemel töö tagab alamsüsteem nf_tables, mis on Linuxi kerneli osa olnud alates versioonist 3.13. Kerneli tase pakub ainult üldist protokollist sõltumatut liidest, mis pakub põhifunktsioone pakettidest andmete eraldamiseks, andmetoimingute tegemiseks ja voo juhtimiseks.

Filtreerimisreeglid ja protokollispetsiifilised töötlejad kompileeritakse kasutajaruumis baitkoodiks, misjärel laaditakse see baitkood Netlink liidese abil kernelisse ja käivitatakse kernelis spetsiaalses BPF-i meenutavas virtuaalmasinas (Berkeley Packet Filters). Selline lähenemine võimaldab oluliselt vähendada kerneli tasemel töötava filtreerimiskoodi suurust ning teisaldada kõik sõelumisreeglite ja protokollidega töötamise loogika funktsioonid kasutajaruumi.

Peamised uuendused:

  • Komplektide loenditesse on lisatud maski elemendi “*” tugi, mis käivitatakse kõigi pakettide puhul, mis ei kuulu komplekti muude elementide alla. tabel x { map blocklist { type ipv4_addr : verdict flags interval elements = { 192.168.0.0/16 : aktsepteeri, 10.0.0.0/8 : aktsepteeri, * : drop } } ahel y { type filter hook prerouting priority 0; poliitika aktsepteerimine; ip saddr vmap @blocklist } }
  • Muutujaid on võimalik defineerida käsurealt kasutades suvandit “--define”. # cat test.nft tabel netdev x { kett y { tüüp filter konks sisendseadmed = $dev prioriteet 0; poliitika langus; } } # nft —define dev="{ eth0, eth1 }" -f test.nft
  • Kaardiloendites on lubatud konstantsete (olekut väljendavate) avaldiste kasutamine: table inet filter { map portmap { type inet_service : verdict counter elements = { 22 counter packets 0 bytes 0 : jump ssh_input, * counter packets 0 bytes 0 : drop } } ahel ssh_input { } ahel wan_input { tcp dport vmap @portmap } ahela eelmarsruutimine { tüüp filter hook prerouting priority raw; poliitika aktsepteerimine; iif vmap { "lo" : hüppa wan_input } } }
  • Lisatud käsk "list hooks", et kuvada antud paketiperekonna töötlejate loend: # nft list hooks ip seade eth0 perekond ip { hook ingress { +0000000010 chain netdev xy [nf_tables] +0000000300 chain inet mw [nf_tables input] } hook { -0000000100 kett ip ab [nf_tabelid] +0000000300 kett inet mz [nf_tables] } konks edasi { -0000000225 selinux_ipv4_forward 0000000000 kett ip ac {nf_0000000225 väljund 4_väljund } konksu postrouting { +0000000225 4 selinux_ipvXNUMX_postroute } }
  • Järjekorraplokid võimaldavad kombineerida avaldisi jhash, symhash ja numgen, et jaotada pakette kasutajaruumi järjekordadesse. … järjekord symhash mod 65536 … järjekorra lippude ümbersõit numgen inc mod 65536 … järjekord jhash oif . metamark mod 32 "järjekorda" saab kombineerida ka kaardiloenditega, et valida suvaliste võtmete alusel kasutajaruumis järjekord. ... järjekorra lippude ümbersõit oifname mapile { "eth0" : 0, "ppp0" : 2, "eth1" : 2 }
  • Muutujaid, mis sisaldavad komplektide loendit, on võimalik laiendada mitmeks kaardiks. define interfaces = { eth0, eth1 } tabel ip x { ahel y { type filter hook input priority 0; poliitika aktsepteerimine; iifname vmap { lo : aktsepteeri, $liidesed : drop } } } # nft -f x.nft # nft loendi reeglistiku tabel ip x { ahel y { type filter hook input priority 0; poliitika aktsepteerimine; iifname vmap { "lo" : aktsepteeri, "eth0" : drop, "eth1" : drop } } }
  • Vmapsi (kohtuotsuse kaardi) kombineerimine intervallidega on lubatud: # nft add reegel xy tcp dport . ip saddr vmap { 1025-65535 . 192.168.10.2 : nõustu }
  • NAT-i vastendamise lihtsustatud süntaks. Lubatud on määrata aadressivahemikud: ... snat to ip saddr map { 10.141.11.4 : 192.168.2.2-192.168.2.4 } või selgesõnalised IP-aadressid ja pordid: ... dnat to ip saddr map { 10.141.11.4 .192.168.2.3:80. . 192.168.1.2 } või IP-vahemike ja portide kombinatsioonid: ... dnat to ip saddr . tcp dport kaart { 80 . 10.141.10.2: 10.141.10.5-8888. 8999-XNUMX }

Allikas: opennet.ru

Lisa kommentaar