Що таке 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 блокує доступ.