Nftables: Фаервол, который не нужно гуглить каждый раз

Введение

Помните тот момент, когда вам нужно было настроить простейшее правило в iptables, и вы снова и снова гуглили один и тот же синтаксис, боясь ошибиться в порядке аргументов? Если да, то встречайте nftables — современный сетевой фильтр для Linux, который призван избавить системных администраторов и энтузиастов от этих мучений.

Nftables заменил собой классическую связку iptables/ip6tables/arptables/ebtables, предложив единый, логичный и запоминающийся синтаксис. В этой статье мы разберемся, почему nftables — это тот самый фаервол, который не придется постоянно искать в поисковиках.

Справка: Nftables был представлен в ядре Linux версии 3.13 и с тех пор активно развивается, предлагая улучшенную производительность и удобство.

Основная часть

Единый синтаксис вместо зоопарка утилит

Главная боль iptables — это необходимость помнить разные утилиты для разных протоколов: iptables для IPv4, ip6tables для IPv6, arptables для ARP, ebtables для Ethernet-фреймов. Nftables объединяет всё это в одной утилите с единым синтаксисом.

Было в iptables:

# Разрешить HTTP для IPv4
iptables -A INPUT -p tcp --dport 80 -j ACCEPT

# То же самое для IPv6
ip6tables -A INPUT -p tcp --dport 80 -j ACCEPT

Стало в nftables:

# Разрешить HTTP для всех адресов (и IPv4, и IPv6)
nft add rule inet filter input tcp dport 80 accept

Обратите внимание на использование inet вместо ip или ip6 — это семейство адресов, которое работает одновременно с IPv4 и IPv6.

Человекочитаемые и логичные правила

Синтаксис nftables организован более логично и напоминает обычные предложения: "добавить правило в цепочку input семейства inet для протокола tcp с портом назначения 80 с действием accept".

Сравнение сложных правил:

Действие iptables nftables
Блокировка IP iptables -A INPUT -s 192.168.1.100 -j DROP nft add rule ip filter input ip saddr 192.168.1.100 drop
Логирование iptables -A INPUT -p tcp --dport 22 -j LOG --log-prefix "SSH attempt: " nft add rule ip filter input tcp dport 22 log prefix "SSH attempt: "

Важно: Обратите внимание, как в nftables действия (accept, drop, log) указываются в конце правила, что делает синтаксис более интуитивным.

Управление множествами и динамическими списками

Одна из мощнейших возможностей nftables — работа с множествами (sets), которые позволяют создавать динамические списки IP-адресов, портов или других элементов.

Создание и использование множества:

# Создаем множество для черного списка
nft add set inet filter blacklist { type ipv4_addr; }

# Добавляем адреса в множество
nft add element inet filter blacklist { 192.168.1.5, 192.168.1.23 }

# Используем множество в правиле
nft add rule inet filter input ip saddr @blacklist drop

Это избавляет от необходимости создавать отдельное правило для каждого блокируемого IP-адреса, как это было в iptables.

Простота управления и отладки

Nftables предлагает удобные инструменты для просмотра и управления правилами:

# Просмотреть все правила, политики и счетчики
nft list ruleset

# Просмотреть правила конкретной таблицы
nft list table inet filter

# Мониторинг в реальном времени
nft monitor

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

Совместимость с iptables

Для тех, кто не готов сразу переходить: Nftables предоставляет совместимость со старыми командами iptables через утилиты iptables-translate и ip6tables-translate, которые конвертируют правила iptables в синтаксис nftables.

Пример перевода правила: ```bash iptables-translate -A INPUT -p tcp --dport 22 -j ACCEPT

Вывод: nft add rule ip filter INPUT tcp dport 22 counter accept

Метки: