Skip to content

v0.2.0

Choose a tag to compare

@UncleStephenCode UncleStephenCode released this 05 Sep 04:57

OpenShield v0.2.0 объединяет развитие проекта из версий v0.1.29–v0.1.32: переработанный интерфейс управления правилами, адаптивные уровни обработки трафика, оптимизированную fail-closed атрибуцию приложений и воспроизводимый performance gate для nftables и резервного iptables.

Новый интерфейс управления правилами

  • TUI разделён на вкладки состояния, исходящих правил, входящих правил, событий и справки.
  • Исходящие правила группируются по приоритету:
    1. cgroup v2;
    2. проверенный путь исполняемого файла;
    3. адрес назначения.
  • В правой панели показываются протокол, адрес, порт, интерфейс, аргументы запуска, UID, идентичность версии файла, источник правила, UUID и временные метки.
  • Группировка влияет только на отображение: каждое правило сохраняет собственный UUID и независимую семантику.
  • Добавлена отдельная вкладка входящих разрешений с выбором источника/CIDR, локального порта, интерфейса и протокола.
  • Входящий трафик по-прежнему запрещён по умолчанию.
  • Исправлены сообщения об успешном создании, изменении и удалении правил.
  • Вместо неясного состояния «Подписка» отображается фактический backend: nftables или iptables.

Адаптивные уровни обработки

StatusV2 показывает фактически используемый тракт:

  • L3 KernelNativeBlockAll либо Enforcing без правил, привязанных к приложениям.
  • L2 ConntrackHybrid — application-bound TCP: первое соединение проходит NFQUEUE-атрибуцию, established TCP использует conntrack-generation fast path.
  • L1 NfqueueLearning, application-bound UDP, ICMP, ICMPv6 и правила Any, требующие повторной атрибуции.
  • Unknown — прежняя версия протокола или непроверенное состояние.

Уровень обработки не изменяет строгость правил. nftables остаётся предпочтительным backend, а iptables/ip6tables используется только как проверенный fallback. Собственный модуль ядра, eBPF, CAP_BPF, MOK или изменение Secure Boot не требуются.

Производительность и безопасность

  • Добавлен ограниченный SOCK_DIAG-поиск сетевого сокета.
  • NFQUEUE обрабатывает микрооперации до 32 уже готовых пакетов без ожидания заполнения.
  • Для каждого пакета сохраняется отдельный SOCK_DIAG; совместно используются только ограниченные снимки владельцев /proc.
  • На пакетную операцию действует единый fail-closed срок 250 мс.
  • Кеш решений между пакетными операциями не используется.
  • Неопределённая идентичность, тайм-аут или превышение лимитов приводят к запрету пакета.
  • UDP, ICMP и ICMPv6 продолжают повторную атрибуцию для каждого иначе не совпавшего пакета.
  • Терминальные ошибки NFQUEUE переводят демон в наблюдаемый карантин EmergencyBlockAll.
  • Сохранение обученных правил выполняется двухфазно и не удерживает блокировку движка во время fsync.
  • Наблюдение за nftables получает таблицы, цепочки и счётчики одним процессом nft за цикл.

Нагрузочный стенд и release gate

В tests/perf реализовано тестирование настоящими сокетами и процессами:

  • baseline без OpenShield;
  • network-only правила;
  • application-bound TCP;
  • application-bound UDP;
  • режимы Enforcing и Learning;
  • nftables и iptables fallback;
  • входящий HTTP с keep-alive и короткими соединениями;
  • исходящий TCP;
  • UDP streaming и high-PPS профили с пакетами 128–512 байт;
  • фазы warm-up, ramp, steady-state и burst.

Собираются throughput, PPS, CPS, concurrency, latency p50/p95/p99, CPU/RSS демона, retransmits, packet loss, softirq, conntrack, NIC drops и ошибки NFQUEUE. Результаты сохраняются в JSON, CSV и Markdown.

Релиз блокируют:

  • падение throughput/PPS более чем на 10%;
  • нарушение абсолютных лимитов CPU/RSS или задержки;
  • drops и ошибки NFQUEUE;
  • fail-open;
  • несостоятельность baseline или насыщение генератора/peer.

Относительные CPU/latency-регрессии временно остаются диагностическими в CI-профиле, но продолжают блокировать production-like профиль.

Проверенный результат v0.1.32

Сохранённый локальный performance gate прошёл для nftables и iptables:

  • 36 групп сравнения;
  • 108 независимых AB/BA-пар;
  • 276 записей метрик;
  • худшее среднее падение throughput: 0,407%;
  • худшее падение PPS: 0,527%;
  • пиковый CPU демона: 26,78% одного ядра;
  • пиковый RSS: 7,66 МиБ;
  • пиковая p99 задержка запроса: 2,717 мс;
  • drops, NFQUEUE errors и fail-open не обнаружены;
  • все четыре проверки контролируемой перегрузки подтвердили fail-closed и восстановление.

Эти результаты относятся к точным артефактам v0.1.32 и не заменяют запуск release workflow для v0.2.0.

Локализация и документация

  • Поддерживается 31 отдельный файл локализации.
  • Проверяются полнота ключей, параметры подстановки и отсутствие скрытого массового fallback на английский.
  • Обновлены английские и русские README, архитектура, модель угроз, аудит безопасности, документация упаковки и совместимости.
  • Автоматическая проверка переводов не заменяет последующую проверку носителями языков.

Важное замечание для серверов

Новая установка запускается в режиме Learning, но входящий трафик запрещён по умолчанию. Перед удалённой установкой следует заранее обеспечить правило для административного доступа либо иметь локальную консоль или независимый out-of-band канал.