Главная >> Инструкции >> Как пользоваться nftables

Как пользоваться nftables

Nftables - это новый программный продукт, который стремиться изменить существующий подход к фильтрации пакетов. До данного пакета работа с пакетами в сети осуществлялась с помощью утилит (iptables, ip6tables, arptables, entables). Данный framework доступен с версии ядра Linux 3.13 и позволяет запускать команды со старым синтаксисом iptables. По умолчанию же используется новый синтаксис построения команд. В основном используются такие понятия, как наборы, также для правил используют карты и конкатенации (склейки).

В сегодняшней статье мы разберемся как пользоваться nftables. Этот программный продукт позволяет отфильтровывать как каждый пакет, так и поток данных, выполнять NAT трансляцию, регистрировать подозрительную активность в трафике. При создании наборов правил следует избегать дублирования настроек. Nftables позволяет фильтровать и регистрировать одновременно трафик IPv4 и IPv6, благодаря новому семейству правил inet.


Содержание статьи

Основы nftables

Перед тем как мы перейдем к разбору того, как выполняется настройка nftables, разберемся с основными понятиями.

Набор (set) - множество похожих по смыслу значений для ключей правил, объединенных общим именем или конструкцией, состоящей из скобок. Позволяет описывать словари и карты. Позволяет обходиться одним правилом в том случае, где в iptables пришлось бы использовать цепочку правил. Например:

  • Набор портов: {22, 23}
  • Набор протоколов: {telnet, http, https}

Карта (maps) - карта используется для сопоставления обрабатываемой информации с правилом на основе пар значение - ключ. Создание карт основано на использовании инфраструктуры наборов (set). Существует два типа карт - точные карты (literal maps) и карты присяжных (verdict maps). Мы рассмотрим только точные карты.

Точные карты - это набор пар (sets) критерий_совпадения: действие. Например:

nft add rule ip nat prerouting dnat tcp dport map { 80 : 192.168.1.100, 8888 : 192.168.1.101 }

Это правило с помощью карты осуществляет перенаправление (DNAT) с порта TCP назначения 80 на IP-адрес назначения 192.168.1.100, а с порта 8888 - на IP-адрес 192.168.1.101.

Интервалы (intervals) - описываются с помощью синтаксической конструкции значение-значение Интервал обозначает указание диапазона значений. Например: 192.168.1.0-192.168.1.105 обозначает диапазон IP-адресов 1-1023 обозначает диапазон портов интернет-протокола. Вот пример соответствующего правила:

nft add rule inet table1 chain_input ip daddr 192.168.0.1-192.168.0.105 drop

Данное правило указывает отбрасывать все пакеты для семейства правил inet в таблице table1 в цепочке chain_input с IPv4 адресом назначения от 192.168.0.1 до 192.168.0.105

Основные различия с iptables

  • Синтаксис Iptables построен таким образом, что ключам правил всегда предшествует двойное или одинарное тире. В отличии от этого, nftables использует другой синтаксис, перенятый у tcpdump.
  • В iptables вы получаете сразу готовое количество таблиц с фиксированным набором уже настроенных в них цепочек правил. Что приводило к потерям производительности из-за существования неиспользуемых цепочек. В nftables таблицы и цепочки полностью настраиваются.
  • В nftables выражения  это базовый строительный блок правила. В связи с этим правило представляет собой последовательность с выражениями, которые выполняются последовательно слева направо.
  • В nftables можно указать несколько действий в одном правиле.
  • Нет по умолчанию счетчика цепочек и правил. Вы можете включить его по желанию.
  • Лучшая поддержка обновления правил в процессе работы.
  • Возможность одновременного администрирования стеков IPv4 и IPv6 благодаря новому семейству inet, позволяющему регистрировать цепочки правил, видящие одновременно трафик обоих стеков протоколов.
  • Генерация наборов и карт инфраструктуры. Это новая возможность, позволяет использовать дополнительные конфигурации, такие как словари, карты и интервалы, для достижения ориентированной на производительность классификации пакетов.
  • Поддержка конкатенаций (склеек). Начиная с ядра Linux 4.1, вы можете объединять несколько различных ключей и комбинировать их со словарями и картами. Идея состоит в построении цветка значений, хеширующихся для получения высокой производительности при выполнении правил.
  • Подключения поддержки новых протоколов без обновления ядра. Для обновления nftables практически всегда достаточно обновления самого пакета, без каких-либо лишних действий.

