Политика компилируется в данные BPF-карт и применяется прямо в пути данных (датапат) на TC-хуке. Крепление подстраивается под ядро: TCX на ≥6.6 рядом с Cilium, классический TC на <6.6. Без зависимости от iptables.
Применение правил в qf — это eBPF-программа на TC-хуке ядра Linux, которая проверяет каждый пакет по скомпилированным правилам и выносит вердикт: пропустить или отбросить. Центр управления (control plane) компилирует политику по меткам-селекторам (label selectors) в данные BPF-карт и рассылает подписанные пакеты политики (бандлы); агент проверяет подпись Ed25519 до применения (verify-before-apply), записывает бандл в карты и применяет его в датапате, без зависимости от iptables и netfilter.
Датапат разбирает заголовки L3/L4, сверяет источник, назначение, протокол и порт с правилами в BPF-картах, сверяется с таблицей соединений (conntrack) и возвращает вердикт. Правила — это данные в картах, а не перекомпиляция программы: применение политики означает атомарную запись новых записей в карты уже загруженного фильтра.
Периметровый межсетевой экран (NGFW) проверяет трафик на входе снаружи (north-south), но доступ между серверами внутри сегмента (east-west) он не разбирает. Этот горизонтальный трафик разграничивает файрвол на каждом сервере (host-firewall). qf дополняет периметр, а не заменяет его.
Один проход eBPF-программы на TC-хуке — от разбора заголовков до вердикта.
Парсер извлекает L3/L4: адреса, протокол (TCP/UDP/ICMP) и порты. Неразобранные протоколы (SCTP/GRE/ESP) по умолчанию проходят мимо фильтра, если явно не включён QF_DENY_UNKNOWN_PROTO.
Источник, назначение и порт сверяются с object-группами: ipset по LPM-префиксам, portset по портам, hostset по хостам. Матч — это чтение из карт, а не проход по цепочке правил netfilter.
Таблица соединений отслеживает TCP/UDP/ICMP и состояния new / established / invalid, поэтому ответный трафик установленного соединения не требует зеркального правила.
Программа возвращает pass или drop прямо на TC-хуке, до того как пакет уйдёт в стек. Событие вердикта (Verdict) попадает в наблюдаемость и может пересылаться в SIEM.
Политика компилируется в записи BPF-карт загруженного фильтра. Применение новой политики — атомарная запись в карты, без перезагрузки программы и без разрыва датапата.
Агент выбирает стратегию крепления по возможностям ядра при загрузке. Настраивать вручную не нужно.
| Ядро | Крепление | Поведение |
|---|---|---|
| ≥ 6.6 | TCX | Современный хук; сосуществует с Cilium и другими TCX-программами на том же интерфейсе. |
| < 6.6, без Cilium | Классический TC (clsact + cls_bpf) | Штатное крепление для старых ядер без конфликта qdisc. |
| < 6.6, с Cilium | Отказ запуска | Конфликт qdisc: агент осознанно не стартует, а не молча ломает сеть. |
Минимальная версия ядра — 5.15. Датапат работает на L3/L4 по IPv4 (TCP/UDP/ICMP). L7/DPI, DNS-фильтрация и identity-модель в датапат не входят; непарсимый L4 (SCTP/GRE/ESP) проходит мимо правил.
qf собирает eBPF-датапат в двух вариантах и выбирает нужный по возможностям ядра при загрузке.
Дуальная BPF-сборка: до 32 правил ограниченным циклом на ядрах 5.15–5.16, до 2048 через bpf_loop на ≥5.17. Накладные расходы пути данных (ns/пакет) снимаются харнессом bench-bpf на целевом ядре, числом из прогона, а не расчётом. Агент — только Linux x86_64/arm64. Состояние `related` в conntrack не реализовано.
По умолчанию датапат работает в режиме отказа в открытую (fail-open, ALLOW): забытое правило не отрежет хост, а падение агента или потеря связи с центром управления не разрывают существующий трафик. Переход к запрету по умолчанию (default-deny) вводится поэтапно и наблюдаемо: журнал, затем наблюдение, затем запрет, а не «из коробки». IPv6 по умолчанию (QF_DROP_IPV6) отбрасывается целиком; при включении фильтруются протокол, порт и TCP-флаги, но фильтрация по IPv6-CIDR не поддержана.
Да, для L3/L4-фильтрации на хосте. Датапат — eBPF-программа на TC-хуке ядра; она не зависит от iptables и netfilter. Управление централизовано: одна политика вместо ручных наборов правил на каждом хосте.
Минимальная версия ядра — 5.15. До 32 правил на 5.15–5.16 и до 2048 на ≥5.17. TCX-крепление и сосуществование с Cilium — на ≥6.6; на <6.6 без Cilium используется классический TC. На <6.6 вместе с Cilium агент осознанно не стартует из-за конфликта qdisc.
Агент продолжает применять последний полученный бандл из локального кэша — центр управления не стоит в пути данных. Если связь не восстановлена за 60 с, срабатывает сторожевой таймер (dead-man watchdog): агент откатывается на предыдущий бандл. Это откат по потере связи, а не детекция «плохой» политики.
Датапат — L3/L4 по IPv4 (TCP/UDP/ICMP). Нет L7/DPI, DNS-фильтрации и identity-модели. Непарсимый L4 (SCTP/GRE/ESP) по умолчанию проходит мимо правил, пока не включён QF_DENY_UNKNOWN_PROTO, и под запрет по умолчанию не попадает. IPv6 по умолчанию отбрасывается целиком; при включении фильтруются протокол, порт и флаги, но фильтрация по IPv6-CIDR не поддержана.