rilis filter paket nftables 0.9.4

diterbitkan pelepasan filter paket tabel nft 0.9.4, berkembang sebagai pengganti iptables, ip6table, arptables, dan ebtables dengan menyatukan antarmuka pemfilteran paket untuk IPv4, IPv6, ARP, dan jembatan jaringan. 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. Perubahan yang diperlukan agar rilis nftables 0.9.4 dapat berfungsi disertakan dalam cabang kernel masa depan Linux 5.6.

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 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 mesin virtual khusus yang mengingatkan pada BPF (Berkeley Packet Filters). Pendekatan ini memungkinkan Anda untuk secara signifikan mengurangi ukuran kode pemfilteran yang berjalan di tingkat kernel dan memindahkan semua fungsi aturan penguraian dan logika untuk bekerja dengan protokol ke dalam ruang pengguna.

Inovasi utama:

  • Dukungan untuk rentang koneksi (penggabungan, kumpulan alamat dan port tertentu yang menyederhanakan perbandingan). Misalnya, untuk kumpulan "daftar putih" yang elemennya merupakan lampiran, menentukan tanda "interval" akan menunjukkan bahwa kumpulan tersebut dapat menyertakan rentang dalam lampiran (untuk lampiran "ipv4_addr .ipv4_addr .inet_service" sebelumnya dimungkinkan untuk mencantumkan secara tepat kecocokan dalam bentuk "192.168.10.35", dan sekarang Anda dapat menentukan grup alamat "192.68.11.123-80-192.168.10.35"):

    tabel ip foo {
    tetapkan daftar putih {
    ketik ipv4_addr. ipv4_addr. inet_service
    interval bendera
    elemen = { 192.168.10.35-192.168.10.40 . 192.68.11.123-192.168.11.125. 80}
    }

    batang rantai {
    tipe filter hook prerouting filter prioritas; penurunan kebijakan;
    ip saddr. ip ayahdr. tcp dport @whitelist terima
    }
    }

  • Dalam set dan daftar peta, dimungkinkan untuk menggunakan direktif “typeof”, yang menentukan format elemen saat mencocokkan.
    Sebagai contoh:

    tabel ip foo {
    tetapkan daftar putih {
    jenis ip saddr
    elemen = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
    }

    batang rantai {
    tipe filter hook prerouting filter prioritas; penurunan kebijakan;
    ip daddr @whitelist terima
    }
    }

    tabel ip foo {
    peta addr2mark {
    typeof ip saddr : tanda meta
    elemen = { 192.168.10.35 : 0x00000001, 192.168.10.135 : 0x00000002 }
    }
    }

  • Menambahkan kemampuan untuk menggunakan gabungan dalam pengikatan NAT, yang memungkinkan Anda menentukan alamat dan port saat menentukan transformasi NAT berdasarkan daftar peta atau kumpulan bernama:

    nft tambahkan aturan ip nat sebelum dnat ip addr. port ke ip saddr peta { 1.1.1.1 : 2.2.2.2 . tiga puluh }

    nft tambahkan peta tujuan ip nat { ketik ipv4_addr . inet_service: ipv4_addr. inet_service\; }
    nft tambahkan aturan ip nat sebelum dnat ip addr. port ke ip saddr. tcp dport peta @destinasi

  • Dukungan untuk akselerasi perangkat keras dengan beberapa operasi penyaringan yang dilakukan oleh kartu jaringan. Akselerasi diaktifkan melalui utilitas ethtool (“ethtool -K eth0 hw-tc-offload on”), setelah itu diaktifkan di nftables untuk rantai utama menggunakan tanda “offload”. Saat menggunakan kernel Linux 5.6, akselerasi perangkat keras didukung untuk pencocokan bidang header dan pemeriksaan antarmuka masuk yang dikombinasikan dengan paket penerimaan, pembuangan, penggandaan (dup), dan penerusan (fwd). Pada contoh di bawah, operasi menjatuhkan paket yang berasal dari alamat 192.168.30.20 dilakukan di tingkat kartu jaringan, tanpa meneruskan paket ke kernel:

    # file kucing.nft
    tabel netdev x {
    rantai kamu {
    ketik perangkat masuknya kait filter eth0 prioritas 10; pembongkaran bendera;
    ip saddr 192.168.30.20 jatuh
    }
    }
    # nft -f file.nft

  • Peningkatan informasi tentang lokasi kesalahan dalam aturan.

    # nft hapus aturan ip yz handle 7
    Kesalahan: Tidak dapat memproses aturan: Tidak ada file atau direktori tersebut
    hapus aturan ip yz handle 7
    ^

    # nft hapus aturan ip xx handle 7
    Kesalahan: Tidak dapat memproses aturan: Tidak ada file atau direktori tersebut
    hapus aturan ip xx pegangan 7
    ^

    # nft hapus tabel twst
    Kesalahan: Tidak ada file atau direktori tersebut; apakah maksud Anda tabel 'test' di ip keluarga?
    hapus tabel twst
    ^^^^

    Contoh pertama menunjukkan bahwa tabel “y” tidak ada dalam sistem, contoh kedua menunjukkan bahwa handler “7” tidak ada, dan contoh ketiga menampilkan prompt kesalahan ketik saat mengetik nama tabel.

  • Menambahkan dukungan untuk memeriksa antarmuka budak dengan menentukan “meta sdif” atau “meta sdifname”:

    ... meta sdifname vrf1 ...

  • Menambahkan dukungan untuk operasi shift kanan atau kiri. Misalnya, untuk menggeser label paket yang ada ke kiri sebanyak 1 bit dan menyetel bit minor ke 1:

    … tanda meta mengatur tanda meta lshift 1 atau 0x1 …

  • Opsi "-V" yang diterapkan untuk menampilkan informasi versi yang diperluas.

    # nft-V
    nftables v0.9.4 (Jive di Lima)
    klik: garis baca
    json: ya
    minigmp: tidak
    libxtables: ya

  • Opsi baris perintah sekarang harus ditentukan sebelum perintah. Misalnya, Anda perlu menentukan “nft -a list ruleset”, dan menjalankan “nft list ruleset -a” akan menghasilkan kesalahan.

    Sumber: opennet.ru

Tambah komentar