rilis filter paket nftables 1.0.3

Rilis filter paket nftables 1.0.3 telah diterbitkan, menyatukan antarmuka pemfilteran paket untuk IPv4, IPv6, ARP dan jembatan jaringan (bertujuan untuk menggantikan iptables, ip6table, arptables, dan ebtables). Perubahan yang diperlukan agar rilis nftables 1.0.3 dapat berfungsi disertakan dalam kernel Linux 5.18.

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:

  • Daftar set sekarang mendukung pencocokan nama antarmuka jaringan dengan topeng, misalnya, ditentukan menggunakan simbol “*”: table inet testifsets { set simple_wild { ketik ifname flags interval elements = { “abcdef*”, “othername”, “ppp0” } } rantai v4icmp { ketik prioritas masukan kait filter 0; penerimaan kebijakan; iifname @simple_wild paket penghitung 0 byte 0 iifname { “abcdef*”, “eth0” } paket penghitung 0 byte 0 } }
  • Menerapkan penggabungan otomatis elemen set-list yang berpotongan selama operasi. Sebelumnya, ketika opsi “penggabungan otomatis” ditetapkan, penggabungan dilakukan pada tahap deklarasi aturan, tetapi sekarang ini juga berfungsi ketika elemen baru ditambahkan secara bertahap selama operasi. Misalnya, pada tahap deklarasi, kumpulan daftar y { menandai interval elemen penggabungan otomatis = { 1.2.3.0, 1.2.3.255, 1.2.3.0/24, 3.3.3.3, 4.4.4.4, 4.4.4.4-4.4.4.8 , 3.3.3.4 , 3.3.3.5 } } akan diubah menjadi elemen = { 1.2.3.0/24, 3.3.3.3-3.3.3.5, 4.4.4.4-4.4.4.8 } dan kemudian jika Anda menambahkan elemen baru # nft tambahkan elemen ip xy { 1.2.3.0 -1.2.4.255, 3.3.3.6 } akan terlihat seperti elemen = { 1.2.3.0-1.2.4.255, 3.3.3.3-3.3.3.6, 4.4.4.4-4.4.4.8 }

    Saat Anda menghapus item individual dari daftar yang termasuk dalam item rentang yang ada, rentang tersebut akan diperpendek atau dibagi.

  • Dukungan untuk menggabungkan beberapa aturan terjemahan alamat (NAT) ke dalam daftar peta telah ditambahkan ke pengoptimal aturan, yang dipanggil ketika opsi “-o/—optimize” ditentukan. Misalnya, untuk himpunan # cat ruleset.nft table ip x { chain y { ketik nat hook postrouting prioritas srcnat; penurunan kebijakan; ip saddr 1.1.1.1 tcp dport 8000 snat ke 4.4.4.4:80 ip saddr 2.2.2.2 tcp dport 8001 snat ke 5.5.5.5:90 } }

    mengeksekusi “nft -o -c -f ruleset.nft” akan mengubah aturan “ip saddr” yang terpisah menjadi daftar peta: snat ke ip saddr . peta dport tcp { 1.1.1.1 . 8000: 4.4.4.4. 80, 2.2.2.2. 8001: 5.5.5.5. 90}

    Demikian pula, ekspresi mentah dapat diubah menjadi daftar peta: # cat ruleset.nft table ip x { […] chain nat_dns_acme { udp length 47-63 @th,160,128 0x0e373135363130333131303735353203 goto nat_dns_dnstc udp length 62-78 @th ,160,128 0x0e31393032383939353831343037320e buka nat_dns_this_5301 panjang udp 62-78 @th,160,128 0x0e31363436323733373931323934300e goto nat_dns_saturn_5301 panjang udp 62-78 @th,160,128 0x0e32393535373539353636383732310 5302 62e goto nat_dns_saturn_78 udp length 160,128-0 @th,0 38353439353637323038363633390x5303eXNUMXe goto nat_dns_saturn_XNUMX drop } }

    setelah optimasi kami mendapatkan daftar peta: udp length . @th,160,128 vmap { 47-63 . 0x0e373135363130333131303735353203 : buka nat_dns_dnstc, 62-78 . 0x0e31393032383939353831343037320e : buka nat_dns_this_5301, 62-78 . 0x0e31363436323733373931323934300e : buka nat_dns_saturn_5301, 62-78 . 0x0e32393535373539353636383732310e : buka nat_dns_saturn_5302, 62-78 . 0x0e38353439353637323038363633390e : buka nat_dns_saturn_5303 }

  • Penggunaan ekspresi mentah dalam operasi penggabungan diperbolehkan. Misalnya: #nft tambahkan aturan xy ip saddr. @ih,32,32 { 1.1.1.1 . 0x14, 2.2.2.2 . 0x1e } atau tabel x { set y { typeof ip saddr . @ih,32,32 elemen = { 1.1.1.1 . 0x14 } } }
  • Menambahkan dukungan untuk menentukan bidang header bilangan bulat dalam operasi penggabungan: table inet t { map m1 { typeof udp length . @ih,32,32 : elemen interval tanda putusan = { 20-80 . 0x14 : terima, 1-10 . 0xa : jatuhkan } } rantai c { ketik prioritas masukan kait filter 0; penurunan kebijakan; panjang udp. @ih,32,32 vmap @m1 } }
  • Menambahkan dukungan untuk mengatur ulang opsi TCP (hanya berfungsi dengan kernel Linux 5.18+): tcp flags syn reset tcp option sack-perm
  • Eksekusi perintah keluaran rantai (“nft list chain xy”) telah dipercepat.

Sumber: opennet.ru

Tambah komentar