Hidlydd pecyn nftables 1.0.6 rhyddhau

Mae datganiad hidlydd pecyn nftables 1.0.6 wedi'i gyhoeddi, gan uno rhyngwynebau hidlo pecynnau ar gyfer IPv4, IPv6, ARP a phontydd rhwydwaith (gyda'r nod o ddisodli iptables, ip6table, arpttables a ebtables). Mae'r pecyn nftables yn cynnwys cydrannau hidlo pecyn sy'n rhedeg yn y gofod defnyddiwr, tra bod y lefel cnewyllyn yn cael ei ddarparu gan yr is-system nf_tables, sydd wedi bod yn rhan o'r cnewyllyn Linux ers rhyddhau 3.13. Ar lefel y cnewyllyn, dim ond rhyngwyneb protocol-annibynnol generig a ddarperir sy'n darparu swyddogaethau sylfaenol ar gyfer tynnu data o becynnau, perfformio gweithrediadau ar ddata, a rheoli llif.

Mae'r rheolau hidlo eu hunain a thrinwyr protocol-benodol yn cael eu crynhoi i god byte gofod defnyddiwr, ac ar Γ΄l hynny mae'r cod byte hwn yn cael ei lwytho i'r cnewyllyn gan ddefnyddio'r rhyngwyneb Netlink a'i weithredu yn y cnewyllyn mewn peiriant rhithwir arbennig sy'n debyg i BPF (Berkeley Packet Filters). Mae'r dull hwn yn ei gwneud hi'n bosibl lleihau'n sylweddol faint y cod hidlo sy'n rhedeg ar lefel y cnewyllyn a symud holl swyddogaethau rheolau dosrannu a rhesymeg gweithio gyda phrotocolau i ofod defnyddwyr.

Newidiadau mawr:

  • Yn yr optimizer rheolau a elwir wrth nodi'r opsiwn "-o/--optimize", mae pecynnu rheolau awtomatig wedi'i sefydlu trwy eu cyfuno a'u trosi'n rhestrau mapiau a setiau. Er enghraifft, y rheolau yw # cat ruleset.nft table ip x { cadwyn y { math hidlydd bachyn mewnbwn hidlydd blaenoriaeth; gollwng polisi; meta iifname eth1 ip saddr 1.1.1.1 ip daddr 2.2.2.3 derbyn meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.2.4 derbyn meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.3.0 ip daddr 24 ip daddr 1 ip daddr 1.1.1.2 ip daddr derbyn 2.2.4.0. .2.2.4.10 ip daddr 2-1.1.1.3 derbyn meta iifname eth2.2.2.5 ip saddr 4 ip daddr 17 derbyn }} ar Γ΄l "nft -o -c -f ruleset.nft" yn cael ei drosi i'r canlynol: ruleset. nft:74:1-1.1.1.1: meta iifname eth2.2.2.3 ip saddr 5 ip daddr 17 derbyn ruleset.nft:74:1-1.1.1.2: meta iifname eth2.2.2.4 ip saddr 6 ip daddr 17: derbyn ruleset.nft. 77:1-1.1.1.2: meta iifname eth2.2.3.0 ip saddr 24 ip daddr 7/17 derbyn ruleset.nft:83:1-1.1.1.2: meta iifname eth2.2.4.0 ip saddr 2.2.4.10 ip daddr 8-17 derbyn ruleset.nft:74:2-1.1.1.3: meta iifname eth2.2.2.5 ip saddr 1 ip daddr 1.1.1.1 derbyn i mewn i: iifname . ip saddr . ip daddr { eth2.2.2.3 . 1. 1.1.1.2, eth2.2.2.4 . 1. 1.1.1.2, eth2.2.3.0 . 24. 1/1.1.1.2, eth2.2.4.0 . 2.2.4.10. 2-1.1.1.3, eth2.2.2.5 . XNUMX. XNUMX } derbyn
  • Gall yr optimeiddiwr hefyd gyddwyso rheolau sydd eisoes yn defnyddio rhestri set syml yn ffurf fwy cryno, megis: # cat ruleset.nft table ip filter { mewnbwn cadwyn { math hidlydd bachyn mewnbwn hidlydd blaenoriaeth; gollwng polisi; iifname "lo" derbyn cyflwr ct wedi'i sefydlu, cysylltiedig derbyn sylw "Mewn traffig rydym yn tarddu, rydym yn ymddiried" iifname "enp0s31f6" ip saddr { 209.115.181.102, 216.197.228.230 } ip daddr 10.0.0.149 ud chwaraeon 123 - derbyn 32768 - 65535p ud iifname "enp0s31f6" ip saddr { 64.59.144.17, 64.59.150.133 } ip daddr 10.0.0.149 udp sport 53 udp dport 32768-65535 derbyn } } - nft becyn fel y pecyn hwn ar Γ΄l rhedeg : ruleset.nft:6:22-149: iifname "enp0s31f6" ip saddr { 209.115.181.102, 216.197.228.230 } ip daddr 10.0.0.149 udp chwaraeon 123, 32768: ip daddr 65535 udp chwaraeon 7:22 udn143 derbyn-0. 31-6 64.59.144.17 : iifname "enp64.59.150.133s10.0.0.149f53" ip saddr { 32768, 65535 } ip daddr 0 udp chwaraeon 31 udp dport 6-209.115.181.102 derbyn i mewn i: iifname . ip saddr . ip daddr . chwaraeon udp. udp dport { enp10.0.0.149s123f32768 . 65535 . 0 . 31 . 6-216.197.228.230, enp10.0.0.149s123f32768 . 65535 . 0 . 31 . 6-64.59.144.17, enp10.0.0.149s53f32768 . 65535. 0 . 31 . 6-64.59.150.133, enp10.0.0.149s53f32768 . 65535. XNUMX . XNUMX . XNUMX-XNUMX } derbyn
  • Wedi datrys problem gyda chynhyrchu bytecode ar gyfer cyfuno cyfnodau sy'n defnyddio mathau gyda gwahanol endianness, megis IPv4 (rhwydwaith endian) a meta marc (system endian). tabl ip x { map w { typeof ip saddr . marc meta : rheithfarn yn baneri elfennau cownter cyfwng = { 127.0.0.1-127.0.0.4 . 0x123434-0xb00122 : derbyn, 192.168.0.10-192.168.1.20 . 0x0000aa00-0x0000aaff : derbyn, } } cadwyn k { math bachyn hidlydd mewnbwn hidlydd blaenoriaeth; gollwng polisi; ip saddr . meta marc vmap @w } }
  • Gwell mapiau protocol prin wrth ddefnyddio ymadroddion amrwd, er enghraifft: meta l4proto 91 @th,400,16 0x0 derbyn
  • Problemau sefydlog gyda rheolau galluogi o bryd i'w gilydd: mewnosodwch reol xy tcp sport { 3478-3497, 16384-16387 } cownter derbyn
  • Mae'r API JSON wedi'i wella i gefnogi mynegiadau mewn rhestrau set a mapiau.
  • Mewn estyniadau i lyfrgell python nftables, caniateir i setiau rheolau gael eu llwytho i'w prosesu yn y modd gwirio ("-c") ac mae cefnogaeth ar gyfer diffiniad newidyn allanol wedi'i ychwanegu.
  • Caniateir ychwanegu sylwadau yn elfennau'r rhestrau gosod.
  • Caniateir iddo nodi gwerth sero mewn terfyn cyfradd beit.

Ffynhonnell: opennet.ru

Ychwanegu sylw