nftables 0.9.8

Теги

nftables — подсистема ядра Linux, обеспечивающая фильтрацию и классификацию сетевых пакетов/датаграмм/кадров. 

nftables включен в ядро Linux, начиная с версии 3.13, выпущенной 19 января 2014 года. Является проектом по замене фреймворков iptables, ip6tables, arptables, ebtables в межсетевом экране Netfilter. За счёт объединения функциональности фреймворков, в nftables присутствует меньшее дублирование кода при построении правил для Netfilter и низкоуровневая оптимизация.

В пакет nftables входят компоненты пакетного фильтра, работающие в пространстве пользователя, в то время как на уровне ядра работу обеспечивает подсистема nf_tables, входящая в состав ядра Linux начиная с выпуска 3.13. Необходимые для работы выпуска nftables 0.9.8 изменения включены в состав ядра Linux 5.11-rc1. 

На уровне ядра предоставляется лишь общий интерфейс, не зависящий от конкретного протокола и предоставляющий базовые функции извлечения данных из пакетов, выполнения операций с данными и управления потоком.

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

Основные изменения:

  • Появилась полноценная поддержка проверки содержимого полей в заголовках ICMP-пакетов.
  • Добавлена возможность сопоставления с использованием сырых значений опций TCP.
  • Добавлена возможность проверки наличия в пакете любых опций TCP. 
  • Предоставлена возможность отклонения трафика из цепочки "ingress", обрабатываемой на том же уровне, что ingress-обработчик в цепочке netdev (hook ingress), т.е. на стадии когда драйвер передаёт пакет сетевому стеку ядра. 
  • Проведена оптимизация генерации байткода для сопоставления префиксов.
  • Добавлена возможность указания нескольких выражений для каждого элемента set-списков. Необходимая функциональность появилась начиная с ядра Linux 5.11-rc1.
  • В CLI-интерфейс "nft -i" добавлена поддержка редактирования командной строки при помощи библиотеки editline вместо readline. 

В пространстве пользователя nftables настраивается при помощи утилиты nft.