Проект Netfilter представил (http://marc.info/?l=netfilter&m=139022350623824&w=2) первый ориентированный на конечных пользователей выпуск пакетного фильтра Nftables 0.099 (http://netfilter.org/projects/nftables/index.html), а также релиз (http://netfilter.org/news.html#2014-01-20a) сопутствующей библиотеки libnftnl 1.0.0 (http://netfilter.org/projects/libnftnl/), предоставляющей низкоуровневый API для взаимодействия с подсистемой nf_tables. Напомним, что подсистема nf_tables включена в состав ядра Linux 3.13 (http://www.opennet.ru/opennews/art.shtml?num=38845), а в рамках пакета Nftables поставляются компоненты, работающие в пространстве пользователя. Одновременно опубликован (http://marc.info/?l=netfilter-devel&m=139026112504105&w=2) пакет nftables-plus 0.099, который включает в себя дополнительные патчи (http://xtables.de/) для улучшения удобства использования утилиты nftables.
В рамках проекта Nftables развивается новая реализация пакетного фильтра, унифицирующая интерфейсы фильтрации пакетов для IPv4, IPv6, ARP и сетевых мостов, и нацеленная на замену iptables, ip6table, arptables и ebtables. Для реализации поставленной задачи Nftables предоставляет на уровне ядра лишь общий интерфейс, не зависящий от конкретного протокола и предоставляющий базовые функции обработки пакетов, построенные с использованием типовых компонентов инфраструктуры Netfilter, в том числе применяются существующие хуки, система отслеживания состояния соединений, компоненты организации очередей и подсистема ведения лога.
Непосредственно логика фильтрации и специфичные для протоколов обработчики компилируются в байткод в пространстве пользователя, после чего данный байткод загружается в ядро при помощи интерфейса Netlink и выполняется в специальной виртуальной машине. Подобный подход позволяет значительно сократить размер кода фильтрации, работающего на уровне ядра и вынести все функции разбора правил и логики работы с протоколами в пространство пользователя. Например, для реализации поддержки фильтрации нового протокола все изменения могут быть внесены в пользовательском пространстве без обновления кода ядра.
Для формирования правил фильтрации предлагается использовать утилиту nft, которая проверяет корректность правил и транслирует их в байткод. Правила могут добавляться не только инкрементально, но и загружаться целиком из файла на диске. Синтаксис правил не похож (https://home.regit.org/netfilter-en/nftables-quick-howto/) на iptables и отличается использованием иерархических блочных структур вместо линейной схемы. Язык классификации правил основан на реальной грамматике, при обработке которой используется сгенерированный в bison парсер. Для обеспечения обратной совместимости с линейными правилами предоставляется специальная прослойка, позволяющая использовать iptables/ip6tables поверх инфраструктуры Nftables.
Пример правил:
<font color="#461b7e">
table filter {
chain input {
table filter hook input priority 0;
ct state established accept
ct state related accept
meta iif lo accept
tcp dport ssh counter packets 0 bytes 0 accept
counter packets 5 bytes 5 log drop
}
chain output {
table filter hook output priority 0;
ct state established accept
ct state related accept
meta oif lo accept
ct state new counter packets 0 bytes 0 accept
}
}
</font>
URL: http://marc.info/?l=netfilter&m=139022350623824&w=2
Новость: http://www.opennet.ru/opennews/art.shtml?num=38901