# Безопасность ## Секреты Секретами считаются Hysteria authentication, obfs password, URI целиком, generated config и все backups. - CLI не принимает URI в argv. - Dataclass скрывает credentials из `repr()`. - Ошибки parser не включают исходное значение. - diff заменяет secret values на ``. - state хранит только SHA-256 source/config и безопасный endpoint label. - URI/config/backups имеют `0600`, каталоги — `0700`. - subprocess вызывается массивом аргументов без shell. После попадания действующего URI в чат, issue, shell history или journal оба credential следует перевыпустить. ## Fail closed До изменения production проверяются: - policy schema; - URI syntax и поддерживаемые параметры; - точная версия и `with_quic`; - deterministic candidate; - `sing-box check`. Неизвестные параметры никогда не игнорируются. Production bypass для другой версии отсутствует. ## Anti-leak Отдельная таблица `inet vpn_egress_guard` отклоняет forwarding с `eth1` напрямую на `eth0`. Она не принадлежит sing-box и остаётся отдельной от динамической таблицы `inet sing-box`. Guard запускается до sing-box. Остановка или удаление guard unit является security-sensitive операцией и не выполняется CLI автоматически. Имена интерфейсов поступают из уже провалидированного policy, subprocess не использует shell, а замена таблицы выполняется одной nft batch-транзакцией. ## Healthcheck HTTPS healthcheck подтверждает data plane, но раскрывает проверочному endpoint факт обращения с VPN egress IP. URL можно заменить внутренним контролируемым endpoint. Отключение URL ослабляет проверку до состояния systemd. ## Ограничения URI 1.13.19 `pinSHA256` не преобразуется в `certificate_public_key_sha256`, потому что это разные fingerprint semantics. `ech` не преобразуется без проверенного PEM/config list adapter. Silent downgrade TLS запрещён.