Rilis filter paket nftables 1.1.0 telah diterbitkan, menyatukan antarmuka pemfilteran paket untuk IPv4, IPv6, ARP dan jembatan jaringan (bertujuan untuk menggantikan iptables, ip6table, arptables, dan ebtables). Perubahan signifikan pada nomor versi tidak terkait dengan perubahan mendasar apa pun, tetapi hanya merupakan konsekuensi dari kelanjutan konsisten penomoran dalam notasi desimal (rilis sebelumnya adalah 1.0.9). Pada saat yang sama, rilis perpustakaan pendamping libnftnl 1.2.7 diterbitkan, menyediakan API tingkat rendah untuk berinteraksi dengan subsistem nf_tables.
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.
Perubahan besar:
- Dukungan variabel telah ditambahkan ke ekspresi peta: definisikan dst_map = { ::1234 : 5678 } tabel ip6 nat { peta dst_map { typeof ip6 daddr : tcp dport; elemen = $dst_map } pra-perutean rantai { ip6 nexthdr tcp redirect ke ip6 daddr map @dst_map } }
- Menambahkan dukungan VLAN: ip saddr 10.1.1.1 tipe icmp echo-request vlan id set 321 # payload ether tipe 8021ad vlan id 10 tipe vlan 8021q vlan id 100 vlan tipe ip terima
- Untuk ekspresi "log", praprosesor string baru dengan dukungan variabel diaktifkan: tentukan message="test" log prefix "my $message"
- Saat menghitung nilai ekspresi “meta jam”, pemrosesan offset negatif dalam zona waktu yang ditentukan melalui variabel lingkungan TZ diterapkan: TZ=UTC-4 nft tambahkan aturan xy meta jam “22:00”
- Konversi urutan byte disediakan saat menggunakan ekspresi ct dan meta, serta saat menggunakan operasi penggabungan dan menentukan rentang dalam kumpulan set. peta mapv6 { typeof ip6 dscp : tanda meta; } meta mark set ip6 dscp map @map1 bytecode akan diterima: [ payload load 2b @ network header + 0 => reg 1 ] [ bitwise reg 1 = ( reg 1 & 0x0000c00f ) ^ 0x00000000 ] [ byteorder reg 1 = ntoh(reg 1 , 2, 2) ] [ bitwise reg 1 = ( reg 1 > 0x00000006 ) ] [ pencarian reg 1 set mapv6 dreg 1 ] [ tanda set meta dengan reg 1 ]
- Dukungan untuk perintah "ganti aturan" telah dipulihkan. ganti aturan ip t1 c1 menangani 3 'jhash protokol ip. ip saddr mod 170 vmap { 0-94 : goto wan1, 95-169 : goto wan2, 170-269 }"
- Kemampuan untuk menambahkan perangkat jaringan ke tabel alur yang ada telah dipulihkan: buat filter inet tabel aliran f1 { prioritas masuk kait 0; counter } tambahkan filter inet flowtable f1 { perangkat = { dummy1 } ; }
- Masalah terpecahkan saat menggunakan perintah "buat set": definisikan ip-block-4 = { 1.1.1.1 } buat set filter netdev ip-block-4-test { ketik ipv4_addr flags interval elemen penggabungan otomatis = $ip-block-4 }
- Masalah terselesaikan saat menggunakan representasi digital opsi tcp: opsi tcp 254
- Memecahkan masalah saat menggunakan ekspresi meta dan ct dengan kumpulan peta: set tanda meta vlan id map { 1 : 0x00000001, 4095 : 0x00004095 }
- Ekspresi payload dan concat tidak mengizinkan data yang lebih besar dari 512 byte.
- Saat menjalankan perintah "nft deskripsikan", nilai dari grup, file rt_mark dan rt_realms yang terletak di direktori /etc/iproute2/ dan /use/share/iproute2/ diperhitungkan. # nft mendeskripsikan ekspresi meta meta rtclassid, ranah tipe data (ranah perutean) (integer tipe dasar), 32 bit konstanta simbolik yang telah ditentukan sebelumnya dari /etc/iproute2/rt_realms (dalam desimal): kosmos 0 Tolak pernyataan dengan rentang tanda meta ditetapkan 0-100
- Pengoperasian menampilkan daftar tabel telah dipercepat. Dukungan yang diterapkan untuk opsi -t/—terse untuk mempercepat perintah “list table” dan “list set”.
- Konversi ekspresi meter menjadi set set dinamis disediakan: tambahkan aturan tc tcp dport 80 meter m ukuran 128 { ip saddr timeout 2s limit rate 10/detik } akan dikonversi ke set m { ketik ipv4_addr ukuran 128 flags dinamis, batas waktu } tcp dport 80 pembaruan @m { ip saddr timeout 2s limit rate 10/detik burst 5 paket }
- Dalam format JSON, dukungan untuk objek synproxy dan kumpulan peta dengan data gabungan telah ditambahkan.
- Kumpulan yang ditentukan dalam format JSON mendukung tanda penggabungan otomatis.
- Saat menggunakan representasi JSON, beberapa perangkat dapat ditentukan di blok "rantai".
- Saat menggunakan opsi -f/—nama file, pemrosesan jalur dipastikan relatif terhadap direktori file saat ini.
- Saat menggunakan opsi -I/--include, jalur sekarang dihitung dari akhir daftar secara default.
- Opsi -o/—optimize telah ditingkatkan agar berfungsi dengan ekspresi yang berisi penghitung nilai: # nft -c -o -f ruleset.nft Penggabungan: ruleset.nft:5:17-45: ct state invalid counter drop ruleset.nft : 6:17 -59: ct state didirikan, counter terkait diterima ke: ct state vmap { counter tidak valid : drop, counter didirikan : diterima, counter terkait : diterima } Penggabungan: ruleset.nft:7:17-43: tcp dport 80 counter terima aturan yang ditetapkan nft:8:17-44: tcp dport 123 penghitung terima ke: tcp dport { 80, 123 } penghitung terima Penggabungan: aturan yang ditetapkan.nft:9:17-64: ip saddr 1.1.1.1 ip daddr 2.2.2.2 penghitung terima aturan nft:10:17-62: ip saddr 1.1.1.2 ip daddr 3.3.3.3 penghitung masuk ke: ip saddr . ip daddr vmap { 1.1.1.1 . 2.2.2.2 penghitung : menerima, 1.1.1.2 . 3.3.3.3 penghitung : jatuhkan }
- Kompatibilitas yang dipulihkan dengan kumpulan elemen dump yang dibuat di nftables sebelum versi 0.9.8.
Sumber: opennet.ru
