Настройка firewall через nftables вместо iptables: личный опыт перехода и тонкости конфигурации

ГлавнаяНастройка firewall через nftables вместо iptables: личный опыт перехода и тонкости конфигурации

Содержание

Если вы когда-то администрировали сервер на Linux, то наверняка сталкивались с iptables. Этот инструмент годами был стандартом для настройки firewall в Linux, но с выходом новых дистрибутивов вроде Debian 12 или Ubuntu 22.04 постепенно на его место приходит nftables — более гибкое и современное решение. Я как раз недавно прошла весь путь миграции со «старичка» iptables на nftables и хочу поделиться опытом — по-человечески, без заумных инструкций, но с работающими командами и нюансами.


Почему iptables устарел — и что предлагает nftables

Сначала немного теории, чтобы было проще ориентироваться. iptables основан на фреймворке netfilter и давно используется для управления трафиком. Однако у него есть ряд ограничений:

  • запутанный синтаксис;
  • невозможность объединять правила в логические блоки;
  • разные утилиты (iptables, ip6tables, ebtables, arptables) для разных протоколов.

nftables, наоборот, предоставляет унифицированный подход и один бинарник nft, которым можно управлять всеми типами фильтрации. Он быстрее, мощнее и позволяет писать конфигурации более понятно.

В новых системах по умолчанию уже используется режим iptables-nft, то есть iptables-команды проксируются на движок nftables. Однако это не совсем нативно — всё равно лучше перейти полностью на чистый nftables.


Как понять, какой движок используется сейчас

Запустите:

iptables -V

Если вы видите в ответе что-то вроде iptables v1.8.9 (nf_tables), значит, используется режим iptables-nft, а не классический iptables. Это первый признак, что можно (и стоит) мигрировать.


Установка и активация nftables (Ubuntu/Debian)

На Ubuntu 22.04, Debian 12 и большинстве свежих систем nftables уже предустановлен. Но на всякий случай:

sudo apt update
sudo apt install nftables

Активируем:

sudo systemctl enable nftables
sudo systemctl start nftables

Проверим статус:

sudo systemctl status nftables

Базовая настройка firewall через nftables

Создаём конфигурационный файл, например /etc/nftables.conf:

#!/usr/sbin/nft -f

flush ruleset

table inet filter {
  chain input {
    type filter hook input priority 0;
    policy drop;

    # Разрешаем loopback
    iif lo accept

    # Разрешаем уже установленные соединения
    ct state established,related accept

    # Разрешаем SSH
    tcp dport 22 accept

    # Разрешаем HTTP и HTTPS
    tcp dport {80, 443} accept
  }

  chain forward {
    type filter hook forward priority 0;
    policy drop;
  }

  chain output {
    type filter hook output priority 0;
    policy accept;
  }
}

Применяем правила:

sudo nft -f /etc/nftables.conf

Сохраняем для автозапуска:

sudo netfilter-persistent save

Таблица сравнения iptables vs nftables

Характеристикаiptablesnftables
СинтаксисРазрозненныйУнифицированный
ПроизводительностьНижеВыше
Поддержка IPv6Через отдельные утилитыВстроенная
Работа с NAT, фильтрацией, логамиЧерез отдельные chainsЧерез unified table
Поддержка atomic операцийНетДа
Совместимость с iptablesДа (iptables-nft)Да, можно мигрировать

Полезные команды nftables

Вот список базовых и часто используемых команд:

# Показать текущие правила
sudo nft list ruleset

# Показать таблицы
sudo nft list tables

# Добавить правило "вручную" (например, открыть порт 8080)
sudo nft add rule inet filter input tcp dport 8080 accept

# Удалить правило
sudo nft delete rule inet filter input handle <номер>

# Сбросить все правила
sudo nft flush ruleset

Особенности и подводные камни

  1. iptables dport не работает напрямую с nft — вместо этого используйте tcp dport.
  2. Убедитесь, что у вас удалён iptables-persistent, иначе он может конфликтовать.
  3. Не путайте nft list с nft list rules и nft list ruleset — последняя команда показывает всё сразу, и это удобно.

Личный опыт

Когда я впервые перешла на nftables, больше всего времени ушло на то, чтобы понять логику chains и осознанно сформировать policy. Но когда я разобралась — это оказалось в разы удобнее, чем iptables. Особенно удобно, что можно писать правила в логических блоках, группировать порты, использовать sets, и всё это читается, как человеческий текст.


Итого…

nftables — это современный способ конфигурирования firewall в Linux. Если вы всё ещё сидите на iptables (или работаете в iptables-nft режиме), я очень рекомендую хотя бы протестировать чистую конфигурацию на nftables. Она логичнее, быстрее и перспективнее. Особенно на новых VPS с Debian 12, Ubuntu 22.04 и выше.