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

Доверенная цепочка от центра до ядра

Централизованно управляемый host-firewall на eBPF: правила задаются в Control Plane, компилируются под каждый хост и доставляются агентам подписанными бандлами. Транспорт, хранение и раскатка спроектированы так, чтобы компрометация одного узла не открывала весь парк.

Control Plane и агент

qf-cp

Хранит политики, компилирует их в данные для BPF-карт, подписывает бандлы, рассылает агентам, собирает телеметрию.

qf-agent

Загружает eBPF-датапас, держит mTLS-соединение с CP, применяет подписанные бандлы, передаёт события и счётчики.

Где qf закрывает риск

ПроблемаКак закрывает qf
Дрейф правил по парку: на 500 машинах правила разошлисьПравила заданы в одном месте на все хосты. Агент периодически сверяет реальные BPF-карты с применённым, о дрейфе приходит оповещение
Нет доказуемого состояния — «точно ли закрыт порт?»Скомпилированные правила хоста видны в UI; per-rule счётчики передаются в CP; deny+log идут в SIEM
Массовая потеря доступа из-за ошибочного правилаManagement-guard: канал агент↔CP защищён неизменяемым allow-правилом с наивысшим приоритетом
Компрометация цепочки поставки правилКаждый бандл подписан PKI CP; агент проверяет подпись. Монотонный gen-гейт отклоняет replay и downgrade
MITM на первичном подключенииОбязательный CA-pin при энролменте; без анкера агент останавливается с ошибкой, а не доверяет системному хранилищу доверия без проверки
Кто и что менялПолный audit-trail всех изменений (before/after), с forward-tee в SIEM
Долгоживущие креды на хостахСертификаты 90 дней с авто-ротацией по mTLS; enrollment-токен стирается после энролмента
Уже есть Cilium / другой eBPF-CNIНа ≥6.6 агент через TCX сосуществует с Cilium; на <6.6 с Cilium не стартует (fail-safe)

Аудит и выгрузка событий

Аудит изменений «было → стало»

Каждая мутация политики фиксируется до и после, с номером поколения и автором.

qf-cp / auditбыло → стало
− deny tcp/22 ← any
+ allow tcp/22 ← admin-net
policy · web-tier egress · gen 1186 → 1187

Выгрузка в SIEM

События правил и жизненного цикла уходят по syslog, HTTP или Kafka в форматах CEF, LEEF, ECS-JSON.

qf-cp / exportforward-tee
транспортsyslogHTTPKafka
форматCEFLEEFECS-JSON
deny tcp/443 host=web-01 → syslog

Паттерны безопасности

  • Default action = ALLOW (fail-open). Не подпавший под правила трафик проходит; запрет задаётся явными правилами deny. Сбой доставки или пустой бандл не блокирует машину (в т.ч. SSH). Deny-all применить можно, но только с явным подтверждением.
  • Management-guard. В начало каждого бандла добавляется allow egress → CP с наивысшим приоритетом. Ошибочное deny egress на CP не заблокирует агента.
  • IPv6-drop по умолчанию. v6 фильтруется полноценно, но дефолт-дроп оставлен как opt-in гейт — не включается по умолчанию, пока оператор не задаст QF_DROP_IPV6=false.
  • Автооткат по таймауту. После применения бандла агент ждёт связь с CP ~60с. Если правило отрезало его от CP и связь не вернулась, агент сам откатывается на предыдущий бандл.
  • Подписанные бандлы. CP PKI-подписывает каждый per-host бандл; агент проверяет подпись до применения. Подмена на пути не пройдёт.
  • Монотонный generation-гейт (anti-replay/anti-downgrade). Агент принимает только бандл с generation выше активного. Старый валидно-подписанный (downgrade) отклоняется; replay того же gen — no-op; после легитимного rollback повторная отправка проходит.
  • Обязательный CA-pin для энролмента. Первый контакт до mTLS — момент MITM. Агент требует явный анкер (переданный вне канала) или осознанный opt-in на fetch с TOFU-предупреждением; без анкера — отказ старта.
  • Короткоживущие серты — 90 дней с авто-ротацией по живому mTLS. Меньше окно эксплуатации украденного серта.
  • Revocation при удалении хоста. Серт в blocklist + статус revoked + разрыв стрима; переподключение по отозванному серту отклоняется.
  • CSR SAN strip. CP игнорирует переданные CN/DNSNames/IPAddresses и подставляет свои, поэтому хост не получит серт с чужой идентичностью.
  • Datapath attestation. Агент хеширует активные BPF-карты и сверяет с desired. Ручная правка root’ом (bpftool map update) → вердикт drift → system-событие в SIEM, затем re-baseline.
  • CP-side agent-down алерт. kill -9 агент не сообщит; CP обнаруживает по пропаже heartbeat: >90с → stale, 15 мин → degraded. Возврат → автоматическое восстановление.
  • RBAC — строгий allowlist ролей: admin (всё), editor (мутации), auditor (только чтение).
  • OIDC SSO для корпоративного IdP + JWT-сессии + API-токены + bootstrap-admin для первого входа.
  • Полный audit-trail (before/after) с forward-tee в SIEM. Per-rule счётчики, flow/deny-события, lifecycle и drift/stale/degraded уходят в SIEM/ELK: транспорты syslog, HTTP и Kafka; форматы CEF, LEEF, ECS-JSON. Метрики Prometheus идут с готовым Grafana-дашбордом, для OpenSearch есть готовый дашборд.
  • Master-key backends. Ключ шифрования CA-ключа — из внешнего источника (vault/tpm2/KMS CLI или tmpfs-файл 0600); передача через env-переменную — только с предупреждением.
  • Наименьшие привилегии агента: только необходимые capabilities, без полного root-доступа сверх нужного для загрузки eBPF.

Разобрать модель угроз на вашем контуре