2.8 KiB
Безопасность
Секреты
Секретами считаются auth, obfs password, URI целиком, generated config и все backup-файлы.
- CLI не принимает URI позиционным аргументом;
- dataclass скрывает credentials из
repr(); - parser errors не содержат исходный URI;
- diff заменяет secret values на
<REDACTED>; - state хранит hashes, версию и endpoint без auth;
- URI/config/backups имеют
0600, каталоги —0700; - subprocess запускается массивом аргументов без shell.
При попадании URI в чат, issue, history или journal следует заменить оба credential.
Fail closed
До изменения production проверяются strict policy, URI, exact 1.14.0,
with_quic, with_gvisor, deterministic candidate и настоящий sing-box check. Неизвестные параметры не игнорируются.
In-place package upgrade запрещён. Legacy state/config требует ручного архивирования; автоматической миграции или cross-version rollback нет.
Same-release backup provenance
Текущий config можно сохранить как last-good только если его SHA и engine
version подтверждены state версии 0.2.0. Каждый автоматический backup имеет
соседний .meta, а last-good — last-good.meta.json. Несовпадение checksum или
версии блокирует rollback до изменения production.
Metadata защищает от операционной ошибки, но не от атакующего с root-доступом.
Anti-leak
Отдельная таблица inet vpn_egress_guard отклоняет forwarding eth1 -> eth0.
Она не принадлежит sing-box и остаётся независимой от таблицы inet sing-box.
Package drop-in требует успешного запуска guard перед sing-box.
Systemd dependency не является watchdog для ручного удаления nftables table;
runtime-состояние проверяет vpn-egressctl doctor.
DNS и TLS
dns_mode=disabled запрещает новому TUN-механизму 1.14 менять native DNS и
platform interception. DNS контролируется явной route rule. Chrome QUIC
parroting включён (disable_chrome_parrot=false); production acceptance обязан
подтвердить совместимый RSA/ECDSA/ACME certificate, поскольку Ed25519 с этим
режимом несовместим.
pinSHA256 и ech отклоняются: молчаливое ослабление TLS запрещено.