Выпуск пакетного фильтра nftables 1.1.0

Новости мира unix. Хотите узнать секрет вечного счастья? Откройте страницу 246.
Ответить
acolyte
Аватара пользователя
Сообщения: 3246
Зарегистрирован: 20.08.2022

#

Выпуск пакетного фильтра nftables 1.1.0
Дата публикации:Wed, 17 Jul 2024 12:26:21 +0300




Опубликован выпуск пакетного фильтра nftables 1.0.8, унифицирующего интерфейсы фильтрации пакетов для IPv4, IPv6, ARP и сетевых мостов (нацелен на замену iptables, ip6table, arptables и ebtables). Значительное изменение номера версии не связано с какими-то кардинальными изменениями, а лишь является следствием последовательного продолжения нумерации в десятичном исчислении (прошлый выпуск был 1.0.9). Одновременно опубликован выпуск сопутствующей библиотеки libnftnl 1.2.7, предоставляющей низкоуровневый API для взаимодействия с подсистемой nf_tables.




В пакет nftables входят компоненты пакетного фильтра, работающие в пространстве пользователя, в то время как на уровне ядра работу обеспечивает подсистема nf_tables, входящая в состав ядра Linux начиная с выпуска 3.13. На уровне ядра предоставляется лишь общий интерфейс, не зависящий от конкретного протокола и предоставляющий базовые функции извлечения данных из пакетов, выполнения операций с данными и управления потоком.



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



Основные изменения:
  • В map-выражениях добавлена поддержка переменных:

    define dst_map = { ::1234 : 5678 }

    table ip6 nat {
    map dst_map {
    typeof ip6 daddr : tcp dport;
    elements = $dst_map
    }
    chain prerouting {
    ip6 nexthdr tcp redirect to ip6 daddr map @dst_map
    }
    }

    Добавлена поддержка VLAN:

    ip saddr 10.1.1.1 icmp type echo-request vlan id set 321
    # payload
    ether type 8021ad vlan id 10 vlan type 8021q vlan id 100 vlan type ip accept

    Для выражений "log" задействован новый строковый препроцессор с поддержкой переменных:

    define message="test"
    log prefix "my $message"


    При вычислении значения выражения "meta hour" реализована обработка отрицательного смещения в часовом поясе, заданном через переменную окружения TZ:

    TZ=UTC-4 nft add rule x y meta hour "22:00"


    Обеспечено преобразование порядка следования байтов при использовании выражений ct и meta, а также при использовании операций слияния и указания диапазонов в set-наборах.



    map mapv6 {
    typeof ip6 dscp : meta mark;
    }
    meta mark set ip6 dscp map @map1

    будет получен байткод:
    [ payload load 2b @ network header + 0 => reg 1 ]
    [ bitwise reg 1 = ( reg 1 & 0x0000c00f ) ^ 0x00000000 ]
    [ byteorder reg 1 = ntoh(reg 1, 2, 2) ]
    [ bitwise reg 1 = ( reg 1 > 0x00000006 ) ]
    [ lookup reg 1 set mapv6 dreg 1 ]
    [ meta set mark with reg 1 ]


    Возобновлена поддержка команды "replace rule".

    replace rule ip t1 c1 handle 3 'jhash ip protocol . ip saddr mod 170 vmap {
    0-94 : goto wan1, 95-169 : goto wan2, 170-269 }"


    Возобновлена возможность добавления сетевых устройств в существующие flowtable:

    create flowtable inet filter f1 { hook ingress priority 0; counter }
    add flowtable inet filter f1 { devices = { dummy1 } ; }




    Решены проблемы при использовании команды "create set":

    define ip-block-4 = { 1.1.1.1 }
    create set netdev filter ip-block-4-test {
    type ipv4_addr
    flags interval
    auto-merge
    elements = $ip-block-4
    }


    Решены проблемы при использовании цифрового представления опций tcp:


    tcp option 254


    Решены проблемы при использовании выражений meta и ct с map-наборами:


    meta mark set vlan id map { 1 : 0x00000001, 4095 : 0x00004095 }


    В выражениях payload и concat запрещено указание данных размером больше 512 байтов.

    При выполнении команды "nft describe" реализован учёт значений из файлов group, rt_mark и rt_realms, размещённых в каталогах /etc/iproute2/ и /use/share/iproute2/.

    # nft describe meta rtclassid
    meta expression, datatype realm (routing realm) (basetype integer), 32 bits

    pre-defined symbolic constants from /etc/iproute2/rt_realms (in decimal):
    cosmos 0
    Reject statement with range
    meta mark set 0-100




    Ускорена операция вывода списка таблиц. Реализована поддержка опции -t/--terse для ускорения команд "list table" и "list set".


    Обеспечено преобразование выражений meter в динамические set-наборы:

    add rule t c tcp dport 80 meter m size 128 { ip saddr timeout 2s limit rate
    10/second }

    будет преобразован в

    set m {
    type ipv4_addr
    size 128
    flags dynamic,timeout
    }
    tcp dport 80 update @m { ip saddr timeout 2s limit rate 10/second burst 5
    packets }


    В представлении в формате JSON добавлена поддержка объектов synproxy и map-наборов с объединёнными данными.
    В set-наборах, заданных в формате JSON, реализована поддержка флага auto-merge.
    При использовании представления в формате JSON разрешено указание нескольких устройств в блоке "chain".
    При использовании опций -f/--filename обеспечена обработка путей, относительно каталога текущего файла.


    При использовании опций -I/--include перебор путей по умолчанию теперь осуществляется с конца списка.



    Налажена работа опций -o/--optimize с выражениями, содержащими счётчики значений:

    # nft -c -o -f ruleset.nft
    Merging:
    ruleset.nft:5:17-45: ct state invalid counter drop
    ruleset.nft :6:17-59: ct state established,related counter
    accept
    into:
    ct state vmap { invalid counter : drop, established counter : accept,
    related counter : accept }

    Merging:
    ruleset.nft:7:17-43: tcp dport 80 counter accept
    ruleset.nft:8:17-44: tcp dport 123 counter accept
    into:
    tcp dport { 80, 123 } counter accept

    Merging:
    ruleset.nft:9:17-64: ip saddr 1.1.1.1 ip daddr 2.2.2.2
    counter accept
    ruleset.nft:10:17-62: ip saddr 1.1.1.2 ip daddr 3.3.3.3
    counter drop
    into:
    ip saddr . ip daddr vmap { 1.1.1.1 . 2.2.2.2 counter : accept,
    1.1.1.2 . 3.3.3.3 counter : drop }





    Восстановлена совместимость с дампами элемента set, созданными в nftables до версии 0.9.8.





Новость позаимствована с opennet.ru
Ссылка на оригинал: https://www.opennet.ru/opennews/art.shtml?num=61564

Жизнь за Нер'зула!

Ответить