keluaran penapis paket nftables 0.9.5

diterbitkan pelepasan penapis paket nftables 0.9.5, 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.5 untuk berfungsi disertakan dalam kernel Linux 5.7.

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 kaunter paket dan trafik yang dikaitkan dengan elemen set telah ditambahkan pada set. Kaunter didayakan menggunakan kata kunci "kaunter":

    jadual ip x {
    set y {
    jenis ip saddr
    menentang
    elemen = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
    }

    rantai z {
    jenis penapis cangkuk keluaran penapis keutamaan; penerimaan dasar;
    ip ayah @y
    }
    }

  • Untuk menetapkan nilai awal pembilang, sebagai contoh, untuk memulihkan pembilang sebelumnya selepas dimulakan semula, anda boleh menggunakan arahan "nft -f":

    # set peraturan kucing.nft
    jadual ip x {
    set y {
    jenis ip saddr
    menentang
    elemen = { 192.168.10.35 paket pembilang 1 bait 84, 192.168.10.101 \
    pembilang p 192.168.10.135 paket pembilang 0 bait 0 }
    }

    rantai z {
    jenis penapis cangkuk keluaran penapis keutamaan; penerimaan dasar;
    ip ayah @y
    }
    }
    # nft -f ruleset.nft
    Set peraturan senarai #nft
    jadual ip x {
    set y {
    jenis ip saddr
    menentang
    elemen = { 192.168.10.35 paket pembilang 1 bait 84, 192.168.10.101 \
    pembilang p 192.168.10.135 paket pembilang 0 bait 0 }
    }

    rantai z {
    jenis penapis cangkuk keluaran penapis keutamaan; penerimaan dasar;
    ip ayah @y
    }
    }

  • Sokongan kaunter juga telah ditambahkan pada jadual alir:

    jadual ip foo {
    bar jadual alir {
    keutamaan kemasukan cangkuk -100
    peranti = { eth0, eth1 }
    menentang
    }

    rantai ke hadapan {
    jenis penapis cangkuk penapis keutamaan hadapan;
    aliran tambah @kaunter bar
    }
    }

    Anda boleh melihat senarai pembilang menggunakan arahan "conntrack -L":

    tcp 6 src=192.168.10.2 dst=10.0.1.2 sport=47278 dport=5201 paket=9 bait=608 \
    src=10.0.1.2 dst=10.0.1.1 sukan=5201 dport=47278 paket=8 bait=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 bait=44075714753 src=10.0.1.2 dst=10.0.1.1 sukan=5201 dport=47280 \
    paket=967505 bait=50310268 [OFFLOAD] markah=0 secctx=null use=2

  • Dalam set untuk penggabungan (penggabungan, berkas alamat dan port tertentu yang memudahkan perbandingan), adalah mungkin untuk menggunakan arahan "jenis", yang menentukan jenis data elemen untuk bahagian konstituen elemen set:

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

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

  • Jenis arahan kini juga digunakan untuk gabungan dalam senarai peta:

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

    bar rantai {
    taip penapis cangkuk penapis keutamaan pralaluan; kejatuhan dasar;
    set tanda meta ip daddr . tcp dport map @addr2mark terima
    }
    }

  • Sokongan tambahan untuk gabungan julat dalam set tanpa nama (tanpa nama):

    # nft tambah peraturan input penapis inet ip daddr . tcp dport\
    { 10.0.0.0/8 . 10-23, 192.168.1.1-192.168.3.8. 80-443 } terima

  • Keupayaan untuk membuang paket dengan bendera 802.1q (VLAN) apabila memproses jambatan rangkaian disediakan:

    # nft add rule bridge foo bar ether type vlan reject dengan tcp reset

  • Menambah sokongan untuk pemadanan dengan pengecam sesi TCP (ID conntrack). Untuk menentukan ID conntrack, anda boleh menggunakan pilihan "--output id":

    # conntrack -L β€”output id
    udp 17 18 src=192.168.2.118 dst=192.168.2.1 sport=36424 dport=53 paket=2 \
    bait=122 src=192.168.2.1 dst=192.168.2.118 sukan=53 dport=36424 paket=2 bait=320 \
    [ASSURED] markah=0 use=1 id=2779986232

    # nft tambah peraturan foo bar ct id 2779986232 kaunter

Sumber: opennet.ru

Tambah komen