rilis filter paket nftables 1.0.0

Rilis filter paket nftables 1.0.0 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.0 dapat berfungsi disertakan dalam kernel Linux 5.13. 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 0.9.9).

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:

  • Dukungan untuk elemen topeng β€œ*” telah ditambahkan ke daftar set, yang dipicu untuk paket apa pun yang tidak termasuk dalam elemen lain yang ditentukan dalam set. tabel x { daftar blokir peta { ketik ipv4_addr : tanda putusan elemen interval = { 192.168.0.0/16 : terima, 10.0.0.0/8 : terima, * : jatuhkan } } rantai y { ketik prioritas pra-perutean kait filter 0; menerima kebijakan; ip saddr vmap @blocklist } }
  • Dimungkinkan untuk mendefinisikan variabel dari baris perintah menggunakan opsi β€œ--define”. # cat test.nft table netdev x { chain y { ketik filter hook ingress devices = $dev prioritas 0; penurunan kebijakan; } } # nft β€”definisikan dev="{ eth0, eth1 }" -f test.nft
  • Dalam daftar peta, penggunaan ekspresi konstan (stateful) diperbolehkan: tabel inet filter { map portmap { ketik inet_service : vonis counter elements = { 22 counter packets 0 bytes 0 : jump ssh_input, * counter packets 0 bytes 0 : drop } } rantai ssh_input { } rantai wan_input { tcp dport vmap @portmap } rantai prerouting { ketik filter hook prerouting prioritas mentah; menerima kebijakan; iif vmap { "lo" : lompat wan_input } } }
  • Menambahkan perintah "list hooks" untuk menampilkan daftar penangan untuk keluarga paket tertentu: # nft list hooks ip device eth0 family ip { hook ingress { +0000000010 chain netdev xy [nf_tables] +0000000300 chain inet mw [nf_tables] } input hook { -0000000100 rantai ip ab [nf_tables] +0000000300 rantai inet mz [nf_tables] } kait ke depan { -0000000225 selinux_ipv4_forward 0000000000 rantai ip ac [nf_tables] } keluaran kait { -0000000225 selinux_ipv4_output } kait postroute { +0000000225 4 selinux_ipvXNUMX_postroute } }
  • Blok antrian memungkinkan ekspresi jhash, symhash, dan numgen digabungkan untuk mendistribusikan paket ke antrian di ruang pengguna. … antrian ke symhash mod 65536 … tanda antrian bypass ke numgen inc mod 65536 … antrian ke jhash oif . meta mark mod 32 "antrian" juga dapat dikombinasikan dengan daftar peta untuk memilih antrian di ruang pengguna berdasarkan tombol arbitrer. ... tanda antrian melewati ke oifname map { "eth0" : 0, "ppp0" : 2, "eth1" : 2 }
  • Dimungkinkan untuk memperluas variabel yang menyertakan daftar kumpulan menjadi beberapa peta. tentukan antarmuka = ​​{ eth0, eth1 } tabel ip x { rantai y { ketik prioritas masukan kait filter 0; menerima kebijakan; iifname vmap { lo : menerima, $interfaces : drop } } } # nft -f x.nft # nft daftar kumpulan aturan tabel ip x { rantai y { ketik filter hook prioritas masukan 0; menerima kebijakan; iifname vmap { "lo" : terima, "eth0" : jatuhkan, "eth1" : jatuhkan } } }
  • Menggabungkan vmaps (peta putusan) pada interval diperbolehkan: # nft add rule xy tcp dport . ip saddr vmap { 1025-65535 . 192.168.10.2 : terima }
  • Sintaks yang disederhanakan untuk pemetaan NAT. Diizinkan untuk menentukan rentang alamat: ... snat ke ip saddr map { 10.141.11.4 : 192.168.2.2-192.168.2.4 } atau alamat IP dan port eksplisit: ... dnat ke ip saddr map { 10.141.11.4 : 192.168.2.3 . 80 } atau kombinasi rentang IP dan port: ... dnat ke ip saddr . peta dport tcp { 192.168.1.2 . 80: 10.141.10.2-10.141.10.5. 8888-8999 }

Sumber: opennet.ru

Tambah komentar