Введение
Помните тот момент, когда вам нужно было настроить простейшее правило в 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