nftables: складніші правила
Коли ufw вже не вистачає: структура таблиць і ланцюжків nftables, готовий робочий конфіг, набори адрес, обмеження швидкості та прокидання портів.
Оновлено 23 серпня 2026 р.
nftables — це той самий механізм ядра, на якому працює ufw. Використовуйте його напряму, коли потрібні іменовані набори адрес, обмеження швидкості, різні політики для різних інтерфейсів або перенаправлення портів — тобто коли ваші правила вже не вміщуються у «дозволити порт».
Не потрібно використовувати обидва інструменти одночасно: перед перемиканням вимкніть ufw командою ufw disable, інакше правила перекриватимуться і заплутають вас під час налагодження.
Структура
Правила живуть у таблицях, таблиці містять ланцюжки, а ланцюжки містять правила. Ланцюжок прив'язаний до етапу обробки пакетів (input, forward, output) і має типову політику.
apt install -y nftables
systemctl enable --now nftables
nft list ruleset
Робочий конфіг
Файл /etc/nftables.conf:
#!/usr/sbin/nft -f
flush ruleset
table inet filter {
set admins {
type ipv4_addr
elements = { 203.0.113.5, 198.51.100.7 }
}
chain input {
type filter hook input priority 0; policy drop;
iif lo accept
ct state established,related accept
ct state invalid drop
ip protocol icmp icmp type echo-request limit rate 5/second accept
tcp dport 22 ip saddr @admins accept
tcp dport 22 ct state new limit rate 6/minute accept
tcp dport { 80, 443 } accept
}
chain forward {
type filter hook forward priority 0; policy drop;
}
chain output {
type filter hook output priority 0; policy accept;
}
}
Застосувати й зберегти:
nft -c -f /etc/nftables.conf
nft -f /etc/nftables.conf
systemctl restart nftables
Прапорець -c лише перевіряє синтаксис, не застосовуючи правила. Завжди використовуйте його: політика drop з одруком відрізає доступ, і вам доведеться повертатися через консоль у панелі /hosting/vds/m/<id>.
Набори адрес і обмеження швидкості
Іменований набір редагується на льоту, без перезавантаження правил:
nft add element inet filter admins { 192.0.2.10 }
nft delete element inet filter admins { 198.51.100.7 }
nft list set inet filter admins
Динамічний набір із тайм-аутом стане в пригоді для власних блокувань:
set blocked {
type ipv4_addr
flags timeout
timeout 1h
}
Перенаправлення та підстановка адрес
Потрібно, якщо всередині працює контейнер або тунель:
table ip nat {
chain prerouting {
type nat hook prerouting priority -100;
tcp dport 8443 dnat to 10.10.0.2:443
}
chain postrouting {
type nat hook postrouting priority 100;
oifname "eth0" masquerade
}
}
Поширені помилки
| Помилка | Наслідок | Рішення |
|---|---|---|
Немає правила ct state established | Відповіді на вихідні запити відрізаються | Додайте його першим правилом |
Забули iif lo accept | Локальні сервіси та бази даних ламаються | Дозвольте петльовий інтерфейс |
| Правила застосовані, але не збережені | Після перезавантаження все відкрито | Запишіть у /etc/nftables.conf |
| ufw і nftables разом | Непередбачуваний результат | Залиште лише один інструмент |
Перевіряйте новий набір правил в окремій сесії, не закриваючи робочу. Простий запобіжник:
sleep 300 && nft flush rulesetу фоні — якщо ви заблокуєте себе, доступ повернеться сам.
Якщо вам не потрібні ці деталі, поверніться до ufw: він покриває більшість завдань.