rilis filter paket nftables 0.9.9

Rilis filter paket nftables 0.9.9 telah diterbitkan, menyatukan antarmuka pemfilteran paket untuk IPv4, IPv6, ARP dan jembatan jaringan (bertujuan untuk menggantikan iptables, ip6table, arptables, dan ebtables). Pada saat yang sama, rilis perpustakaan pendamping libnftnl 1.2.0 diterbitkan, menyediakan API tingkat rendah untuk berinteraksi dengan subsistem nf_tables. Perubahan yang diperlukan agar rilis nftables 0.9.9 dapat berfungsi disertakan dalam kernel Linux 5.13-rc1.

Paket nftables mencakup komponen filter paket yang berjalan di ruang pengguna, sedangkan pekerjaan tingkat kernel disediakan oleh subsistem nf_tables, yang telah menjadi bagian dari kernel Linux sejak rilis 3.13. Tingkat kernel hanya menyediakan antarmuka protokol-independen generik yang menyediakan fungsi dasar untuk mengekstraksi data dari paket, melakukan operasi data, dan kontrol aliran.

Aturan pemfilteran itu sendiri dan penangan khusus protokol dikompilasi ke dalam bytecode ruang pengguna, setelah itu bytecode ini dimuat ke dalam kernel menggunakan antarmuka Netlink dan dieksekusi di kernel dalam mesin virtual khusus yang menyerupai BPF (Berkeley Packet Filters). Pendekatan ini memungkinkan untuk secara signifikan mengurangi ukuran kode pemfilteran yang berjalan pada level kernel dan memindahkan semua fungsi aturan penguraian dan logika bekerja dengan protokol ke ruang pengguna.

Inovasi utama:

  • Kemampuan untuk memindahkan pemrosesan flowtable ke sisi adaptor jaringan telah diterapkan, diaktifkan menggunakan tanda 'offload'. Flowtable adalah mekanisme untuk mengoptimalkan jalur pengalihan paket, di mana seluruh rantai pemrosesan aturan hanya diterapkan pada paket pertama, dan semua paket lain dalam aliran diteruskan secara langsung. tabel ip global { flowtable f { filter prioritas masuknya kait + 1 perangkat = { lan3, lan0, wan } flags offload } rantai ke depan { ketik filter filter prioritas kait ke depan; menerima kebijakan; protokol ip { tcp, udp } aliran tambahkan @f } chain post { ketik nat hook filter prioritas postrouting; menerima kebijakan; oifname "wan" menyamar } }
  • Menambahkan dukungan untuk melampirkan tanda pemilik ke tabel untuk memastikan penggunaan tabel secara eksklusif oleh suatu proses. Ketika suatu proses dihentikan, tabel yang terkait dengannya secara otomatis dihapus. Informasi tentang proses ditampilkan di rule dump dalam bentuk komentar: tabel ip x { # progname nft flags owner chain y { type filter hook input priority filter; penerimaan kebijakan; paket penghitung 1 byte 309 } }
  • Menambahkan dukungan untuk spesifikasi IEEE 802.1ad (VLAN stacking atau QinQ), yang mendefinisikan cara untuk mengganti beberapa tag VLAN ke dalam satu frame Ethernet. Misalnya, untuk memeriksa tipe frame Ethernet eksternal 8021ad dan vlan id=342, Anda dapat menggunakan konstruksi ... ether type 802.1ad vlan id 342 untuk memeriksa tipe eksternal frame Ethernet 8021ad/vlan id=1, nested 802.1 q/vlan id=2 dan enkapsulasi paket IP selanjutnya: ... tipe ether 8021ad vlan id 1 tipe vlan 8021q vlan id 2 vlan tipe ip counter
  • Menambahkan dukungan untuk mengelola sumber daya menggunakan hierarki terpadu cgroups v2. Perbedaan utama antara cgroups v2 dan v1 adalah penggunaan hierarki cgroups yang umum untuk semua jenis sumber daya, bukan hierarki terpisah untuk mengalokasikan sumber daya CPU, untuk mengatur konsumsi memori, dan untuk I/O. Misalnya, untuk memeriksa apakah nenek moyang soket di tingkat pertama cgroupv2 cocok dengan topeng β€œsystem.slice”, Anda dapat menggunakan konstruksi: ... soket cgroupv2 level 1 β€œsystem.slice”
  • Menambahkan kemampuan untuk memeriksa komponen paket SCTP (fungsi yang diperlukan untuk ini akan muncul di kernel Linux 5.14). Misalnya, untuk memeriksa apakah suatu paket berisi potongan dengan tipe 'data' dan bidang 'tipe': ... data potongan sctp ada ... data potongan sctp tipe 0
  • Eksekusi operasi pemuatan aturan telah dipercepat sekitar dua kali lipat menggunakan tanda β€œ-f”. Pengeluaran daftar peraturan juga telah dipercepat.
  • Formulir ringkas untuk memeriksa apakah bit bendera telah disetel disediakan. Misalnya, untuk memeriksa bahwa bit status snat dan dnat tidak disetel, Anda dapat menentukan: ... ct status ! snat,dnat untuk memeriksa bahwa bit syn diatur dalam bitmask syn,ack: ... tcp flags syn / syn,ack untuk memeriksa bahwa bit fin dan bit pertama tidak diatur dalam bitmask syn,ack,fin,rst: ...tcp flags != fin,pertama / syn,ack,fin,pertama
  • Izinkan kata kunci "putusan" dalam definisi tipe set/peta: tambahkan map xm { typeof iifname . protokol ip dport : putusan ;}

Sumber: opennet.ru

Tambah komentar