Filter paket nftables 0.9.9 telah dirilis. Filter ini menyatukan antarmuka penyaringan paket untuk IPv4, IPv6, ARP, dan jembatan jaringan (ditargetkan sebagai pengganti iptables, ip6table, arptables, dan ebtables). Pustaka libnftnl 1.2.0 yang menyertainya, yang menyediakan API tingkat rendah untuk berinteraksi dengan subsistem nf_tables, telah dirilis secara bersamaan. Perubahan yang diperlukan untuk nftables 0.9.9 telah dimasukkan ke dalam kernel. Linux 5.13-rc1.
Paket nftables berisi komponen filter paket yang beroperasi di ruang pengguna, sementara pekerjaan tingkat kernel disediakan oleh subsistem nf_tables, yang merupakan bagian dari kernel. Linux Sejak rilis 3.13, hanya antarmuka independen protokol generik yang disediakan di tingkat kernel, yang menyediakan fungsionalitas dasar untuk mengekstrak data dari paket, melakukan operasi data, dan kontrol aliran.
Aturan penyaringan itu sendiri dan penangan khusus protokol dikompilasi menjadi bytecode di ruang pengguna, setelah itu bytecode ini dimuat ke dalam kernel menggunakan antarmuka Netlink dan dieksekusi di kernel dalam proses khusus. mesin virtual, mengingatkan pada BPF (Berkeley Packet Filters). Pendekatan ini memungkinkan pengurangan ukuran kode penyaringan yang berjalan di tingkat kernel secara signifikan dan memindahkan semua penguraian aturan dan logika 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”
- Добавлена возможность проверки составных частей пакетов SCTP (необходимая для работы функциональность появится в ядре Linux 5.14). Например, для проверки наличия в пакете chunk-а с типом ‘data’ и полем ‘type’: … sctp chunk data exists … sctp chunk data type 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
