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/<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: он закрывает большинство задач.