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

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

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

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

  • Падтрымка дыяпазонаў ў далучэннях (concatenation, пэўныя звязкі адрасоў і партоў, якія спрашчаюць супастаўленне). Напрыклад, для набору "whitelist", элементы якога з'яўляюцца далучэннем, указанне сцяга "interval" будзе паказваць на тое, што набор можа ўключаць дыяпазоны ў далучэнні (для далучэння "ipv4_addr . ipv4_addr . inet_service" раней можна было пералічваць дакладныя супадзенні выгляду "192.168.10.35. 192.68.11.123 - 80 - 192.168.10.35», а цяпер можна ўказваць групы адрасоў «192.168.10.40-192.68.11.123. 192.168.11.125-80»

    table ip foo {
    set whitelist {
    тып ipv4_addr. ipv4_addr. inet_service
    flags interval
    elements = {192.168.10.35-192.168.10.40. 192.68.11.123-192.168.11.125. 80 }
    }

    chain bar {
    type filter hook prerouting priority filter; policy drop;
    ip saddr. ip daddr. tcp dport @whitelist accept
    }
    }

  • У наборах і map-спісах забяспечана магчымасць выкарыстання дырэктывы "typeof", якая вызначае фармат элемента пры супастаўленні.
    Напрыклад:

    table ip foo {
    set whitelist {
    typeof ip saddr
    elements = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
    }

    chain bar {
    type filter hook prerouting priority filter; policy drop;
    ip daddr @whitelist accept
    }
    }

    table ip foo {
    map addr2mark {
    typeof ip saddr: meta mark
    elements = { 192.168.10.35 : 0x00000001, 192.168.10.135 : 0x00000002 }
    }
    }

  • Дададзена магчымасць выкарыстання далучэнняў у NAT-прывязках, што дазваляе паказваць адрас і порт пры вызначэнні NAT-пераўтварэнняў на аснове map-спісаў ці найменных набораў:

    nft add RU ip nat pre dnat ip addr . port to ip saddr map { 1.1.1.1 : 2.2.2.2 . 30 }

    nft add map ip nat destinations { type ipv4_addr . inet_service: ipv4_addr. inet_service \\; }
    nft add RU ip nat pre dnat ip addr . port to ip saddr. tcp dport map @destinations

  • Падтрымка апаратнага паскарэння з вынасам некаторых аперацый фільтрацыі на плечы сеткавай карты. Паскарэнне ўключаецца праз утыліту ethtool ("ethtool -K eth0 hw-tc-offload on"), пасля чаго актывуецца ў nftables для асноўнага ланцужка пры дапамозе сцяга "offload". Пры выкарыстанні ядра Linux 5.6 падтрымліваецца апаратнае паскарэнне для супастаўлення палёў загалоўка і праверкі ўваходнага інтэрфейсу ў спалучэнні з прыёмам, адкідваннем, дубляваннем (dup) і перанакіраваннем (fwd) пакетаў. У прыкладзе ніжэй аперацыі адкідвання пакетаў, якія прыходзяць ад адраса 192.168.30.20, выконваюцца на ўзроўні сеткавай карты, без перадачы пакетаў ядру:

    # cat file.nft
    table netdev x {
    chain y {
    type filter hook ingress device eth0 priority 10; flags offload;
    ip saddr 192.168.30.20 drop
    }
    }
    # nft -f file.nft

  • Палепшана інфармаванне аб месцы памылкі ў правілах.

    # nft delete rule ip yz handle 7
    Error: Выкарыстоўваецца ня process rule: Няма such file або directory
    delete rule ip yz handle 7
    ^

    # nft delete rule ip xx handle 7
    Error: Выкарыстоўваецца ня process rule: Няма such file або directory
    delete rule ip xx handle 7
    ^

    # nft delete table twst
    Error: Няма such file або directory; did you mean table ''test' in family ip?
    delete table twst
    ^^^^

    У першым прыкладзе паказана, што табліца "y" адсутнічае ў сістэме, у другім, што адсутнічае апрацоўшчык "7", а ў трэцім, што выводзіцца падказка аб памылцы друку пры наборы імя табліцы.

  • Дададзена падтрымка праверкі slave-інтэрфейсу праз указанне "meta sdif" або "meta sdifname":

    … meta sdifname vrf1 …

  • Дададзена падтрымка аперацыі зруху направа ці налева. Напрыклад, для зруху існай пазнакі пакета налева на 1 біт і ўсталёўкі меншага біта ў 1:

    … meta mark set meta mark lshift 1 or 0x1 …

  • Рэалізаваная опцыя "-V" для адлюстравання пашыранай інфармацыі аб версіі.

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

  • Опцыі каманднага радка зараз абавязкова павінны паказвацца перад камандамі. Напрыклад, трэба ўказваць "nft-a list ruleset", а запуск "nft list ruleset -a" прывядзе да вываду памылкі.

    Крыніца: opennet.ru

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