nftables — основной инструмент управления сетевым экраном в Ubuntu 24.04. Рассказываем о его преимуществах в сравнении с iptables и объясняем ключевые концепции.
Мы разберём, как правильно настраивать правила фильтрации, вести учёт подключений и управлять трафиком, чтобы обеспечить баланс между безопасностью и производительностью. Особое внимание уделим структуре конфигурационных файлов и принципам модульного построения правил, что упростит поддержку и масштабирование.
Отдельным блоком рассмотрим настройку nftables для защиты веб-сервера и VPS от внешних угроз. Вы узнаете, как ограничивать доступ по IP, блокировать подозрительные подключения и предотвращать типовые атаки, сохраняя при этом стабильную работу сервисов.
Введение
Любой сервер, особенно имеющий публичный IP-адрес, постоянно подвергается сканированию и попыткам несанкционированного доступа. Поэтому файрвол, фильтрующий входящие и исходящие соединения на основе заданных правил, — это обязательный компонент защиты. Исторически в Linux для этой задачи использовался iptables. Однако его архитектура, разработанная в 1998 году, уже устарела и не соответствует современным требованиям. На смену пришел nftables — эволюционное развитие подсистемы Netfilter в ядре Linux. nftables объединяет функциональность разрозненных инструментов (iptables, ip6tables, arptables, ebtables) в единый, более эффективный фреймворк. В Ubuntu 24.04 nftables является стандартным и рекомендуемым инструментом для управления сетевым экраном.
Почему nftables стал стандартом
Выбор nftables для новых систем на Ubuntu 24.04 обусловлен его ключевыми преимуществами:
Единый интерфейс вместо множества инструментов. В то время как с iptables требуются отдельные команды и наборы правил для IPv4 (iptables), IPv6 (ip6tables), ARP (arptables) и сетевых мостов (ebtables), nftables использует одну команду nft и единый синтаксис для всех этих задач. Управление происходит через указание адресного семейства (family) в правилах: ip (IPv4), ip6 (IPv6), inet (IPv4 и IPv6 одновременно, что наиболее удобно), arp (ARP), bridge (мосты), netdev (низкоуровневые интерфейсы) — а это устраняет дублирование правил и упрощает поддержку.
Улучшенный синтаксис. Сравните правила разрешения SSH и HTTP/HTTPS:
- на iptables:
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
- на nftables:
nft add rule inet filter input tcp dport { ssh, http, https } ct state { established, new } accept
Синтаксис nftables лаконичнее, выразительнее и легче читается. Правила проще писать, понимать и поддерживать, особенно в сложных конфигурациях.
Повышенная производительность. nftables использует более эффективные структуры данных ядра:
- хеш-таблицы (sets) — для быстрого поиска элементов (IP, портов);
- ассоциативные массивы (maps) — для сложных сопоставлений.
Это дает снижение нагрузки на CPU при обработке правил, более высокую скорость фильтрации, особенно под нагрузкой (например, при DDoS) и лучшую масштабируемость.
Расширенный функционал «из коробки». Ключевые возможности, которые в iptables требовали дополнительных модулей (таких как ipset), в nftables встроены:
- динамические наборы (sets) для создания и использования списков IP/портов с автоматическим таймаутом (например, для интеграции с Fail2ban);
- ассоциативные массивы (maps) для сложных преобразований (например, NAT с привязкой к порту);
- конкатенация (concatenations) — объединение нескольких полей (IP + порт) для точного сопоставления.
Проект iptables больше не развивается активно. В Ubuntu 24.04 и других современных дистрибутивах nftables — базовый и предпочтительный инструмент. Режим совместимости iptables-nft позволяет выполнять и старые команды, но новые функции и оптимизации реализуются только в nftables.
Первые шаги с nftables в Ubuntu 24.04
В Ubuntu 24.04 nftables обычно уже установлен и готов к работе. Уточним статус пакета:
sudo apt policy nftables
В ответе вы должны увидеть, что пакет установлен (installed), но на всякий случай вот команда установки — она подтянет сам nftables и его зависимости:
sudo apt install nftables
Теперь убедимся, что системный сервис nftables активен и запустится при перезагрузке сервера — он отвечает за загрузку правил при старте системы. Проверяем текущий статус (должен быть active (exited)):
sudo systemctl status nftables
Активируем сервис:
sudo systemctl enable --now nftables
enable --now — стандартный способ одновременно добавить сервис в автозагрузку (enable) и запустить его сразу (--now).
Основной файл конфигурации, который загружается сервисом nftables при старте системы, находится по пути /etc/nftables.conf. Именно в этот файл нужно сохранять правила, чтобы они пережили перезагрузку сервера. По умолчанию в Ubuntu 24.04 nftables.conf находится базовый шаблон, который ничего не блокирует и служит лишь отправной точкой в настройке. Вам нужно самостоятельно добавить правила в этот файл, чтобы настроить межсетевой экран.
Чтобы увидеть, какие правила nftables активны, выполните:
sudo nft list ruleset
В выводе будет вся текущая конфигурация: таблицы, цепи и правила.
Сброс конфигурации:
sudo nft flush ruleset
Эта команда немедленно удалит все действующие правила файрвола. Если у вас было открыто SSH-соединение, вы можете потерять доступ к серверу! Выполняйте flush только если:
- вы подключены к серверу через консоль (не по SSH), которая не зависит от сетевых правил (например, KVM/IPMI, VNC, консоль хостинг-провайдера);
- или вы готовы немедленно (в той же сессии терминала, до разрыва SSH) добавить новые правила, разрешающие ваш доступ (SSH) и базовый трафик.
Это две самые важные команды в работе с nftables.conf: с первой вы будете мониторить настройки сетевого экрана, а со второй нужно познакомиться, чтобы понимать все последствия очистки конфигурации.
Таблицы, цепи и правила в nftables
В этом разделе мы разберём структуру и ключевые компоненты nftables, которые вы будете использовать постоянно.
Иерархия
Всё в nftables строится по трёхуровневой системе:
- Таблицы (Tables) — верхнеуровневые контейнеры, которые группируют цепи по назначению (например, filter для фильтрации, nat для трансляции адресов).
- Цепи (Chains) — находятся внутри таблиц. Содержат последовательности правил и привязаны к конкретным точкам обработки трафика («хукам»).
- Правила (Rules) — находятся внутри цепей. Это непосредственно инструкции фильтрации: «если <условие> — то <действие>».
Область действия таблиц
Каждая таблица создаётся для определённого семейства адресов (Families) — это ключевое отличие от iptables. Семейство определяет, какой тип трафика будет обрабатываться:
- ip — только IPv4 трафик;
- ip6 — только IPv6 трафик;
- inet — обрабатывает и IPv4, и IPv6 трафик одной таблицей, рекомендуется, так как избавляет от дублирования правил;
- arp — для ARP-трафика (протокол разрешения адресов);
- bridge — для трафика, проходящего через сетевые мосты;
- netdev — для ранней фильтрации на уровне сетевого интерфейса (до маршрутизации).
Цепи (Chains)
Цепь — это набор правил, привязанный к определённой точке («хуку») в пути прохождения пакета через сетевой стек ядра. Основные хуки:
- prerouting — пакет только что поступил с сетевого интерфейса, до определения, куда его направить (локальному процессу, другому интерфейсу или другому хосту). Место для DNAT.
- input — пакет предназначен этому серверу (локальному процессу). Основное место для фильтрации входящего трафика.
- forward — пакет предназначен другому хосту (сервер выступает как роутер). Место для фильтрации форвардинга.
- output — пакет сгенерирован локальным процессом и отправляется наружу. Место для фильтрации исходящего трафика.
- postrouting — пакет уже обработан и готов отправиться на сетевой интерфейс. Место для SNAT/MASQUERADE.
Цепи бываю трёх типов (type), тип указывает на её основную задачу:
- filter — фильтрация пакетов (разрешить/запретить), это самый частый тип;
- nat — трансляция сетевых адресов (NAT);
- route — изменение маршрута пакета (если адрес назначения изменён в prerouting).
Приоритет цепи (priority) определяет порядок обработки цепей, привязанных к одному и тому же хуку. Цепи с меньшим числовым значением priority выполняются раньше. Приоритет важен в сложных сценариях, например, когда NAT должен выполниться до фильтрации.
Политика по умолчанию (policy)
Policy — это действие, которое применяется к пакету, если ни одно правило в цепи его не обработало. Возможные значения:
- accept — принять пакет;
- drop — бесшумно отбросить пакет (без уведомления отправителя);
- reject — отклонить пакет с отправкой ошибки (например, ICMP port unreachable).
Для цепи input всегда устанавливайте policy drop, что соответствует принципу «запрещено всё, что не разрешено явно». Без этого ваш сервер останется уязвимым для атак.
Правила (Rules)
Правило — это комбинация условий (matches) и действий (actions). Оно имеет вид: «если <условие> — то <действие>».
Основные условия (matches):
- протокол — ip protocol (tcp, udp, icmp и другие), tcp dport (порт назначения TCP), udp sport (порт источника UDP).
- адреса и интерфейсы — ip saddr (IPv4 источник), ip6 daddr (IPv6 назначение), iifname (входящий интерфейс, например eth0), oifname (исходящий интерфейс).
- состояние соединения — ct state (самое важное условие для фильтрации!). Возможные состояния:
- new — новое соединение (первый пакет);
- established — установленное соединение (ответ на разрешённое new);
- related — связанное соединение (например, FTP data channel);
- untracked — не отслеживаемое соединение (исключенное из трекинга).
- метаданные пакета — meta.
- ограничение скорости — limit.
Основные действия (actions):
- accept — разрешить пакет;
- drop — бесшумно отбросить;
- reject — отклонить с ошибкой;
- log — записать пакет в системный лог (ядро);
- jump — перейти к другой цепи;
- counter — считать пакеты и байты по этому правилу (полезно для отладки);
- snat / dnat — трансляция адресов (для цепей типа nat).
Из всех возможных вариантов чаще всего вы будете использовать условия ct state { established, related } в комбинации с accept, чтобы разрешить ответный трафик на уже установленные соединения.
Заключение
nftables в Ubuntu 24.04 предлагает современный, гибкий и производительный подход к управлению сетевым экраном, заменяя устаревший iptables. Он упрощает синтаксис, объединяет работу с разными протоколами и даёт расширенные возможности без установки дополнительных модулей. Освоив базовые принципы, вы сможете надёжно защитить сервер или VPS, оптимизировать правила под свои задачи и снизить нагрузку на систему, сохраняя при этом высокую скорость обработки трафика.
Читайте в блоге:
- Настраиваем nftables для защиты веб-сервера на Ubuntu 24.04
- Как обновить ядро Linux на Ubuntu 24.04 и откатить изменения при ошибках
- Как перенести Ubuntu 24.04 на новый сервер без переустановки