Структуры для хранения правил nftables

В целом всё похоже на iptables:

  • Таблицы - содержат ссылку на контейнеры цепочек правил.
  • Цепочка - содержит наборы правил, выполняемых в порядке очереди
  • Правило - семантическая конструкция, позволяющая выбрать действия, которые нужно осуществить с описываемым правилом набором данных

Семьи nftables (families)

Вся инфраструктура nftables предназначена для работы с различными семействами адресов (families) разных протоколов (IPv4, IPv6, ARP, MAC). Ранее для обработки разных семейств адресов использовались разные утилиты - iptables, ip6tables, arptables, ebtables. Теперь с помощью введения понятия семейства обработка происходит в рамках одного программного продукта. На текущий момент существуют следующие семейства:

  • ip - таблицы этого семейства будут видеть трафик (пакеты) протокола IPv4;
  • ip6 - таблицы этого семейства будут видеть трафик (пакеты) протокола IPv6;
  • inet - в таблицах этого семейства будет обрабатываться трафик (пакеты) протоколов IPv4 и IPv6. Правила для ipv4 не будут влиять на пакеты IPv6. Правила, подходящие под оба протокола, будут влиять на пакеты обоих протоколов;
  • arp - таблицы этого семейства видят трафик arp - протокола;
  • bridge - в таблицах будут видеться пакеты, коммутируемые на уровне L2 OSI. Это семейство аналог ebtables;
  • netdev - это семейство, аналогов которого нет в x_tables. Оно видит все пакеты, которые только были переданы драйвером в стек протоколов.

Установка nftables

В некоторых дистрибутивах nftables уже установлен (RedHat 8, CentOS 8) по умолчанию. В Debian 10.2 установка производится очень просто:

sudo apt-get install nftables

Примеры использования nftables

Теперь рассмотрим примеры nftables. Команда nft – это утилита администрирования фреймворком nftables при управлении потоками данных. Именно с помощью неё выполняется настройка nftables. Использует при работе интерфейс командной строки. Позволяет создавать новые правила nftables, удалять старые и просматривать уже созданные цепочки и таблицы правил.

1. Создание таблицы в nftables

При создании таблицы (table) должно быть определено семейство (family) адресов. Например, давайте создадим таблицу с именем, test_table, которая отрабатывает одновременно пакеты IPv4 и IPv6:

sudo nft add table inet test_table

Создание цепочки в nftables

Цепочки (chain) являются контейнерами для правил. Существуют два типа цепочек:

Базовые цепочки (base chain) - можно использовать в качестве точки входа для пакетов из стека протоколов.

Регулярные цепочки (regular chain) - можно использовать с действием jump цель. Применяют для лучшей организации множества правил. При создании цепочки следует учитывать, что таблица, в которую мы хотим добавить цепочку, должна уже существовать.

sudo nft add chain inet [таблица] [цепочка] {set}

Например:

sudo nft add chain inet test_table test_chain {type filter hook input priority 0 \; policy accept \; }

Примечание: чтобы командный интерпретатор не интерпретировал ; как конец команды необходимо  экранировать точку с запятой следующим образом \;

Эта цепочка фильтрует входящие пакеты. Приоритет (priority) задает порядок, в котором nftables обрабатывает цепочки с одинаковым значением hook. Параметр policy устанавливает действие по умолчанию для правил в этой цепочке. В данном случае мы установили действие accept (принимать пакет).

