# nftables: современная замена iptables в Linux

> nftables заменяет iptables на современных дистрибутивах Linux: таблицы, цепочки, базовая настройка файрвола и команды диагностики.

## Что такое 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](https://www.zevshost.net/ru/kb/ssh-hardening-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](https://www.zevshost.net/ru/kb/ufw-firewall-vps/).

## Полезные команды для диагностики

Основные команды просмотра и отладки правил:

```
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](https://www.zevshost.net/ru/kb/nastroit-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-цепочке блокирует доступ.

---

Источник: https://www.zevshost.net/ru/kb/nftables-zamena-iptables/
