rilis filter paket nftables 0.9.5

diterbitkan pelepasan filter paket tabel nft 0.9.5, 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.5 berfungsi disertakan dalam kernel Linux 5.7.

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 penghitung paket dan lalu lintas yang terkait dengan elemen set telah ditambahkan ke set. Penghitung diaktifkan menggunakan kata kunci “penghitung”:

    tabel ip x {
    himpunan kamu {
    jenis ip saddr
    melawan
    elemen = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
    }

    rantai z {
    jenis filter prioritas keluaran kait filter; menerima kebijakan;
    ip ayah @y
    }
    }

  • Untuk mengatur nilai awal penghitung, misalnya untuk mengembalikan penghitung sebelumnya setelah restart, Anda dapat menggunakan perintah “nft -f”:

    # aturan kucing.nft
    tabel ip x {
    himpunan kamu {
    jenis ip saddr
    melawan
    elemen = { 192.168.10.35 paket penghitung 1 byte 84, 192.168.10.101 \
    counter p 192.168.10.135 paket counter 0 byte 0 }
    }

    rantai z {
    jenis filter prioritas keluaran kait filter; menerima kebijakan;
    ip ayah @y
    }
    }
    # nft -f aturan.nft
    #nft daftar aturan aturan
    tabel ip x {
    himpunan kamu {
    jenis ip saddr
    melawan
    elemen = { 192.168.10.35 paket penghitung 1 byte 84, 192.168.10.101 \
    counter p 192.168.10.135 paket counter 0 byte 0 }
    }

    rantai z {
    jenis filter prioritas keluaran kait filter; menerima kebijakan;
    ip ayah @y
    }
    }

  • Dukungan balasan juga telah ditambahkan ke tabel alur:

    tabel ip foo {
    bilah tabel aliran {
    prioritas masuknya kait -100
    perangkat = { eth0, eth1 }
    melawan
    }

    rantai ke depan {
    tipe filter kait filter prioritas maju;
    aliran tambahkan @bar counter
    }
    }

    Anda dapat melihat daftar penghitung menggunakan perintah “conntrack -L”:

    tcp 6 src=192.168.10.2 dst=10.0.1.2 sport=47278 dport=5201 paket=9 byte=608 \
    src=10.0.1.2 dst=10.0.1.1 sport=5201 dport=47278 paket=8 byte=428 [OFFLOAD] mark=0 \
    secctx=null use=2 tcp 6 src=192.168.10.2 dst=10.0.1.2 sport=47280 dport=5201 \
    paket=1005763 byte=44075714753 src=10.0.1.2 dst=10.0.1.1 sport=5201 dport=47280 \
    paket=967505 byte=50310268 [OFFLOAD] tanda=0 detik=null use=2

  • Dalam kumpulan untuk penggabungan (penggabungan, kumpulan alamat dan port tertentu yang menyederhanakan perbandingan), dimungkinkan untuk menggunakan arahan "typeof", yang menentukan tipe data elemen untuk bagian penyusun elemen kumpulan:

    tabel ip foo {
    tetapkan daftar putih {
    jenis ip saddr. tcp dport
    elemen = { 192.168.10.35 . 80, 192.168.10.101. 80}
    }

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

  • Arahan typeof sekarang juga berlaku untuk gabungan dalam daftar peta:

    tabel ip foo {
    peta addr2mark {
    jenis ip saddr. tcp dport : tanda meta
    elemen = { 192.168.10.35 . 80 : 0x00000001,
    192.168.10.135. 80 : 0x00000002 }
    }

    batang rantai {
    tipe filter hook prerouting filter prioritas; penurunan kebijakan;
    tanda meta mengatur ip daddr. tcp dport map @addr2mark terima
    }
    }

  • Menambahkan dukungan untuk gabungan rentang dalam kumpulan anonim (tanpa nama):

    # nft tambahkan aturan filter inet masukan ip daddr. tcp dport\
    { 10.0.0.0/8 . 10-23, 192.168.1.1-192.168.3.8. 80-443 } terima

  • Kemampuan untuk membuang paket dengan flag 802.1q (VLAN) saat memproses jembatan jaringan disediakan:

    # nft tambahkan aturan jembatan foo bar ether ketik vlan tolak dengan reset tcp

  • Menambahkan dukungan untuk pencocokan berdasarkan pengidentifikasi sesi TCP (ID koneksi). Untuk menentukan ID conntrack, Anda dapat menggunakan opsi “--output id”:

    # conntrack -L —id keluaran
    udp 17 18 src=192.168.2.118 dst=192.168.2.1 sport=36424 dport=53 paket=2 \
    byte=122 src=192.168.2.1 dst=192.168.2.118 sport=53 dport=36424 paket=2 byte=320 \
    [DIJAMIN] tandai=0 gunakan=1 id=2779986232

    # nft tambahkan aturan foo bar ct id 2779986232 penghitung

Sumber: opennet.ru

Tambah komentar