Что такое nftables и чем он лучше iptables
nftables — фреймворк фильтрации пакетов в ядре Linux, который с версии Linux 3.13 постепенно заменяет iptables, ipset и ip6tables. В Debian 10+, Ubuntu 20.04+ и большинстве современных дистрибутивов nftables используется по умолчанию, а команда iptables транслирует правила в nftables через совместимый слой iptables-nft.
Главные преимущества: единый синтаксис для IPv4 и IPv6 вместо отдельных iptables и ip6tables, атомарная загрузка всего набора правил без промежуточных состояний, встроенные множества (sets) вместо отдельного ipset, и компактный, читаемый формат правил.
Установка nftables и переход с iptables
Проверка текущего бэкенда:
nft --version
iptables --version
Строка nf_tables в выводе iptables --version означает, что iptables уже работает через nftables-бэкенд. Установка пакета там, где его нет:
apt install -y nftables
systemctl enable --now nftables
Перед переходом стоит сохранить текущие правила iptables, чтобы не потерять доступ к серверу — особенно на сервере, настроенном по инструкции про безопасную настройку sshd_config с нестандартным портом SSH.
Структура правил: таблицы, цепочки, правила
nftables организует правила в три уровня: таблицы (table) привязаны к семейству адресов (ip, ip6, inet), цепочки (chain) задают точку перехвата пакетов (input, forward, output), а правила (rule) внутри цепочки выполняются по порядку.
| Элемент | Назначение |
|---|---|
| table | контейнер для цепочек одного семейства адресов |
| chain | точка обработки пакетов: input, output, forward |
| rule | условие и действие: accept, drop, reject |
| set | именованная группа значений — портов или адресов |
Семейство inet объединяет IPv4 и IPv6 в одной таблице — это компактнее, чем ведение двух параллельных конфигураций.
Базовая настройка файрвола на nftables
Конфигурация обычно хранится в /etc/nftables.conf. Пример базового набора правил: разрешение локального интерфейса, установленных соединений, SSH и HTTP/HTTPS, отклонение остального входящего трафика.
#!/usr/sbin/nft -f
flush ruleset
table inet filter {
chain input {
type filter hook input priority 0; policy drop;
iif "lo" accept
ct state established,related accept
tcp dport 22 accept
tcp dport { 80, 443 } accept
ip protocol icmp accept
}
chain forward {
type filter hook forward priority 0; policy drop;
}
chain output {
type filter hook output priority 0; policy accept;
}
}
Применение набора правил:
nft -f /etc/nftables.conf
Такая же логика используется в UFW, представляющем собой надстройку над nftables — базовые принципы описаны в статье про настройку файрвола UFW.
Полезные команды для диагностики
Основные команды просмотра и отладки правил:
nft list ruleset
nft list table inet filter
nft list chain inet filter input
nft delete rule inet filter input handle 5
nft list ruleset выводит все действующие правила во всех таблицах, а handle в последней команде — номер конкретного правила, узнаваемый флагом -a: nft -a list chain inet filter input.
Автозапуск и сохранение правил
Файл /etc/nftables.conf подключается службой systemd при загрузке сервера:
systemctl enable nftables
systemctl restart nftables
Правила, добавленные командой nft add rule напрямую в терминале, не сохраняются после перезагрузки — их прописывают в конфигурационном файле. Fail2ban тоже умеет работать с бэкендом nftables — подробности в статье про настройку Fail2Ban.
Итог: чек-лист перехода на nftables
- Проверьте текущий бэкенд: строка
nf_tablesвiptables --versionподтверждает переход. - Основные уровни правил: table → chain → rule, семейство
inetобъединяет IPv4 и IPv6. - Правила храните в
/etc/nftables.confи применяйте черезnft -f. - Для отладки применяйте
nft list rulesetиnft -a list chain. - Перед применением новых правил держите открытой резервную SSH-сессию — ошибка в input-цепочке блокирует доступ.