hostprofi.ru
Подобрать хостинг
Термин·буква N

nftables

краткое определение

nftables — современный фреймворк фильтрации пакетов в ядре Linux, пришедший на смену iptables. Объединяет функциональность iptables, ip6tables, arptables и ebtables в единый инструмент с более гибким синтаксисом правил.

nftables — подсистема фильтрации сетевых пакетов в ядре Linux, включённая в ядро начиная с версии 3.13 (2014 год). Заменяет устаревший iptables и объединяет в одном инструменте: IPv4, IPv6, ARP и мостовые (bridge) таблицы. Синтаксис nftables читаем, поддерживает атомарные обновления правил и наборы данных (sets/maps) без перекомпиляции.

Как работает nftables

nftables использует виртуальную машину (VM) в ядре Linux для выполнения правил — аналогично тому, как работает BPF. Правила компилируются в байткод и исполняются в пространстве ядра без переключения контекста для каждого пакета. Это даёт выигрыш в производительности при большом числе правил по сравнению с iptables, где каждое правило — отдельная линейная проверка.

Структура nftables иерархична:

  • Table (таблица) — контейнер для chains, привязанный к семейству протоколов (ip, ip6, inet, arp, bridge)
  • Chain (цепочка) — последовательность правил с типом (filter, nat, route) и хуком (input, output, forward, prerouting, postrouting)
  • Rule (правило) — условие + действие (accept, drop, reject, log, masquerade, dnat)
  • Set (набор) — коллекция IP-адресов, портов, подсетей для эффективной фильтрации

Пример базового правила блокировки входящего SSH только с разрешённых IP:

table inet filter {
    set allowed_ssh {
        type ipv4_addr
        elements = { 192.168.1.0/24, 10.0.0.1 }
    }
    chain input {
        type filter hook input priority 0; policy drop;
        ip saddr @allowed_ssh tcp dport 22 accept
        ct state established,related accept
    }
}

История

nftables разработал Патрик Маккандл (Patrick McHardy) из команды netfilter. Первый коммит в upstream-ядро Linux — декабрь 2013 года, включён в Linux 3.13 в январе 2014. Debian 10 (2019) и Ubuntu 20.04 (2020) перешли на nftables по умолчанию. В RHEL/CentOS 8 (2019) nftables стал фреймворком по умолчанию, iptables реализован через слой совместимости iptables-nft. В 2024 году большинство дистрибутивов Linux используют nftables как основу для межсетевого экрана.

nftables vs iptables

Параметрiptablesnftables
Поддержка IPv6Отдельный ip6tablesЕдиный inet family
СинтаксисФлаги (-p tcp --dport)Читаемый (tcp dport)
Атомарные обновленияНетДа (через транзакции)
Sets/Mapsipset (отдельно)Встроено
ПроизводительностьЛинейный переборБайткод VM, хеш-таблицы

На что обращать внимание

При переходе с iptables на nftables важно: не смешивать правила iptables и nftables в одной системе (возможны конфликты). Используйте iptables-translate и iptables-restore-translate для автоматической конвертации существующих правил. На VPS-серверах с OpenVZ-виртуализацией nftables может быть недоступен из-за ограничений хост-ядра — проверяйте поддержку у провайдера.

Синтаксис nftables

Конфигурация nftables организована в таблицы (tables), цепочки (chains) и правила (rules). Таблица — пространство имён для набора цепочек. Цепочка привязывается к хуку ядра: input (входящий трафик), output (исходящий), forward (транзитный), prerouting, postrouting. Пример создания базового фаервола:

table inet filter {
    chain input {
        type filter hook input priority 0; policy drop;
        ct state established,related accept
        iif lo accept
        tcp dport { 22, 80, 443 } accept
    }
}

Преимущества перед iptables

В iptables для работы с IPv4 и IPv6 нужны разные утилиты: iptables и ip6tables. nftables объединяет их: семейство inet применяет правила ко всему IP-трафику. Это вдвое сокращает количество правил при дублировании политик для обоих протоколов.

Производительность: nftables использует JIT-компиляцию правил в байткод ядра, что ускоряет обработку пакетов при большом числе правил. Тест Netfilter Project показал ускорение на 20-40% при 10 000+ правилах по сравнению с iptables. Для хостинг-серверов с комплексными политиками фильтрации это ощутимо.

Инструменты управления и интеграция

Команда nft — основной интерфейс управления. nft list ruleset показывает все активные правила. nft -f /etc/nftables.conf загружает конфигурацию из файла. В Debian/Ubuntu nftables включён в базовую установку с версии Bullseye/Focal; systemd-юнит nftables.service загружает правила при старте.

Утилиты firewalld и ufw в новых версиях дистрибутивов используют nftables как бэкенд. Команды ufw allow 443/tcp или firewall-cmd --add-service=https транслируются в nftables-правила автоматически. Прямое редактирование через nft и через frontend-утилиты совместимо.

Другие термины