Выпуск пакетнага фільтра nftables 0.9.3

Апублікаваны выпуск пакетнага фільтра nftables 0.9.3, Які развіваецца ў якасці замены iptables, ip6table, arptables і ebtables за кошт уніфікацыі інтэрфейсаў фільтрацыі пакетаў для IPv4, IPv6, ARP і сеткавых мастоў. У пакет nftables уваходзяць кампаненты пакетнага фільтра, якія працуюць у прасторы карыстача, у той час як на ўзроўні ядра працу забяспечвае падсістэма nf_tables, уваходная ў склад ядра Linux пачынальна з выпуску 3.13. Неабходныя для працы выпуску nftables 0.9.3 змены ўключаны ў склад будучай галінкі ядра Linux 5.5.

На ўзроўні ядра падаецца толькі агульны інтэрфейс, які не залежыць ад канкрэтнага пратакола і які прадстаўляе базавыя функцыі вымання дадзеных з пакетаў, выкананні аперацый з дадзенымі і кіраванні струменем. Непасрэдна логіка фільтрацыі і спецыфічныя для пратаколаў апрацоўшчыкі кампілююцца ў байткод у прасторы карыстача, пасля чаго дадзены байткод загружаецца ў ядро ​​пры дапамозе інтэрфейсу Netlink і выконваецца ў адмысловай віртуальнай машыне, якая нагадвае BPF (Berkeley Packet Filters). Падобны падыход дазваляе значна скараціць памер кода фільтрацыі, які працуе на ўзроўні ядра і вынесці ўсе функцыі разбору правіл і логікі працы з пратаколамі ў прастору карыстача.

Асноўныя навіны:

  • Падтрымка супастаўлення пакетаў па часе. Можна вызначыць як дыяпазоны часу і дат, у якіх будзе спрацоўваць правіла, так і настроіць спрацоўванне ў асобныя дні тыдня. Таксама дададзена новая опцыя "-T" для вываду эпахальнага часу ў секундах.

    meta time "2019-12-24 16:00" - "2020-01-02 7:00"
    meta hour "17:00" - "19:00"
    meta day \"Fri\"

  • Падтрымка аднаўлення і захаванні пазнак SELinux (secmark).

    ct secmark set meta secmark
    meta secmark set ct secmark

  • Падтрымка map-спісаў synproxy, якія дазваляюць вызначаць больш аднаго правіла на бэкенд.

    table ip foo {
    synproxy https-synproxy {
    MSS 1460
    wscale 7
    timestamp sack-perm
    }

    synproxy other-synproxy {
    MSS 1460
    wscale 5
    }

    chain pre {
    type filter hook prerouting priority raw; policy accept;
    tcp dport 8888 tcp flags syn notrack
    }

    chain bar {
    type filter hook forward priority filter; policy accept;
    ct state invalid,untracked synproxy name ip saddr map { 192.168.1.0/24 : "https-synproxy", 192.168.2.0/24 : "other-synproxy" }
    }
    }

  • Магчымасць дынамічнага выдалення элементаў set-набораў з правіл апрацоўкі пакетаў.

    nft add rule … delete @set5 { ip6 saddr . ip6 daddr }

  • Падтрымка супастаўлення VLAN па ідэнтыфікатары і пратаколу, вызначаных у метададзеных інтэрфейсу сеткавага маста;

    meta ibrpvid 100
    meta ibrvproto vlan

  • Опцыя "-t" ("-terse") для выключэння элементаў set-набораў пры адлюстраванні правіл. Пры выкананні "nft -t list ruleset" будзе выведзена:

    table ip x {
    set y {
    type ipv4_addr
    }
    }

    А пры "nft list ruleset"

    table ip x {
    set y {
    type ipv4_addr
    elements = { 192.168.10.2, 192.168.20.1,
    192.168.4.4, 192.168.2.34 }
    }
    }

  • Магчымасць указання больш адной прылады ў ланцужках netdev (працуе толькі з ядром 5.5) для аб'яднання тыпавых правіл фільтрацыі.

    add table netdev x
    add chain netdev x y { \
    type filter hook ingress devices = { eth0, eth1 } priority 0;
    }

  • Магчымасць дадання апісанняў тыпаў дадзеных.

    # nft describe ipv4_addr
    datatype ipv4_addr (IPv4 address) (basetype integer), 32 bits

  • Магчымасць зборкі CLI-інтэрфейсу з бібліятэкай linenoise замест libreadline.

    ./configure -with-cli=linenoise

Крыніца: opennet.ru

Дадаць каментар