3. Добавление правила 

Добавить правило (rule) в настраиваемую конфигурацию можно с помощью следующей синтаксической конструкции:

sudo nft add rule [family] [table] [chain] [expression] [action]

Например:

sudo nft add rule inet table1 chain_input ip saddr 8.8.8.8 drop

Данное правило добавляется в таблицу с именем table1 в цепочку chain_input и отбрасывает пакеты с ip-адресом источника отправления 8.8.8.8.

4. Удаление правила

Для удаления правила nftables используется команда со следующим синтаксисом:

sudo nft delete rule [family] [table] [chain] handle [number]

Например:

sudo nft delete rule inet table1 chain_input handle 3

5. Удаление цепочки

Цепочка удаляется с помощью следующей команды:

sudo nft delete chain [family] [table] [chain]

Например:

sudo nft delete chain inet table1 chain_input

6. Удаление таблицы

Таблицу можно удалить с конструкции со следующим синтаксисом:

sudo nft delete table [family] [table]

Например:

sudo nft delete table inet table1

Выводы

Сегодня мы познакомились с современным инструментом для редактирования правил брандмауэра. А также разобрались как выполняется настройка Nftables в Debian 10. Nftables вводит много новых семантических конструкций для более грамотной организации правил — set, map, family. Также данный пакет содержит много усовершенствований по сравнению с набором утилит для брандмауэра x_tables. В рамках этой статьи мы познакомились с инструментом nft, используемым для управления всем множеством правил межсетевого экрана.

Поскольку по умолчанию nftables не содержит никаких таблиц и цепочек, мы научились создавать наши первые таблицы и цепочки для всего множества правил нашего межсетевого экрана. Теперь мы умеем устанавливать приоритет для обработки подмножеств правил в цепочке, задавать действие по умолчанию для правил в созданной цепочке. Кроме того, мы научились добавлять правила. Так как структура таблиц и цепочек в nftables настраивается произвольно, то мы научились удалять цепочки и таблицы.

Pеклама
Посмотреть детали

Anubis – это максимально легкое open-source решение, созданное специально для защиты небольших веб-ресурсов от бесконечного потока запросов от ботов и AI парсеров. Этот инструмент можно считать "ядерным вариантом", потому что он заставляет ботов выполнять вычисления похожие на майнинг криптовалюты. Но это неплохая альтернатива для тех, кто не может или не хочет использовать Cloudflare. Посмотреть детали

Creative Commons License
Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна .

5 комментариев к “Как пользоваться nftables”

  1. Доброго дня!
    давно слежу за вашими статьями, отлично написано и удобно читаемо!
    Хотел попрсить немного помощи)
    как настроить nftables чтобы открыть доступ на сервер только по ssh и опеределнному порту через брауцзер к примеру 34100 и только с 2х определенных белых IP

    Ответить
  2. Возможно идиотские вопросы, но я шкет в Linux:
    1. можно ли nft корректно установить на ubunto 20.04
    2. нужно ли удалить iptables, ip6tables, arptables, ebtables, iptables-save, ip6tables-save, iptables-restore, ip6tables-restore, arptables-save, arptables-restore, ebtables-save, ebtables-restore, firewall и ufw перед/после установки nft, и какие программы еще удалять если нужно?
    3. нужно ли и как корректно перенести правила из iptables, ip6tables, arptables, ebtables и ufw в nft?
    4. нужно ли ставить firewalld, и будет ли с ним работать ufw?
    5. можно ли в nft временно отключить правило, а не удалить?
    6. как выполнять NAT трансляцию и регистрировать подозрительную активность в трафике?
    7. для чего нужны set, map, element и как их использовать?
    8. посмотрел man nft и понял что ничерта не понял, особенно часть после STATEFUL OBJECTS

    Ответить

Оставьте комментарий