release: prepare 0.2.0 for sing-box 1.14

This commit is contained in:
2026-09-08 19:26:00 +05:00
parent 81ea89f7fa
commit 76dce5b47a
42 changed files with 1634 additions and 549 deletions
+36 -40
View File
@@ -2,57 +2,53 @@
## Секреты
Секретами считаются Hysteria authentication, obfs password, URI целиком,
generated config и все backups.
Секретами считаются auth, obfs password, URI целиком, generated config и все
backup-файлы.
- 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.
- 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, shell history или journal оба
credential следует перевыпустить.
При попадании URI в чат, issue, history или journal следует заменить оба
credential.
## Fail closed
До изменения production проверяются:
До изменения production проверяются strict policy, URI, exact 1.14.0,
`with_quic`, `with_gvisor`, deterministic candidate и настоящий `sing-box
check`. Неизвестные параметры не игнорируются.
- policy schema;
- URI syntax и поддерживаемые параметры;
- точная версия, `with_quic` и `with_gvisor` для `stack=mixed`;
- deterministic candidate;
- `sing-box check`.
In-place package upgrade запрещён. Legacy state/config требует ручного
архивирования; автоматической миграции или cross-version rollback нет.
Неизвестные параметры никогда не игнорируются. Production bypass для другой
версии отсутствует.
## 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`.
Отдельная таблица `inet vpn_egress_guard` отклоняет forwarding `eth1 -> eth0`.
Она не принадлежит sing-box и остаётся независимой от таблицы `inet sing-box`.
Package drop-in требует успешного запуска guard перед sing-box.
Guard запускается до sing-box. Drop-in `sing-box.service` одновременно задаёт
requirement и ordering dependency: ошибка запуска guard блокирует sing-box.
Остановка, удаление guard unit или ручное изменение его nftables-таблицы является
security-sensitive операцией и не выполняется CLI автоматически.
Systemd dependency не является watchdog для ручного удаления nftables table;
runtime-состояние проверяет `vpn-egressctl doctor`.
Имена интерфейсов поступают из уже провалидированного policy, subprocess не
использует shell, а замена таблицы выполняется одной nft batch-транзакцией.
## DNS и TLS
## Healthcheck
`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 с этим
режимом несовместим.
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 запрещён.
`pinSHA256` и `ech` отклоняются: молчаливое ослабление TLS запрещено.