← К вики

Управление файрволом через nftables

Как настроить правила файрвола напрямую через nftables — замену iptables.

Время: 20 мин · Сложность: ★★★☆☆

Подходит: ✓ Ubuntu 22.04 · ✓ Debian 12 · ✓ AlmaLinux 9


Краткое описание

nftables — низкоуровневый фреймворк фильтрации пакетов, встроенный в ядро Linux начиная с версии 3.13. Он заменяет iptables, ip6tables, arptables и ebtables единым интерфейсом. UFW и firewalld работают поверх nftables, но прямая работа с ним даёт полный контроль: можно настраивать лимиты скорости, метки пакетов, сложные цепочки — то, что недоступно через упрощённые обёртки.

Когда пригодится

  • Когда UFW недостаточно гибкий для вашей задачи
  • При настройке NAT, маршрутизации или прозрачного проксирования
  • Если нужно ограничить скорость соединений (rate limiting)
  • При миграции с iptables на современный стек

Что понадобится

  • Root-доступ к серверу
  • Базовое понимание сетевых протоколов (TCP/UDP, IP-адреса, порты)
  • VNC-доступ к серверу на случай если заблокируете SSH

Пошаговая инструкция

Установка

На Ubuntu и Debian:

apt install -y nftables

На AlmaLinux:

dnf install -y nftables

Включите автозапуск:

systemctl enable --now nftables

Просмотр текущих правил

nft list ruleset

Создание базовой таблицы с политикой запрета

Следующие команды создают таблицу filter для IPv4 и IPv6 (inet), три стандартные цепочки и базовые разрешающие правила.

Выполняйте команды последовательно и не закрывайте SSH-сессию до проверки:

# Создать таблицу
nft add table inet filter

# Создать цепочки с политикой по умолчанию
nft add chain inet filter input { type filter hook input priority 0 \; policy drop \; }
nft add chain inet filter forward { type filter hook forward priority 0 \; policy drop \; }
nft add chain inet filter output { type filter hook output priority 0 \; policy accept \; }

# Разрешить уже установленные соединения
nft add rule inet filter input ct state established,related accept

# Разрешить трафик на loopback-интерфейсе
nft add rule inet filter input iif lo accept

# Разрешить SSH
nft add rule inet filter input tcp dport 22 accept

# Разрешить HTTP и HTTPS
nft add rule inet filter input tcp dport { 80, 443 } accept

Если SSH работает на нестандартном порту, замените 22 на свой порт.

Сохранить правила

nft list ruleset > /etc/nftables.conf

Загрузить конфигурацию из файла

nft -f /etc/nftables.conf

На Ubuntu и Debian systemd-служба nftables автоматически загружает /etc/nftables.conf при старте системы.

Дополнительные полезные правила

Блокировка конкретного IP:

nft add rule inet filter input ip saddr 1.2.3.4 drop

Ограничение новых SSH-соединений (не более 3 в минуту):

nft add rule inet filter input tcp dport 22 ct state new limit rate 3/minute accept

Разрешить ICMP (ping):

nft add rule inet filter input icmp type echo-request accept
nft add rule inet filter input icmpv6 type echo-request accept

Проверка результата

nft list ruleset

Вывод должен содержать таблицу inet filter с тремя цепочками и добавленными правилами. Проверьте SSH-подключение из нового окна терминала.

Для просмотра счётчиков пакетов:

nft list ruleset -a

Возможные ошибки

Потеряли SSH-доступ — произошло если правило для SSH добавили после установки политики policy drop. Перезагрузите сервер через панель VMmanager — правила nftables, не сохранённые в файл, после перезагрузки исчезнут. Затем добавьте правило для SSH перед установкой политики drop.

Правила не сохраняются после перезагрузки — убедитесь что сохранили их командой nft list ruleset > /etc/nftables.conf и что служба nftables включена: systemctl is-enabled nftables.

«Error: syntax error» при добавлении правила — проверьте синтаксис. В nftables фигурные скобки при перечислении портов обязательны: { 80, 443 }, а не просто 80, 443.

Конфликт с UFW или firewalld — не используйте несколько систем управления файрволом одновременно. Отключите UFW (ufw disable) или firewalld (systemctl stop firewalld) перед переходом на прямое управление через nftables.

FAQ

Чем nftables лучше iptables? Единый синтаксис для IPv4 и IPv6, поддержка наборов (sets) для группировки адресов и портов, встроенный счётчик пакетов, более высокая производительность на больших наборах правил.

Как посмотреть счётчики пакетов для каждого правила?

nft list ruleset -a

Флаг -a добавляет счётчики байт и пакетов к каждому правилу.

Как очистить все правила?

nft flush ruleset

После этого весь трафик будет проходить без ограничений (политика по умолчанию — accept).

Как удалить конкретное правило? Сначала получите дескриптор правила: nft -a list ruleset. Затем удалите по дескриптору:

nft delete rule inet filter input handle 5

Можно ли использовать nftables для NAT? Да. Добавьте цепочку с хуком postrouting и тип nat:

nft add chain inet nat postrouting { type nat hook postrouting priority 100 \; }
nft add rule inet nat postrouting oif eth0 masquerade

Полезные ссылки

  • man nft — полная документация по синтаксису nftables
  • /etc/nftables.conf — файл конфигурации, загружаемый при старте
  • nft monitor — мониторинг изменений правил в реальном времени

Следующие статьи

Сейчас работают только те cookie, без которых сайт не откроется. Разрешите ещё аналитические — будем видеть, где интерфейс мешает, и чинить это.