incident(books-vds-es): true RCA — ransom-бот через открытый :9200, не оператор
Рецидив вчерашнего ES-инцидента вскрыл истинную причину. Вчерашняя гипотеза «оператор в cutover попал на canonical» опровергнута. Root cause: ES (stack 33) публиковал 0.0.0.0:9200 мимо traefik. Free-ES 7.10 без auth → порт открыт всему интернету. Ransom-бот сносил индексы by-name (мимо Control #1 destructive_requires_name), оставлял read_me с BTC-выкупом. accessLog (Control #2) пуст — бот шёл прямо в порт, не через traefik. firewalld бесполезен (docker-publish обходит INPUT-зоны). Fix (Control #3): убрана публикация host-порта из stack 33 (Portainer PUT), дыра закрыта; re-restore epz/products/artmone из daily-2026-05-25. Отдельный баг: epz-поиск падал у ОБОИХ тенантов — getTenantIdSeller( config.get("tenant")) через node-config, а tenant не задан ни в default.json, ни в env-маппинге (TENANT env = мёртвый груз). Добавлен tenant в overlay default.json (slovo/bookva). products работал — отдельный код-путь. accessLog откатан (сторожил не ту дверь). - wiki concept: correction-блок + секция «Рецидив 2026-05-29» + exposure-audit - tasks: restore-es reopened+reclosed; new ⚪ harden-books-vds-exposed-ports - NEXT_SESSION handoff Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -93,13 +93,39 @@ products yellow 105922 26.6mb
|
||||
|
||||
**Target (books VDS, Portainer stack 33, canonical):** `https://elasticsearch.kzntsv.site/` — restored 2026-05-28, counts == source, green.
|
||||
|
||||
## ⛔ RECURRENCE 2026-05-29 — RCA был НЕВЕРНЫМ, дыра не закрыта
|
||||
|
||||
Через ~3ч после вчерашнего restore индексы снова исчезли (`artmone`/`epz`/`products`
|
||||
удалены 28.05 20:13 UTC, остался ransom-`read_me`). Вчерашний best-guess «оператор в
|
||||
cutover» **опровергнут**.
|
||||
|
||||
**True root cause:** stack 33 публиковал `ports: - 9200:9200` → docker прокинул
|
||||
`0.0.0.0:9200` на публичный IP в обход traefik+firewalld. ES 7.10 free **без auth** →
|
||||
`curl http://89.253.255.133:9200/` без кредов возвращал cluster info. **Ransom-бот**
|
||||
сканил порт, удалял индексы by-name (мимо вчерашнего Fix #1, который ловит только
|
||||
`_all`/`*`), оставлял `read_me` с требованием 0.0041 BTC. accessLog (Fix #2) пуст по
|
||||
DELETE — бот шёл прямо в `:9200`, не через traefik. bookva не задет (bookva-es порт не
|
||||
публикует).
|
||||
|
||||
**Fix #3 (applied 2026-05-29):** убран `ports:` блок из stack 33 (Portainer PUT
|
||||
`/api/stacks/33?endpointId=1`). Порт больше не публикуется (`docker ps` → `9200/tcp` без
|
||||
`0.0.0.0:`, внешний `curl :9200` refused), traefik route жив. Затем `DELETE /read_me` +
|
||||
restore `epz,products,artmone` из `daily-2026-05-25` (counts 820604/105922/2621, green) +
|
||||
restart `books-api books-task-runner books-job-scheduler`. Поиск slovo через traefik
|
||||
отдаёт хиты. Полный разбор: `.wiki/concepts/es-destructive-delete-incident-2026-05-26.md`
|
||||
§ «Рецидив 2026-05-29».
|
||||
|
||||
**Spawned follow-up:** `harden-books-vds-exposed-ports` — exposure-audit нашёл ещё 5
|
||||
сервисов с публичными host-портами (mongo/books-db/bookva-db/minio/bookva-minio, все
|
||||
credentialed) + rsync:873. Не emergency, но закрыть.
|
||||
|
||||
## Branch
|
||||
|
||||
n/a (admin ops)
|
||||
|
||||
## Status
|
||||
|
||||
closed 2026-05-28
|
||||
closed 2026-05-28 → **reopened+reclosed 2026-05-29** (true RCA: exposed port, Fix #3 applied)
|
||||
|
||||
<!-- created-by: vitya@books-session / 2026-05-28 / trigger: prod slovo поиск товаров+EPZ сломан, ES indices пусты на canonical endpoint -->
|
||||
<!-- closed-by: vitya@.admin-exec / 2026-05-28 / snapshot restore + 2 preventive fixes + wiki concept ingest -->
|
||||
|
||||
Reference in New Issue
Block a user