Доверенная цепочка от центра до ядра
Централизованно управляемый 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) |
Аудит и выгрузка событий
Аудит изменений «было → стало»
Каждая мутация политики фиксируется до и после, с номером поколения и автором.
− deny tcp/22 ← any+ allow tcp/22 ← admin-netpolicy · web-tier egress · gen 1186 → 1187
Выгрузка в SIEM
События правил и жизненного цикла уходят по syslog, HTTP или Kafka в форматах CEF, LEEF, ECS-JSON.
транспорт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.