Skip to content
VDS · Мережа, IP-адреса та домени

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: він покриває більшість завдань.