The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Выпуск пакетного фильтра nftables 0.4"
Отправлено opennews, 17-Дек-14 00:09 
Проект Netfilter представил (http://lists.netfilter.org/pipermail/netfilter-announce/2014...) четвёртый выпуск нового пакетного фильтра nftables (0.4), а также выпуск сопутствующей библиотеки libnftnl 1.0.3 (http://lists.netfilter.org/pipermail/netfilter-announce/2014...), предоставляющей низкоуровневый API для взаимодействия с подсистемой nf_tables. В пакет Nftables  входят компоненты пакетного фильтра, работающие в пространстве пользователя, в то время как на уровне ядра работу обеспечивает подсистема nf_tables, которая входит в состав ядра Linux начиная с выпуска 3.13.

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


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

Для формирования правил фильтрации предлагается использовать утилиту nft, которая проверяет корректность правил и транслирует их в байткод. Правила  могут как добавляться инкрементально, так и загружаться целиком из файла на диске. Синтаксис правил (http://people.netfilter.org/wiki-nftables/index.php/Main_Page) не похож (https://home.regit.org/netfilter-en/nftables-quick-howto/) на iptables и отличается использованием иерархических блочных структур  вместо линейной схемы.  Язык классификации правил основан на реальной грамматике, при обработке которой используется сгенерированный в bison парсер. Поддерживается словарный маппинг (хеши), поиск по наборам правил (sets), диапазоны значений (можно определять подсети), средства для отслеживания соединений, NAT, ведение лога. Для обеспечения совместимости с правилами iptables/ip6tables предоставляется специальная прослойка.


Особенности новой версии:


-  Поддержка операций с глобальными наборами правил (ruleset). Возможность появилась в ядре 3.18). Например, командой "<font color="#461b7e">nft flush ruleset</font>" можно разом очистить все таблицы, цепочки и правила. Посмотреть доступные наборы правил можно командой "<font color="#461b7e">nft list ruleset</font>". Результаты вывода данной команды можно сохранить в файл и затем загрузить при помощи "<font color="#461b7e">nft -f ruleset.file</font>" для восстановления сохранённого состояния, что будет аналогично выполнению iptables-restore c захватом правил для всех поддерживаемых семейств протоколов (ip, ip6, inet, bridge и arp);

-  Поддержка ведения полного лога для всех семейств протоколов, в том числе nfnetlink_log. Поддерживается начиная с ядра Linux 3.17;

-  Возможность автоматического выбора оптимальной реализации списка (set). Поддерживается начиная с ядра Linux 3.16. Метод оптимизации списка можно определить и вручную, например, для включения оптимизации по потреблению памяти можно указать "<font color="#461b7e">nft add set filter set1 { type ipv4_addr ; policy memory ; }</font>", а для оптимизации для достижения максимальной производительности - "<font color="#461b7e">nft add set filter set1 { type ipv4_addr ; policy performance ; }</font>". Аналогичным образом можно поступить и для словарей (maps), например "<font color="#461b7e">nft add map filter map1 { type ipv4_addr : verdict ; policy performace ; }</font>";

-  Полноценная поддержка операции отклонения (reject) с отправкой ответного сообщения об ошибке. Например, "<font color="#461b7e">nft add rule filter input reject with icmp type host-unreachable</font>" или "<font color="#461b7e">nft add rule filter input reject with tcp reset</font>";


-  Поддержка трансляции адресов (максарадинга) для IPv4 и IPv6. Например, "<font color="#461b7e">nft add rule nat postrouting masquerade</font>". Работает в ядрах Linux, начиная с 3.18;

-  Поддержка перенаправления запросов (redirect). Например, "<font color="#461b7e">nft add rule nat prerouting tcp dport 22 redirect to 2222</font>". Работает в ядрах Linux, начиная с 3.19-rc;

-  Поддержка NAT-флагов random, fully-random и persistent;

-  Проверка непротиворечивости пересечений между обновлениями и дампами ruleset;
-  Метаинформация о пакете расширена поддержкой сопоставлений pkttype, cpu и devgroup;

-  Добавлен скрипт для автоматического тестирования на предмет появления регрессивных изменений;
-  Возможность отключения использования библиотеки libreadline и отладки на стадии выполнения скрипта configure;
-  Система сборки переведена на использование autotools;

-  Изменение синтаксиса: Флаг 'queue' теперь рассматривается как разделённый запятыми список символов, например "<font color="#461b7e">nft add filter input counter queue num 0-3 fanout,bypass</font>";

-  По умолчанию прекращено преобразования имён в правилах. IP-адреса всегда должны задаваться в числовом представлении. Для резолвинга имён хостов следует явно указывать опцию '-N'.

URL: http://lists.netfilter.org/pipermail/netfilter-announce/2014...
Новость: http://www.opennet.ru/opennews/art.shtml?num=41282

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру