qf централизует firewall на распределённом парке Linux-серверов: одна декларативная политика вместо правил iptables, которые расходятся по сотням машин. Управляется как код через Terraform и PR-ревью, применяется на eBPF прямо в ядре, без оркестратора и без нового железа.
qf — централизованный файрвол на каждом сервере (host-firewall) для распределённого парка Linux-серверов: одна декларативная политика вместо iptables, которые расходятся по сотням машин. Управляющий сервер (control plane) компилирует правила по меткам хостов и рассылает агентам подписанные бандлы, а те фильтруют трафик на eBPF прямо в ядре — без Kubernetes, без etcd, без нового сетевого железа. qf централизованно ограничивает горизонтальный (east-west) доступ между серверами, а не собирает iptables в один репозиторий.
Это не про кластер и не про сервис-меш: qf одинаково работает на голом железе, в виртуалках и в облачных инстансах. Агент ставится в одну команду из .deb/.rpm под systemd, применение правил (enforcement) идёт на TC-хуке ядра. Управляющий сервер — это Go-бинарь плюс PostgreSQL, его можно поднять systemd-сервисом без оркестратора. Для DevOps-команды qf закрывает разрыв между «политика описана в Git» и «правило реально стоит на каждом хосте».
Никакого big-bang: хосты размечаются метками, доступ описывается селекторами и живёт в Git, а управляющий сервер сам доводит изменение до всех затронутых машин.
Хосты получают метки (role, env, tier). На enroll они приходят прямо из токена, ручных шагов на каждый хост нет. Доступ описывается селекторами по меткам (matchLabels — AND, anyOf — OR), а не списком IP на каждой машине.
Политики и объект-группы (ipset/portset/hostset) описываются как код и живут в репозитории под PR-ревью. Есть Terraform-провайдер с ресурсами qf_policy и qf_object_group; ставится локально, в публичном Registry его пока нет. Каждый применённый бандл подписан Ed25519 — это аутентичность политики, а не лицензия.
Предпросмотр (dry-run) показывает, какие хосты и какие правила изменятся, ещё до применения. Радиус изменения виден заранее. Наблюдаемый трафик (счётчики и вердикты) смотрится на странице хоста. Каждое изменение доступа фиксируется в аудите «было → стало».
При изменении политики управляющий сервер сам пересчитывает все затронутые хосты и рассылает новые бандлы по инкременту поколения. Осиротевших машин со «старым» правилом не остаётся: это и есть уход от N источников правды в iptables.
Дефолт qf — fail-open (ALLOW): новый хост не режет трафик просто оттого, что появился в парке. Переход к default-deny — управляемый и поэтапный (log → deny по сегментам), а не рубильник на весь парк сразу.
qf внедряет обычно инженер-чемпион на пилоте. Под каждую роль в команде — своя польза.
Вместо разъезжающихся по хостам скриптов — одна политика с ревью в PR. Каскад сам доезжает до всех машин, осиротевших правил не остаётся. Раскатка нового доступа — это merge, а не обход парка по SSH.
Предпросмотр показывает радиус изменения до применения, а fail-open означает, что qf не рубит связность по умолчанию. В стационаре разрыв связи с управляющим сервером трафик не трогает. Агент продолжает фильтровать по последнему подтверждённому бандлу. Сторожевой таймер (dead-man watchdog) откатывает только что применённый, ещё не подтверждённый бандл, если связь пропала сразу после его применения и не вернулась за ~60 с.
Terraform + PR-ревью + подписанные Ed25519 бандлы + audit-trail «было → стало»: контроль доступа проходит тот же путь, что и остальная инфраструктура как код. Dev, Sec и Ops видят одну и ту же историю изменений.
Один управляющий сервер обслуживает более 5000 агентов, а сам агент остаётся тонким и работает на массовых ядрах.
Числа — из внутренних замеров на dev-стенде. Стоимость фильтрации в ядре (нс/пакет) снимается харнессом bench-bpf на конкретном ядре и конфиге — замер, не расчёт. Датапат — L3/L4 (TCP/UDP/ICMP) по IPv4; L7/DNS-фильтрации и карты зависимостей в продукте нет. IPv6 по CIDR не энфорсится (v6 по умолчанию дропается); непарсимый L4 (SCTP/GRE/ESP) проходит мимо правил и не покрывается default-deny; conntrack related не реализован.
Нет. qf рассчитан на обычный парк серверов — голое железо, виртуалки, облачные инстансы. Управляющий сервер — это Go-бинарь плюс PostgreSQL, поднимается systemd-сервисом без Kubernetes и без etcd. Агент ставится из .deb/.rpm и работает на TC-хуке ядра.
Датапат qf — на eBPF/TC. На ядрах ≥ 6.6 агент цепляется через TCX и сосуществует с Cilium; на ядрах < 6.6 без Cilium используется классический TC (clsact + cls_bpf). На < 6.6 вместе с Cilium qf не стартует из-за конфликта qdisc — это честное ограничение, а не тихий сбой.
Да. Политики и объект-группы описываются как код и ревьюятся через PR. Есть Terraform-провайдер с ресурсами qf_policy и qf_object_group — пока он ставится локально и ещё не опубликован в публичном Registry. Каждый применённый бандл подписан Ed25519 (аутентичность политики), а изменения попадают в аудит «было → стало».
Несколько уровней защиты от этого. Предпросмотр показывает затронутые хосты и правила до применения. Дефолт — fail-open (ALLOW), поэтому qf не рубит связность сам по себе, а переход к default-deny делается поэтапно. В стационаре разрыв связи с управляющим сервером трафик не трогает. Агент фильтрует по последнему подтверждённому бандлу. Сторожевой таймер откатывает только что применённый неподтверждённый бандл, если связь пропала сразу после применения и не вернулась за ~60 секунд. Откат уже подтверждённой плохой политики — возврат к прошлому поколению бандла (история версий + аудит было→стало), а не отдельная кнопка мгновенного отката.