v0.2.0
OpenShield v0.2.0 объединяет развитие проекта из версий v0.1.29–v0.1.32: переработанный интерфейс управления правилами, адаптивные уровни обработки трафика, оптимизированную fail-closed атрибуцию приложений и воспроизводимый performance gate для nftables и резервного iptables.
Новый интерфейс управления правилами
- TUI разделён на вкладки состояния, исходящих правил, входящих правил, событий и справки.
- Исходящие правила группируются по приоритету:
- cgroup v2;
- проверенный путь исполняемого файла;
- адрес назначения.
- В правой панели показываются протокол, адрес, порт, интерфейс, аргументы запуска, UID, идентичность версии файла, источник правила, UUID и временные метки.
- Группировка влияет только на отображение: каждое правило сохраняет собственный UUID и независимую семантику.
- Добавлена отдельная вкладка входящих разрешений с выбором источника/CIDR, локального порта, интерфейса и протокола.
- Входящий трафик по-прежнему запрещён по умолчанию.
- Исправлены сообщения об успешном создании, изменении и удалении правил.
- Вместо неясного состояния «Подписка» отображается фактический backend: nftables или iptables.
Адаптивные уровни обработки
StatusV2 показывает фактически используемый тракт:
- L3 KernelNative —
BlockAllлибоEnforcingбез правил, привязанных к приложениям. - L2 ConntrackHybrid — application-bound TCP: первое соединение проходит NFQUEUE-атрибуцию, established TCP использует conntrack-generation fast path.
- L1 Nfqueue —
Learning, 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 канал.