qf хостовый firewall на eBPF

Централизованно управляемый host-firewall на eBPF

Правила задаются в одном месте (Control Plane, веб-UI или API), автоматически компилируются под каждый хост и доставляются агентам, которые применяют их в ядре на TC-хуке. Расходящиеся iptables/nftables-скрипты и разрозненные Ansible-роли заменяются единой конфигурацией.

Control Plane и агент

qf-cp

Control Plane — Go-сервис + React-UI + PostgreSQL. API-first: всё, что делает UI, доступно по REST.

qf-agent

Лёгкий Go-бинарь (deb/rpm) на защищаемой машине. Держит mTLS-соединение с CP, применяет подписанные бандлы, передаёт телеметрию.

Где qf снимает рутину эксплуатации

Операционная задачаКак решает qf
Правила настраиваются вручную на каждой машине и со временем расходятсяПравила задаются в CP, агент применяет их автоматически. Новый хост с нужным лейблом получает правила без ручных шагов
«Что реально применено на этом хосте?»Действующий ruleset хоста виден в API/UI; per-rule счётчики и события — в реальном времени
Онбординг сотен хостовОдин bulk-токен с шаблоном лейблов и целевой группой; каждый новый хост сам получает лейблы и попадает под нужные политики
Конфигурация расходится с версией в gitPolicy-as-code через Terraform-провайдер: политики, правила и object-groups в репозитории, plan/apply, ревью в PR
Изменение применяется без проверкиDry-run превью (кого затронет и итоговый ruleset) до включения энфорсмента
Деплой Control PlaneHelm-чарт, встроенный HA (2 реплики), стандартные k8s-примитивы
Деплой агентов по разнородному паркуИдемпотентная Ansible-роль (deb/rpm, github-release / apt-dnf-repo / локальный файл), проверка ядра и архитектуры
Сосуществование с CNIНа ядрах ≥6.6 агент подключается через TCX и сосуществует с Cilium, не изменяя его датапас
Массовая потеря доступа (lockout)Канал управления защищён неизменяемым allow-правилом; никакая политика не отрежет агента от CP

Пять объектов, предсказуемое поведение

Состояние парка в одной панели

Политика по селектору и хосты под ней

Правило задаётся метками; видно, какие хосты попадают под селектор и статус применения по каждому.

Раскатка бандла по хостам

Каждый хост показывает статус применения текущего поколения (generation) бандла в реальном времени.

qf-cp / rolloutgen 1187
  • web-01✓ применено
  • web-02✓ применено
  • api-07✓ применено
  • db-03⧗ раскатка
42 хоста под селектором · role in (web, api)

Policy-as-code, zero-touch онбординг, штатный деплой

terraform

Terraform-провайдер

Политики, правила и object-groups описываются декларативно и хранятся в git — plan, apply, ревью в PR, стейт. Правила ссылаются на object-groups по id, Terraform строит граф зависимостей. Fleet-wide политики (selector = {}) требуют явного confirm_match_all = true — предохранитель от применения на весь парк.

enroll

Zero-touch онбординг

Bulk-токен — один энролмент-токен на много хостов. label_template проставляет лейблы, target_group_id добавляет хост в группу. Токен раздаётся парку: хосты проходят энролмент, сами получают лейблы и попадают под нужные политики. max_uses и TTL ограничивают токен; после энролмента он стирается из конфига.

helm

Деплой Control Plane

Helm-чарт qf-cp, встроенный HA — 2 реплики. gRPC для агентов публикуется как NodePort (минуя L7-прокси), REST/UI — через Ingress. Всё в values.yaml, чарт публикуется OCI, обновление штатным helm upgrade.

ansible

Деплой агентов

Агент — обычный пакет deb/rpm. Штатный путь — идемпотентная Ansible-роль: проверяет ядро и архитектуру, ставит из github-релиза / apt-dnf-репо / файла, кладёт CA-анкер и минимальный agent.conf, запускает systemd-юнит.

Сосуществование на одной ноде — штатный сценарий

механизм

TCX-links

На ядрах ≥6.6 агент подключает датапас через TCX — несколько eBPF-программ на одном интерфейсе через собственные links с явным порядком. qf ставит свои TCX-links и не изменяет clsact-qdisc и программы Cilium.

изоляция

Не делят карты

qf энфорсит host-политику, Cilium — свою CNI-политику подов. Не делят карты, не перезаписывают attach. Снятие qf-агента убирает только его TCX-links — Cilium остаётся работать (ноды не уходят в NotReady).

ядро

Ограничение по ядру

На ядрах <6.6 TCX недоступен. При обнаружении Cilium агент не стартует (fail-safe); без Cilium используется классический TC.

Развернуть qf на вашем парке