keluaran penapis paket nftables 0.9.4

diterbitkan pelepasan penapis paket nftables 0.9.4, membangun sebagai pengganti untuk iptables, ip6table, arptables dan ebtables dengan menyatukan antara muka penapisan paket untuk IPv4, IPv6, ARP dan jambatan rangkaian. Pakej nftables termasuk komponen penapis paket yang dijalankan dalam ruang pengguna, manakala kerja peringkat kernel disediakan oleh subsistem nf_tables, yang telah menjadi sebahagian daripada kernel Linux sejak keluaran 3.13. Perubahan yang diperlukan untuk keluaran nftables 0.9.4 untuk berfungsi disertakan dalam cawangan kernel masa hadapan Linux 5.6.

Tahap kernel hanya menyediakan antara muka bebas protokol generik yang menyediakan fungsi asas untuk mengekstrak data daripada paket, melaksanakan operasi data dan kawalan aliran. Peraturan penapisan dan pengendali khusus protokol disusun menjadi kod bait dalam ruang pengguna, selepas itu kod bait ini dimuatkan ke dalam kernel menggunakan antara muka Netlink dan dilaksanakan dalam kernel dalam mesin maya khas yang mengingatkan BPF (Penapis Paket Berkeley). Pendekatan ini membolehkan anda mengurangkan dengan ketara saiz kod penapisan yang berjalan pada peringkat kernel dan memindahkan semua fungsi peraturan dan logik penghuraian untuk bekerja dengan protokol ke dalam ruang pengguna.

Inovasi utama:

  • Sokongan untuk julat dalam sambungan (penggabungan, himpunan alamat dan port tertentu yang memudahkan perbandingan). Sebagai contoh, untuk set "senarai putih" yang unsur-unsurnya ialah lampiran, menyatakan bendera "selang waktu" akan menunjukkan bahawa set itu boleh memasukkan julat dalam lampiran (untuk lampiran "ipv4_addr . ipv4_addr . inet_service" sebelum ini mungkin untuk menyenaraikan dengan tepat padanan bentuk "192.168.10.35. 192.68.11.123", dan kini anda boleh menentukan kumpulan alamat "80-192.168.10.35-192.168.10.40":192.68.11.123.

    jadual ip foo {
    tetapkan senarai putih {
    taip ipv4_addr . ipv4_addr. inet_service
    selang bendera
    elemen = { 192.168.10.35-192.168.10.40 . 192.68.11.123-192.168.11.125. 80}
    }

    bar rantai {
    taip penapis cangkuk penapis keutamaan pralaluan; kejatuhan dasar;
    ip saddr. ip dadr. tcp dport @whitelist terima
    }
    }

  • Dalam set dan senarai peta, adalah mungkin untuk menggunakan arahan "jenis", yang menentukan format elemen apabila dipadankan.
    Sebagai contoh:

    jadual ip foo {
    tetapkan senarai putih {
    jenis ip saddr
    elemen = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
    }

    bar rantai {
    taip penapis cangkuk penapis keutamaan pralaluan; kejatuhan dasar;
    ip daddr @whitelist terima
    }
    }

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

  • Menambahkan keupayaan untuk menggunakan cantuman dalam pengikatan NAT, yang membolehkan anda menentukan alamat dan port apabila mentakrifkan transformasi NAT berdasarkan senarai peta atau set bernama:

    nft add rule ip nat pre dnat ip addr . port ke peta ip saddr { 1.1.1.1 : 2.2.2.2 . tiga puluh }

    nft tambah peta ip nat destinasi { taip ipv4_addr . inet_service: ipv4_addr. inet_service \\; }
    nft add rule ip nat pre dnat ip addr . port ke ip saddr. tcp dport peta @destinasi

  • Sokongan untuk pecutan perkakasan dengan beberapa operasi penapisan yang dijalankan oleh kad rangkaian. Pecutan didayakan melalui utiliti ethtool ("ethtool -K eth0 hw-tc-offload on"), selepas itu ia diaktifkan dalam nftables untuk rantai utama menggunakan bendera "offload". Apabila menggunakan kernel Linux 5.6, pecutan perkakasan disokong untuk pemadanan medan pengepala dan pemeriksaan antara muka masuk dalam kombinasi dengan menerima, membuang, menduplikasi (duplikasi) dan memajukan (fwd) paket. Dalam contoh di bawah, operasi menjatuhkan paket yang datang dari alamat 192.168.30.20 dilakukan pada tahap kad rangkaian, tanpa menghantar paket ke kernel:

    # fail kucing.nft
    jadual netdev x {
    rantai y {
    jenis penapis cangkuk kemasukan peranti eth0 keutamaan 10; pemuatan bendera;
    ip saddr 192.168.30.20 jatuh
    }
    }
    # nft -f fail.nft

  • Maklumat yang dipertingkatkan tentang lokasi ralat dalam peraturan.

    # nft padam peraturan ip yz pemegang 7
    Ralat: Tidak dapat memproses peraturan: Tiada fail atau direktori sedemikian
    padam peraturan ip yz pemegang 7
    ^

    # nft padam peraturan ip xx pemegang 7
    Ralat: Tidak dapat memproses peraturan: Tiada fail atau direktori sedemikian
    padam peraturan ip xx pemegang 7
    ^

    # nft padam jadual twst
    Ralat: Tiada fail atau direktori sedemikian; adakah anda maksudkan jadual Γ’β‚¬Λœujian' dalam ip keluarga?
    padam jadual twst
    ^^^^

    Contoh pertama menunjukkan bahawa jadual "y" tiada dalam sistem, yang kedua bahawa pengendali "7" tiada, dan yang ketiga bahawa gesaan menaip dipaparkan semasa menaip nama jadual.

  • Menambah sokongan untuk menyemak antara muka hamba dengan menyatakan "meta sdif" atau "meta sdifname":

    ... meta sdifname vrf1 ...

  • Menambah sokongan untuk operasi syif kanan atau kiri. Sebagai contoh, untuk mengalihkan label paket sedia ada ditinggalkan sebanyak 1 bit dan menetapkan bit kecil kepada 1:

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

  • Melaksanakan pilihan "-V" untuk memaparkan maklumat versi lanjutan.

    # nft -V
    nftables v0.9.4 (Jive at Five)
    cli:readline
    json: ya
    minigmp: tidak
    libxtables: ya

  • Pilihan baris perintah kini mesti ditentukan sebelum arahan. Sebagai contoh, anda perlu menentukan "nft -a list ruleset", dan menjalankan "nft list ruleset -a" akan mengakibatkan ralat.

    Sumber: opennet.ru

Tambah komen