2.6 KiB
Безопасность
Секреты
Секретами считаются Hysteria authentication, obfs password, URI целиком, generated config и все backups.
- CLI не принимает URI в argv.
- Dataclass скрывает credentials из
repr(). - Ошибки parser не включают исходное значение.
- diff заменяет secret values на
<REDACTED>. - 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 запрещён.