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

Автор Сообщение
news_bot ®

Стаж: 6 лет 11 месяцев
Сообщений: 27286

Создавать темы news_bot ® написал(а)
15-Июл-2023 16:09

Опубликован выпуск пакетного фильтра nftables 1.0.8, унифицирующего интерфейсы фильтрации пакетов для IPv4, IPv6, ARP и сетевых мостов (нацелен на замену iptables, ip6table, arptables и ebtables). В пакет nftables входят компоненты пакетного фильтра, работающие в пространстве пользователя, в то время как на уровне ядра работу обеспечивает подсистема nf_tables, входящая в состав ядра Linux начиная с выпуска 3.13. На уровне ядра предоставляется лишь общий интерфейс, не зависящий от конкретного протокола и предоставляющий базовые функции извлечения данных из пакетов, выполнения операций с данными и управления потоком.
Непосредственно правила фильтрации и специфичные для протоколов обработчики компилируются в байткод в пространстве пользователя, после чего данный байткод загружается в ядро при помощи интерфейса Netlink и выполняется в ядре в специальной виртуальной машине, напоминающей BPF (Berkeley Packet Filters). Подобный подход позволяет значительно сократить размер кода фильтрации, работающего на уровне ядра и вынести все функции разбора правил и логики работы с протоколами в пространство пользователя.
Основные изменения:
  • Добавлена возможность установки меток "meta" и "ct" из других полей в правилах. Например, для создания метки "meta" на основе манипуляций с IP-адресом из заголовка DSCP можно использовать конструкции вида:
    ... meta mark set ip dscp
        ... meta mark set ip dscp and 0x0f
        ... meta mark set ip dscp < 8
        ... meta mark set (ip dscp and 0xf) < 8
  • В оптимизаторе правил, вызываемом при указании опции "-o" ("--optimize"), улучшена упаковка выражений, связанных с трансляцией адресов (NAT). Например, правила
    ip saddr 10.141.11.0/24 masquerade
       ip saddr 10.141.13.0/24 masquerade
       tcp dport 83 redirect to :8083
       tcp dport 84 redirect to :8084
    будут объединены в
    ip saddr { 10.141.11.0/24, 10.141.13.0/24 } masquerade
       redirect to :tcp dport map { 83 : 8083, 84 : 8084 }
  • В анонимных map-списках реализована поддержка сохраняющих состояние (stateful) выражений, таких как счётчики:
    ... meta mark { 0xa counter, 0xb counter }
       ... ip saddr vmap { 127.0.0.1 counter : drop, * counter : accept }
  • Появилась возможность упаковки наборов правил со сопоставленями 'ct state', без потери возможности подсчёта пакетов, например:
    ... ct state vmap { established counter : accept, \
                            related counter : accept, \
                            invalid counter : drop }
  • На системах с ядром Linux 6.5 добавлена поддержка сброса сохраняющих состояние выражений (обнуления счётчиков) в списках element, set и map:
    reset element t m '{ 1.2.3.4 }'
        reset map ip t m
        reset set ip t m
  • Упрощён синтаксис команды "reset", позволяющей обнулять сохраняющую состояние информацию в правилах, такую как счётчики и состояние квот:
    reset rules                  # сброс всех счётчиков
        reset rules ip               # сброс всех счётчиков для семейства 'ip'
        reset rules ip t             # сброс всех счётчиков для таблицы 'filter' в семействе 'ip'
        reset rules ip t c           # сброс всех счётчиков в цепочке 'input'
    При сбросе именованных объектов появилась возможность не указывать ключевое слово "table":
    reset counters
        reset counters ip
        reset counters ip filter
  • Решена проблема с выводом некорректных сообщений об ошибках из-за отсутствия указания транспортного протокола при использовании map-выражений вида
    ... redirect to :tcp dport map { 83 : 8083, 84 : 8084 }
    (осуществляет перенаправление трафика на localhost, выбирая порт перенаправления в зависимости от целевого порта, например, пакеты к порту 83 будут перенаправлены на TCP-порт 8083 хоста localhost).
  • При попытке загрузки правил, размер которых превышает ограничение, применяемое в непривилегированном пространстве имён (например, при попытке загрузки списков GeoIP в контейнере), обеспечен вывод рекомендации по увеличению значения параметра "/proc/sys/net/core/wmem_max".
  • Разрешено обновление устройств в существующих цепочках netdev.
    # cat ruleset.nft
         table netdev x {
                chain y {
                        type filter hook ingress devices = { eth0 } priority 0;
    policy accept;
                }
         }
         # nft -f ruleset.nft
         # nft add chain netdev x y '{ devices = { eth1 };  }'
         # nft list ruleset
         table netdev x {
                chain y {
                        type filter hook ingress devices = { eth0, eth1 } priority
    0; policy accept;
                }
         }
         # nft delete chain netdev x y '{ devices = { eth0 }; }'
         # nft list ruleset
         table netdev x {
                chain y {
                        type filter hook ingress devices = { eth1 } priority 0;
    policy accept;
                }
         }
  • В выводе "nft list sets" по умолчанию включено отображение элементов списка. Для отключения показа элементов предложена опция "-t" ("--terse").
  • Улучшены диагностические сообщений при ошибках, вызванных неверным выбором типа данных и некорректным использованием jump/goto в map.
    # cat test.nft
         table ip x {
                map y {
                        typeof ip saddr : verdict
                        elements = { 1.2.3.4 : filter_server1 }
                }
         }
         # nft -f test.nft
         test.nft:4:26-39: Error: Could not parse netfilter verdict; did you mean
    `jump filter_server1'?
                         elements = { 1.2.3.4 : filter_server1 }
                                                ^^^^^^^^^^^^^^
  • В наборах для присоединений (concatenation, определённые связки адресов и портов, упрощающие сопоставление) реализована возможность указания констант.
    ... update @s1 { ip saddr . 10.180.0.4 . 80 }
  • Добавлена поддержка отображения комментариев при выводе таблиц и цепочек в формате JSON:
    # nft -j list ruleset
        {"nftables": [{"metainfo": {"version": "1.0.7", "release_name": "Old Doc
    Yak", "json_schema_version": 1}}, {"table": {"family": "inet", "name": "test3",
    "handle": 4, "comment": "this is a comment"}}]}
  • Добавлена возможность использования JSON при сопоставлении инкапсулированных и туннелируемых данных. Например, для сопоставления с полем dscp, инкапсулированным в заголовок vxlan, можно использовать следующую конструкцию:
    # udp dport 4789 vxlan ip dscp 0x02
        [
            {
                "match": {
                    "left": {
                        "payload": {
                            "field": "dport",
                            "protocol": "udp"
                        }
                    },
                    "op": "==",
                    "right": 4789
                }
            },
            {
                "match": {
                   "left": {
                        "payload": {
                            "field": "dscp",
                            "protocol": "ip",
                            "tunnel": "vxlan"
                        }
                    },
                    "op": "==",
                    "right": 2
                }
            }
        ]
  • Добавлена поддержка JSON в выражении 'last used', показывающем когда последний раз использовался элемент правила или списка.
  • В команде 'nft list hooks' обеспечен показ зарегистрированных обработчиков bpf.
  • Запрещено одновременное использование параметров "-i" ("--interactive") и "-f" ("--filename").
  • В Python-привязках применение distutils заменено на setuptools.

===========
Источник:
OpenNet.RU
===========

Похожие новости: Теги для поиска: #_nftables
Профиль  ЛС 
Показать сообщения:     

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы

Текущее время: 03-Фев 08:51
Часовой пояс: UTC + 5