# 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/uk/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/uk/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/uk/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/uk/kb/nftables-zamena-iptables/
