Первый пригодный для пользователей релиз пакетного фильтра Nftables
Проект Netfilter представил первый ориентированный на конечных пользователей выпуск пакетного фильтра Nftables 0.099, а также релиз сопутствующей библиотеки libnftnl 1.0.0, предоставляющей низкоуровневый API для взаимодействия с подсистемой nf_tables. Напомним, что подсистема nf_tables включена в состав ядра Linux 3.13, а в рамках пакета Nftables поставляются компоненты, работающие в пространстве пользователя.
Выпуск Nftables 0.099 уже не позиционируется как альфа-версия и отмечен как пригодный для персонального использования, но пока не рекомендуется для промышленного применения. Сообщается, что до выпуска Nftables 0.1 не исключено незначительное изменение грамматики правил и внесение нарушающих совместимость изменений. Одновременно анонсирован пакет nftables-plus 0.099, который включает в себя дополнительные патчи для улучшения удобства использования.
В рамках проекта Nftables развивается новая реализация пакетного фильтра, унифицирующая интерфейсы фильтрации пакетов для IPv4, IPv6, ARP и сетевых мостов, и нацеленная на замену iptables, ip6table, arptables и ebtables. Для реализации поставленной задачи Nftables предоставляет на уровне ядра лишь общий интерфейс, не зависящий от конкретного протокола и предоставляющий базовые функции извлечения данных из пакетов, выполнения операций с данными и управления потоком. В работе используются уже существующие типовые универсальные компоненты инфраструктуры Netfilter, в том числе применяются существующие хуки, система отслеживания состояния соединений, компоненты организации очередей и подсистема ведения лога.
Непосредственно логика фильтрации и специфичные для протоколов обработчики компилируются в байткод в пространстве пользователя, после чего данный байткод загружается в ядро при помощи интерфейса Netlink и выполняется в специальной виртуальной машине, напоминающей BPF (Berkeley Packet Filters). Например, если в iptables при выполнении в правилах сопоставления номера входящего TCP-порта использовалась специальная предопределённая функция модуля ядра xt_tcpudp, то в nftables производится формирование инструкции "прочитать в регистр 2 байта из определённой позиции заголовка пакета и сравнить содержимое регистра с указанным значением".
Подобный подход позволяет значительно сократить размер кода фильтрации, работающего на уровне ядра и вынести все функции разбора правил и логики работы с протоколами в пространство пользователя. Например, для реализации поддержки фильтрации нового протокола все изменения могут быть внесены в пользовательском пространстве без обновления кода ядра.
Для формирования правил фильтрации предлагается использовать утилиту nft, которая проверяет корректность правил и транслирует их в байткод. Правила могут как добавляться инкрементально, так и загружаться целиком из файла на диске. Синтаксис правил не похож на iptables и отличается использованием иерархических блочных структур вместо линейной схемы. Язык классификации правил основан на реальной грамматике, при обработке которой используется сгенерированный в bison парсер. Поддерживается словарный маппинг (хеши), поиск по наборам правил (sets), диапазоны значений (можно определять подсети), средства для отслеживания соединений, NAT, ведение лога. Для обеспечения совместимости с правилами iptables/ip6tables предоставляется специальная прослойка. Пример правил:
Цельнотянуто с \url[Опеннет]{opennet.ru}>>> Подробнее
Dr.uid(*) (2014-01-22 20:01:04) Отредактировано Dr.uid по причине разметка как обычно глючит... Mozilla/5.0 (X11; Linux x86_64; rv:26.0) Gecko/20100101 Firefox/26.0 Подтверждено: SystemV(*) (2014-01-22 20:14:23)
Re:Первый пригодный для пользователей релиз пакетного фильтра Nftables
Я хочу красивый гуй! И чтобы окошко выскакивало, когда приложение хочет в интернет. И чтобы можно было разрешить ему ходить на http://microsoft.com и запретить на http://kernel.org.
anonymous(*)(2014-01-23 13:09:09) Отредактировано anonymous по причине "не указана"
Re:Первый пригодный для пользователей релиз пакетного фильтра Nftables
А когда добавят возможность фильтровать пакеты от конкретных приложений (да-да, прям как в винде)?