Files
singbox_glue/docs/security.md
T

3.1 KiB
Raw Blame History

Безопасность

Секреты

Секретами считаются 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.
  • Policy/URI/config/state/backups имеют root:root 0600, каталоги — root:root 0700; doctor проверяет этот ограниченный набор объектов.
  • subprocess вызывается массивом аргументов без shell.

После попадания действующего URI в чат, issue, shell history или journal оба credential следует перевыпустить.

Fail closed

До изменения production проверяются:

  • policy schema;
  • URI syntax и поддерживаемые параметры;
  • точная версия, with_quic и with_gvisor для stack=mixed;
  • deterministic candidate;
  • sing-box check.

Неизвестные параметры никогда не игнорируются. Production bypass для другой версии отсутствует.

Anti-leak

Отдельная таблица inet vpn_egress_guard отклоняет forwarding с eth1 напрямую на eth0. Она не принадлежит sing-box и остаётся отдельной от динамической таблицы inet sing-box.

Guard запускается до sing-box. Drop-in sing-box.service одновременно задаёт requirement и ordering dependency: ошибка запуска guard блокирует sing-box. Остановка, удаление guard unit или ручное изменение его nftables-таблицы является security-sensitive операцией и не выполняется CLI автоматически.

Имена интерфейсов поступают из уже провалидированного policy, subprocess не использует shell, а замена таблицы выполняется одной nft batch-транзакцией.

Healthcheck

HTTPS healthcheck подтверждает локальную post-activation связность шлюза, но не весь forwarded path eth1 -> TUN -> HY2. Он раскрывает проверочному 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 запрещён.