Внедрение KESL на ВМ2 + замена CLAMAV на KESL
This commit is contained in:
@@ -51,8 +51,9 @@ deployment-артефакты: `VM2_services/codebase/services/`. Локальн
|
||||
`ops`.
|
||||
9. Setup оставляет исходящий трафик UFW открытым на bootstrap-окно. До
|
||||
production ограничьте egress правилами Selectel SG/NAT/proxy до
|
||||
утверждённых PostgreSQL, S3, Secrets Manager, Bitrix24, DNS/NTP, SigNoz и
|
||||
источников ClamAV. Registry/package repositories оставляйте только на
|
||||
утверждённых PostgreSQL, S3, Secrets Manager, Bitrix24, DNS/NTP и SigNoz.
|
||||
Для host KESL разрешите только источники обновления из
|
||||
[`deployment/kesl/RUNBOOK.KESL.ru.md`](kesl/RUNBOOK.KESL.ru.md). Registry/package repositories оставляйте только на
|
||||
controlled maintenance window.
|
||||
|
||||
## Кто что выполняет
|
||||
@@ -87,7 +88,8 @@ deployment-артефакты: `VM2_services/codebase/services/`. Локальн
|
||||
[`arch-10-deployment.md`](../../../../architectory/arch-10-deployment.md) §6.
|
||||
3. **Образы** — собрать и push `han-message-safety`, `han-bitrix-sync`;
|
||||
получить immutable digest для всех `*_IMAGE` в `.env.example` (nginx, redis,
|
||||
clamav, otel-collector, Redis exporter, nginx exporter).
|
||||
otel-collector, Redis exporter, nginx exporter). `clamd`/`freshclam` в
|
||||
Compose отсутствуют: KESL 12.4 standalone и broker устанавливаются на host.
|
||||
4. **Selectel Secrets Manager** — заполнить все remote names из
|
||||
`deployment/secrets/config.example.json` (DSN, tokens, S3 read-only keys,
|
||||
`REDIS_SAFETY_ACL`, `REDIS_EXPORTER_PASSWORD`, internal TLS PEM для `8443`).
|
||||
@@ -526,7 +528,7 @@ REVOKE USAGE ON SCHEMA han_app FROM <BITRIX_SYNC_MIGRATION_ROLE>;
|
||||
новый монотонный номер и отдельные значения `--actor`/`--approved-by`; повторно
|
||||
активировать старую версию нельзя. Alembic downgrade запрещён.
|
||||
|
||||
При обновлении ClamAV policy образ Message Safety должен содержать согласованные
|
||||
При обновлении KESL policy образ Message Safety должен содержать согласованные
|
||||
seed и schema: seed `max_signature_age_hours=240`, schema maximum `720`
|
||||
(30 дней). После обновления immutable image digest создайте новую config
|
||||
version; существующую active version не редактируйте и не активируйте повторно:
|
||||
@@ -548,7 +550,7 @@ NEXT_VERSION='<СЛЕДУЮЩИЙ_МОНОТОННЫЙ_НОМЕР>'
|
||||
/usr/local/sbin/han-vm2-compose up -d --no-deps --force-recreate \
|
||||
message-safety-api message-safety-worker
|
||||
/usr/local/sbin/han-vm2-compose ps \
|
||||
message-safety-api message-safety-worker clamd freshclam
|
||||
message-safety-api message-safety-worker
|
||||
unset NEXT_VERSION
|
||||
```
|
||||
|
||||
@@ -588,8 +590,15 @@ open-file limit быть не должно. Ошибка отсутствующ
|
||||
Под `root` на VM2:
|
||||
|
||||
```sh
|
||||
cd /opt/han-chat/services
|
||||
# Сначала полностью выполните operator runbook:
|
||||
# deployment/kesl/RUNBOOK.KESL.ru.md
|
||||
systemctl enable --now han-kesl-scan-broker.socket
|
||||
systemctl --no-pager status kesl han-kesl-scan-broker.socket
|
||||
test -S /run/han-kesl/scan.sock
|
||||
stat -c '%U:%G %a %n' /run/han-kesl/scan.sock
|
||||
|
||||
/usr/local/sbin/han-vm2-compose up -d redis-safety otel-collector
|
||||
/usr/local/sbin/han-vm2-compose up -d freshclam clamd
|
||||
/usr/local/sbin/han-vm2-compose up -d \
|
||||
message-safety-api message-safety-worker
|
||||
/usr/local/sbin/han-vm2-compose up -d \
|
||||
@@ -598,6 +607,13 @@ open-file limit быть не должно. Ошибка отсутствующ
|
||||
/usr/local/sbin/han-vm2-compose ps
|
||||
```
|
||||
|
||||
До запуска Message Safety operator KESL runbook обязан подтвердить KESL 12.4
|
||||
standalone, успешное ежечасное обновление, допустимый database date и canary.
|
||||
Socket должен иметь `root:han-message-safety 0660` и не быть доступен посторонним
|
||||
UID. Broker является custom
|
||||
integration: неизвестный output/exit code `kesl-control --scan-file --action Inform`
|
||||
считается scanner error, а не clean. Формат и throughput проверяются на target VM2.
|
||||
|
||||
`otel-collector` автоматически запускает одноразовый `otel-queue-init`. Он
|
||||
выставляет владельца persistent queue `10001:10001` и завершается с кодом `0`;
|
||||
сам Collector стартует только после этого.
|
||||
@@ -892,7 +908,7 @@ journalctl --no-pager -u han-processing.service -u han-secrets-vm2.service
|
||||
|
||||
- container unhealthy/restart/OOM;
|
||||
- срок TLS;
|
||||
- возраст ClamAV signatures;
|
||||
- KESL version/database date, результат ежечасного update и broker/socket status;
|
||||
- OTEL queue/export errors;
|
||||
- disk/RAM;
|
||||
- активный MOCK mode;
|
||||
@@ -1107,8 +1123,9 @@ plan.
|
||||
|
||||
- Отказ зависимости Safety — fail-closed: VM1 не должна отправлять/продвигать
|
||||
контент.
|
||||
- Устаревшие/недоступные сигнатуры ClamAV отключают только файловую
|
||||
capability; ошибка сканирования никогда не превращается в allow.
|
||||
- Устаревшая/недоступная база KESL или ошибка broker отключают только файловую
|
||||
capability; ошибка сканирования никогда не превращается в allow и ведёт к
|
||||
retry/`503`.
|
||||
- Потеря Redis может убрать ускорение, но PostgreSQL остаётся источником
|
||||
истины.
|
||||
- Сбой OTEL ставит в очередь в пределах ограниченного тома и не должен
|
||||
@@ -1134,10 +1151,12 @@ han-message-safety-mode mock --text-free false --file-free false
|
||||
таймаута: держите high-severity alert активным до явного `standard`, затем
|
||||
проверьте нормальные text/link/file capabilities и EICAR-canary.
|
||||
|
||||
## Известные исключения по образам
|
||||
## Host KESL и broker
|
||||
|
||||
Образы ClamAV могут потребовать корректировок UID/path после валидации
|
||||
точного digest. Не ослабляйте `read_only`, capabilities или mounts глобально:
|
||||
задокументируйте минимальные writable пути для сигнатур/runtime и
|
||||
компенсируйте сетевыми и ресурсными лимитами. Egress к signature-CDN
|
||||
получает только `freshclam`; `clamd` — нет.
|
||||
KESL 12.4 standalone и root-owned fail-closed broker не являются Compose
|
||||
образами. Message Safety worker получает только Unix socket
|
||||
`/run/han-kesl/scan.sock`; доступ к `kesl-control`, Docker socket и host root
|
||||
ему не выдаётся. `scanner_engine=kesl`, а `signatures_version` вычисляется как
|
||||
hash KESL version + database date. Установка, ежечасное обновление, права
|
||||
socket, clean/EICAR/error/stale gates и rollback выполняются строго по
|
||||
[`deployment/kesl/RUNBOOK.KESL.ru.md`](kesl/RUNBOOK.KESL.ru.md).
|
||||
|
||||
Reference in New Issue
Block a user