Нажмите "Enter" для перехода к содержанию

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

0

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

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

Основы nftables

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

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

  • Набор портов:
  • Набор протоколов:

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

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

nft add rule ip nat prerouting dnat tcp dport map

Это правило с помощью карты осуществляет перенаправление (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 [ таблица ] [ цепочка ]

sudo nft add chain inet test_table test_chain

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

Эта цепочка фильтрует входящие пакеты. Приоритет (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 настраивается произвольно, то мы научились удалять цепочки и таблицы.

Нет похожих записей

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *