keluaran penapis paket nftables 0.9.9

Keluaran penapis paket nftables 0.9.9 telah diterbitkan, menyatukan antara muka penapisan paket untuk IPv4, IPv6, ARP dan jambatan rangkaian (bertujuan untuk menggantikan iptables, ip6table, arptables dan ebtables). Pada masa yang sama, keluaran perpustakaan pendamping libnftnl 1.2.0 telah diterbitkan, menyediakan API peringkat rendah untuk berinteraksi dengan subsistem nf_tables. Perubahan yang diperlukan untuk keluaran nftables 0.9.9 untuk berfungsi disertakan dalam kernel Linux 5.13-rc1.

Pakej nftables termasuk komponen penapis paket yang dijalankan dalam ruang pengguna, manakala kerja peringkat kernel disediakan oleh subsistem nf_tables, yang telah menjadi sebahagian daripada kernel Linux sejak keluaran 3.13. Tahap kernel hanya menyediakan antara muka bebas protokol generik yang menyediakan fungsi asas untuk mengekstrak data daripada paket, melaksanakan operasi data dan kawalan aliran.

Peraturan penapisan dan pengendali khusus protokol disusun menjadi kod bait dalam ruang pengguna, selepas itu kod bait ini dimuatkan ke dalam kernel menggunakan antara muka Netlink dan dilaksanakan dalam kernel dalam mesin maya khas yang mengingatkan BPF (Penapis Paket Berkeley). Pendekatan ini membolehkan anda mengurangkan dengan ketara saiz kod penapisan yang berjalan pada peringkat kernel dan memindahkan semua fungsi peraturan dan logik penghuraian untuk bekerja dengan protokol ke dalam ruang pengguna.

Inovasi utama:

  • Keupayaan untuk memindahkan pemprosesan jadual alir ke bahagian penyesuai rangkaian telah dilaksanakan, didayakan menggunakan bendera 'offload'. Flowtable ialah mekanisme untuk mengoptimumkan laluan pengalihan semula paket, di mana laluan lengkap semua rantai pemprosesan peraturan digunakan hanya pada paket pertama, dan semua paket lain dalam aliran dimajukan terus. jadual ip global { jadual alir f { penapis keutamaan kemasukan cangkuk + 1 peranti = { lan3, lan0, wan } pemunggahan bendera } rantai ke hadapan { taip penapis keutamaan cangkuk ke hadapan; penerimaan dasar; ip protocol { tcp, udp } flow add @f } chain post { type nat hook postrouting priority filter; penerimaan dasar; oifname "wan" menyamar } }
  • Menambahkan sokongan untuk melampirkan bendera pemilik pada jadual untuk memastikan penggunaan eksklusif jadual melalui proses. Apabila proses ditamatkan, jadual yang dikaitkan dengannya akan dipadamkan secara automatik. Maklumat tentang proses dipaparkan dalam pembuangan peraturan dalam bentuk ulasan: jadual ip x { # progname nft flags owner chain y { type filter hook input priority filter; penerimaan dasar; paket kaunter 1 bait 309 } }
  • Sokongan tambahan untuk spesifikasi IEEE 802.1ad (VLAN susun atau QinQ), yang mentakrifkan cara untuk menggantikan berbilang teg VLAN ke dalam bingkai Ethernet tunggal. Sebagai contoh, untuk menyemak jenis bingkai Ethernet luaran 8021ad dan vlan id=342, anda boleh menggunakan pembinaan ... jenis eter 802.1ad vlan id 342 untuk menyemak jenis luaran bingkai Ethernet 8021ad/vlan id=1, bersarang 802.1 q/vlan id=2 dan enkapsulasi paket IP selanjutnya: ... jenis eter 8021ad vlan id 1 jenis vlan 8021q vlan id 2 jenis vlan kaunter ip
  • Menambah sokongan untuk mengurus sumber menggunakan hierarki bersatu cgroups v2. Perbezaan utama antara cgroups v2 dan v1 ialah penggunaan hierarki cgroups biasa untuk semua jenis sumber, bukannya hierarki berasingan untuk memperuntukkan sumber CPU, untuk mengawal penggunaan memori dan untuk I/O. Contohnya, untuk menyemak sama ada nenek moyang soket pada tahap pertama cgroupv2 sepadan dengan topeng "system.slice", anda boleh menggunakan pembinaan: ... soket cgroupv2 tahap 1 "system.slice"
  • Menambah keupayaan untuk menyemak komponen paket SCTP (fungsi yang diperlukan untuk ini akan muncul dalam kernel Linux 5.14). Sebagai contoh, untuk menyemak sama ada paket mengandungi ketulan dengan jenis 'data' dan medan 'jenis': ... sctp chunk data wujud ... sctp chunk data type 0
  • Pelaksanaan operasi pemuatan peraturan telah dipercepatkan kira-kira dua kali menggunakan bendera "-f". Output senarai peraturan juga telah dipercepatkan.
  • Borang padat untuk menyemak sama ada bit bendera ditetapkan disediakan. Sebagai contoh, untuk menyemak sama ada bit status snat dan dnat tidak ditetapkan, anda boleh menentukan: ... ct status ! snat,dnat untuk memeriksa sama ada bit syn ditetapkan dalam bitmask syn,ack: ... tcp flags syn / syn,ack untuk memastikan bahawa fin dan bit pertama tidak ditetapkan dalam bitmask syn,ack,fin,rst: ... bendera tcp ! = fin,rst / syn,ack,fin,rst
  • Benarkan kata kunci "keputusan" dalam definisi set/peta jenis: tambah peta xm { typeof iifname . protokol ip dport ke: keputusan ;}

Sumber: opennet.ru

Tambah komen