release: prepare 0.2.0 for sing-box 1.14
This commit is contained in:
+36
-40
@@ -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 запрещено.
|
||||
|
||||
Reference in New Issue
Block a user