1

Проект Netfilter представил второй выпуск нового пакетного фильтра nftables (0.2), а также соответствующий выпуск вспомогательной библиотеки libnftnl 1.0.1.

В рамках проекта Nftables развивается новая реализация пакетного фильтра, унифицирующая интерфейсы фильтрации пакетов для IPv4, IPv6, ARP и сетевых мостов, и нацеленная на замену iptables, ip6table, arptables и ebtables. Для реализации поставленной задачи Nftables предоставляет на уровне ядра лишь общий интерфейс, не зависящий от конкретного протокола и предоставляющий базовые функции извлечения данных из пакетов, выполнения операций с данными и управления потоком. Непосредственно логика фильтрации и специфичные для протоколов обработчики компилируются в байткод в пространстве пользователя, после чего данный байткод загружается в ядро при помощи интерфейса Netlink и выполняется в специальной виртуальной машине, напоминающей BPF (Berkeley Packet Filters).

Новые возможности, доступные в данной версии:

  • Поддержка гибридных IPv4/IPv6 таблиц. По умолчанию, правила в такой таблице применяются как к IPv4, так и к IPv6-пакетам. Исключение составляют те правила, для которых протокол указан явно. Пример работы с подобной таблицей:
            nft inet filter input ip saddr 192.168.0.0/24 jump from_lan
            nft inet filter input ip6 saddr 2001::/64 jump from_lan
            nft inet filter input tcp dport ssh accept
            nft inet filter input iif lo accept

  • Возможность изменения метаинформации о пакете, в частности, метки (аналог iptables -j MARK), класса шейпера (iptables -j CLASSIFY) и статуса трассировки (iptables -j TRACE). Например,

            nft filter input mark set 0x1

        устанавливает метку пакета в значение 1, а

            nft filter input mark set mark | 0x1

        устанавливает в единицу младший бит метки, не меняя остальные.

        Особенный интерес представляет возможность использования меток соединений в словарях (maps), что позволяет, например, в рамках одного правила устанавливать различные метки в зависимости от исходных IP-адресов пакетов:

            nft filter input mark set ip saddr map {
                192.168.0.0/24 : 0x1,
                192.168.1.0-192.168.1.64 : 0x2,
                192.168.2.1 : 0x3,
                * : 0x4
            }

        Кроме того, метка может быть рассчитана на основании арифметических операций с адресами пакета (аналог неофициального дополнения к iptables IPMARK):

            nft filter input ip saddr 192.168.0.0/16 mark set ip saddr & 0xff00

  • Управление метками соединений (аналог iptables -j CONNMARK). В частности, поддерживается возможность установки метки соединения на основании метки пакета и наоборот, а также прямое задание метки соединения.

  • Поддержка именованных меток соединений (аналог iptables -m connlabel).

  • Возможность балансировки пакетов, передаваемых на обработку вспомогательным программам, между несколькими очередями, что позволяет более эффективно организовывать работу на системах с большим трафиком (аналог iptables -j NFQUEUE --queue-balance).

  • Реализован экспорт набора правил в форматы XML и JSON. Возможность импорта ожидается в следующем выпуске.

  • Поддержка комментариев, встроенных непосредственно в правила (аналог iptables -m comment):

            nft filter input tcp dport ssh accept comment "SSH access"

  • При чтении файла с правилами, содержащего ошибки, операция прерывается только после 10 ошибок (а не после первой, как раньше), что значительно ускоряет процесс отладки больших наборов правил.

  • Добавлена новая команда create для создания таблиц и цепочек. В отличие от уже имеющейся команды add, create не выдает ошибки, если создаваемый объект уже существует.

  • Исправлен ряд ошибок, в частности, улучшена работа с символьными переменными.

  • Также внесены некоторые изменения в синтаксис правил:

    • В некоторых meta-выражениях (mark, iif, iifname, iiftype, oif, oifname, oiftype, skuid, skgid, nftrace, rtclassid) явное указание слова meta теперь необязательно.

    • Приведены к единой схеме имена типов данных, используемые в декларации списков (set) и словарей (maps). В частности, типы, связанные с адресами, теперь именуются *_addr, с протоколами — *_proto, с интерфейсами — iface_*. Тип "arphrd" переименован в "iface_type".

Источник: http://www.opennet.ru/opennews/art.shtml?num=39596

ᛈᚺ'ᚾᚷᛚᚢᛁ ᛗᚷᛚᚹ'ᚾᚨᚠᚺ ᚲᛏᚺᚢᛚᚺᚢ ᚱ'lᚷᛖᚺ ᚹᚷᚨᚺ'ᚾᚨᚷᛚ ᚠᚺᛏᚨᚷᚾ

Asus Prime B460M-K, i5-10500, Intel 630 UHD, DDR4 32 GB, SSD 500GB + HDD 2TB | Linux Mint 21.3 Cinnamon + Fedora 39 MATE (Compiz) + Windows 11 + macOS 12 Monterey