From 1204f56d9f9fc10c7eb90da50a70fd8b9d6b2afe Mon Sep 17 00:00:00 2001 From: dttb Date: Mon, 29 Jun 2026 16:11:13 +0300 Subject: [PATCH] =?UTF-8?q?niikn:=20Finland=20VPS=2078.17.4.225=20=D0=BB?= =?UTF-8?q?=D1=91=D0=B3=202026-06-29=20=E2=80=94=20=D0=B2=D0=B5=D1=81?= =?UTF-8?q?=D1=8C=20=D0=BE=D0=B1=D1=85=D0=BE=D0=B4=20(Claude/TG/WA)=20down?= =?UTF-8?q?,=20VM=20=D0=BE=D1=81=D1=82=D0=B0=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=BD=D0=B0=20Spaceweb;=20=D0=BE=D0=B1=D0=BD?= =?UTF-8?q?=D0=BE=D0=B2=D0=BB=D1=91=D0=BD=20=D1=81=D1=82=D0=B0=D1=82=D1=83?= =?UTF-8?q?=D1=81=20=D0=B2=20=D0=BF=D0=B0=D0=BC=D1=8F=D1=82=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- claude-memory/niikn-vpn-status.md | 8 +- ...-05-28-mmfb-effector-saver-locked-admin.md | 13 +- ...mfb-1c-cluster-ports-exposed-bruteforce.md | 63 +++++++ ...aildttbrudomainadmin-можешь-найти-креды.md | 29 +++ ...подключимся-к-серверу-ммфб-1c-нужно-восстано.md | 23 +++ ...подключимся-к-серверу-ммфб-1c-нужно-восстано.md | 34 ++++ ...подключимся-к-серверу-ммфб-1c-нужно-восстано.md | 32 ++++ ...подключимся-к-серверу-ммфб-1c-нужно-восстано.md | 32 ++++ ...подключимся-к-серверу-ммфб-1c-нужно-восстано.md | 30 ++++ ...подключимся-к-серверу-ммфб-1c-нужно-восстано.md | 30 ++++ ...подключимся-к-серверу-ммфб-1c-нужно-восстано.md | 28 +++ ...подключимся-к-серверу-ммфб-1c-нужно-восстано.md | 27 +++ ...подключимся-к-серверу-ммфб-1c-нужно-восстано.md | 34 ++++ ...подключимся-к-серверу-ммфб-1c-нужно-восстано.md | 35 ++++ ...подключимся-к-серверу-ммфб-1c-нужно-восстано.md | 28 +++ ...подключимся-к-серверу-ммфб-1c-нужно-восстано.md | 31 ++++ ...подключимся-к-серверу-ммфб-1c-нужно-восстано.md | 32 ++++ ...подключимся-к-серверу-ммфб-1c-нужно-восстано.md | 28 +++ ...подключимся-к-серверу-ммфб-1c-нужно-восстано.md | 30 ++++ ...подключимся-к-серверу-ммфб-1c-нужно-восстано.md | 29 +++ ...подключимся-к-серверу-ммфб-1c-нужно-восстано.md | 33 ++++ ...подключимся-к-серверу-ммфб-1c-нужно-восстано.md | 30 ++++ ...подключимся-к-серверу-ммфб-1c-нужно-восстано.md | 31 ++++ ...подключимся-к-серверу-ммфб-1c-нужно-восстано.md | 31 ++++ ...подключимся-к-серверу-ммфб-1c-нужно-восстано.md | 30 ++++ ...подключимся-к-серверу-ммфб-1c-нужно-восстано.md | 30 ++++ ...ь-подкоп-на-бужарово-клиенты-говорят-что-не-.md | 29 +++ ...ь-подкоп-на-бужарово-клиенты-говорят-что-не-.md | 26 +++ ...ь-подкоп-на-бужарово-клиенты-говорят-что-не-.md | 27 +++ ...ь-подкоп-на-бужарово-клиенты-говорят-что-не-.md | 28 +++ ...ь-подкоп-на-бужарово-клиенты-говорят-что-не-.md | 25 +++ ...ь-подкоп-на-бужарово-клиенты-говорят-что-не-.md | 32 ++++ ...подключимся-к-серверу-ммфб-1c-нужно-восстано.md | 35 ++++ ...подключимся-к-серверу-ммфб-1c-нужно-восстано.md | 28 +++ ...подключимся-к-серверу-ммфб-1c-нужно-восстано.md | 31 ++++ ...подключимся-к-серверу-ммфб-1c-нужно-восстано.md | 29 +++ projects/dttb/mailcow-dttb.md | 8 + projects/mmfb/lionart-1c.md | 11 ++ projects/mmfb/mikrotik.md | 17 ++ .../2026-06-29-отчёт-инцидент-атака-1с.md | 167 ++++++++++++++++++ .../mmfb/reports/Отчёт-инцидент-1С-ММФБ.docx | Bin 0 -> 14029 bytes .../mmfb/reports/Отчёт-инцидент-1С-ММФБ.pdf | Bin 0 -> 45189 bytes 42 files changed, 1269 insertions(+), 5 deletions(-) create mode 100644 decisions/2026-06-28-mmfb-1c-cluster-ports-exposed-bruteforce.md create mode 100644 notes/claude/2026-06-28-020123-httpsmaildttbrudomainadmin-можешь-найти-креды.md create mode 100644 notes/claude/2026-06-28-210251-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md create mode 100644 notes/claude/2026-06-28-215431-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md create mode 100644 notes/claude/2026-06-28-221333-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md create mode 100644 notes/claude/2026-06-28-222017-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md create mode 100644 notes/claude/2026-06-28-223043-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md create mode 100644 notes/claude/2026-06-28-230935-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md create mode 100644 notes/claude/2026-06-28-231730-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md create mode 100644 notes/claude/2026-06-28-232132-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md create mode 100644 notes/claude/2026-06-28-232923-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md create mode 100644 notes/claude/2026-06-28-233211-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md create mode 100644 notes/claude/2026-06-28-233401-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md create mode 100644 notes/claude/2026-06-28-233654-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md create mode 100644 notes/claude/2026-06-28-234843-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md create mode 100644 notes/claude/2026-06-29-000332-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md create mode 100644 notes/claude/2026-06-29-000904-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md create mode 100644 notes/claude/2026-06-29-001249-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md create mode 100644 notes/claude/2026-06-29-001601-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md create mode 100644 notes/claude/2026-06-29-002135-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md create mode 100644 notes/claude/2026-06-29-104045-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md create mode 100644 notes/claude/2026-06-29-104713-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md create mode 100644 notes/claude/2026-06-29-105449-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md create mode 100644 notes/claude/2026-06-29-112216-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md create mode 100644 notes/claude/2026-06-29-121159-проверь-подкоп-на-бужарово-клиенты-говорят-что-не-.md create mode 100644 notes/claude/2026-06-29-123127-проверь-подкоп-на-бужарово-клиенты-говорят-что-не-.md create mode 100644 notes/claude/2026-06-29-123431-проверь-подкоп-на-бужарово-клиенты-говорят-что-не-.md create mode 100644 notes/claude/2026-06-29-125042-проверь-подкоп-на-бужарово-клиенты-говорят-что-не-.md create mode 100644 notes/claude/2026-06-29-125342-проверь-подкоп-на-бужарово-клиенты-говорят-что-не-.md create mode 100644 notes/claude/2026-06-29-130058-проверь-подкоп-на-бужарово-клиенты-говорят-что-не-.md create mode 100644 notes/claude/2026-06-29-130903-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md create mode 100644 notes/claude/2026-06-29-132301-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md create mode 100644 notes/claude/2026-06-29-132348-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md create mode 100644 notes/claude/2026-06-29-144654-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md create mode 100644 projects/mmfb/reports/2026-06-29-отчёт-инцидент-атака-1с.md create mode 100644 projects/mmfb/reports/Отчёт-инцидент-1С-ММФБ.docx create mode 100644 projects/mmfb/reports/Отчёт-инцидент-1С-ММФБ.pdf diff --git a/claude-memory/niikn-vpn-status.md b/claude-memory/niikn-vpn-status.md index c727d71..07fbbfc 100644 --- a/claude-memory/niikn-vpn-status.md +++ b/claude-memory/niikn-vpn-status.md @@ -1,10 +1,14 @@ --- name: NIIKN VPN Finland VPS -description: VPS 78.17.4.225 (Finland Spaceweb) — VPN, прокси TG/WhatsApp, AmneziaWG. Активен. +description: VPS 78.17.4.225 (Finland Spaceweb) — VPN/AmneziaWG-хаб НИИКН. 2026-06-29 ЛЁГ: все TCP-сервисы мертвы, отвечает только ICMP (хотя в норме ICMP закрыт) → VM остановлена/зависла на стороне Spaceweb. SSH недоступен, чинить через панель vps.sweb.ru. type: project originSessionId: 8c23ee07-26c7-4c9d-b7cc-8fd9d2b3c266 --- -## VPS 78.17.4.225 (Finland Spaceweb) — АКТИВЕН +## VPS 78.17.4.225 (Finland Spaceweb) — ⚠️ DOWN с 2026-06-29 + +> 2026-06-29: весь Docker-стек не слушает порты (22/443/9443/1080/39202 → refused), панель vpn.niikn.com недоступна, AmneziaWG handshake мёртв → лёг весь обход НИИКН (Claude/TG/WA/instagram). ICMP отвечает 18мс, ХОТЯ в норме на этом VPS ICMP закрыт → значит отвечает шлюз провайдера за остановленную VM. SSH:22 refused и с Мака, и с openclaw → удалённо не поднять. Фикс: vps.sweb.ru (it5870yand) → старт/ребут VM, проверить автозапуск docker. + +## VPS 78.17.4.225 — норма (когда работает) - Hostname: finlandit5870.com - Ubuntu 22.04, 3.8GB RAM, 30GB disk (42% used) diff --git a/decisions/2026-05-28-mmfb-effector-saver-locked-admin.md b/decisions/2026-05-28-mmfb-effector-saver-locked-admin.md index beb91d7..055243e 100644 --- a/decisions/2026-05-28-mmfb-effector-saver-locked-admin.md +++ b/decisions/2026-05-28-mmfb-effector-saver-locked-admin.md @@ -67,6 +67,13 @@ sc.exe start efsaveragent - `Set-LocalUser` не умеет снимать lockout — только ADSI или `net user`-с-новым-паролем. - Не доверяй `BadPasswordAttempts: 0` после разблока — этот счётчик не сразу обнуляется; смотри сам `IsAccountLocked`. -## Открытые вопросы -- Почему пароль `Администратор` в SCM разошёлся с фактом — не выяснено. `PasswordLastSet = 06.05.2024`, установка Effector Saver — 16.02.2025. Возможно, инсталлер прописал тестовый пароль, или пароль менялся без обновления службы. -- Стоит ли увести `efsaveragent` на отдельную сервисную учётку без password-expiry (например, `.\Effector Saver`, которая уже имеет `SeServiceLogonRight`) — выяснить, что Effector Saver кладёт по сети: если UNC с админ-кредами, миграция нетривиальна. +## Рецидив 2026-06-28 (та же причина, подтверждена) +Снова: `efsaveragent` Stopped/Auto, `.\Администратор` залочен (BadPwd=10). Серия 7038/7000: 25.06 15:12, 25.06 15:24, 28.06 12:14. Heartbeat в `fagent.log` оборвался 25.06 ~15:05 → **бэкапы не шли ~3 дня (25.06 → 28.06)**. + +Восстановление тем же playbook (disable→stop→unlock→LogonUser(SERVICE)→pin→start). Ключевое: `LogonUser(SERVICE)` с паролем `OL260380eg` вернул **True** — то есть пароль учётки **верный**, расходился именно SCM-секрет. Значит первопричина закрыта: **пароль `.\Администратор` меняли (вероятно при настройке RDP+2FA) без обновления службы** → SCM-секрет устарел → lockout-шторм. Итог: служба Running, PID 10488. + +## Постоянный фикс (ещё не применён — нужен выбор Олега) +Каждая ротация пароля `.\Администратор` будет ронять службу и локать учётку. Варианты, чтобы развязать службу с ротируемым паролем: +1. **LocalSystem** — без пароля, никогда не локается. Безопасно **только если** Effector пишет бэкап на локальный диск. Если назначение — UNC под админ-кредами, LocalSystem пойдёт на сеть как computer-account и потеряет доступ. Назначение хранилища лежит в `C:\ProgramData\Effector Saver\esdata.db` (SQLite), в `fagent.log` его нет. +2. **Выделенная учётка `.\Effector Saver`** (локальная, уже существует) с непротухающим паролем + `SeServiceLogonRight`. +Перед сменой run-as — узнать назначение бэкапа (esdata.db / fmanager UI). До тех пор: при любой смене пароля админа сразу `sc.exe config efsaveragent obj= ".\Администратор" password= "<новый>"`. diff --git a/decisions/2026-06-28-mmfb-1c-cluster-ports-exposed-bruteforce.md b/decisions/2026-06-28-mmfb-1c-cluster-ports-exposed-bruteforce.md new file mode 100644 index 0000000..3a53044 --- /dev/null +++ b/decisions/2026-06-28-mmfb-1c-cluster-ports-exposed-bruteforce.md @@ -0,0 +1,63 @@ +--- +title: MMFB/LionART — 1С-кластер-порты торчали в интернет → распределённый brute → lockout Администратора → падал Effector Saver +date: 2026-06-28 +tags: [mmfb, lionart, security, incident, mikrotik, 1c, effector-saver, bruteforce, frame.ru] +status: mitigated +--- + +# MMFB / LionART 1C — экспозиция 1С-портов + brute-force (инцидент 2026-06-28) + +## Контекст +[[../projects/mmfb/lionart-1c|VM 100 pve LionART]] (`WIN-70M2VEJIKEF`, 10.253.1.240, Win Server 2022), роутер [[../projects/mmfb/mikrotik|MikroTik LionART]] (10.253.1.1, `AI`/`OL260380eg`), WAN `195.26.30.163`. Начиналось как «восстановить Effector Saver» — оказалось рецидивом из-за внешней атаки. + +## Корень (подтверждён) +На MikroTik `netmap` пробрасывал **порты кластера 1С с WAN на .240**: +- `195.26.30.163:1540` → `.240:1540` (ragent) +- `:1541` → `.240:1541` (rmngr, менеджер кластера) +- `:1560-1591` → `.240:1560-1591` (рабочие процессы) + +Боты из интернета долбили эти порты → 1С запускал ОС-аутентификацию (**NTLM, LogonType 3**) словарными именами (`1C, ADM1C, ADMIN, KLUCH, 88888888, SUPERUSER`...) → политика lockout `10/10/10` → **`.\Администратор` локался каждые ~10 мин** → падали и RDP Олега, и `efsaveragent` (работает под `.\Администратор`). Бэкапы стояли ~3 дня (25.06→28.06). + +Правило srcnat #0 `masquerade out-interface=!ether1-gw-telekom` подменяло источник проброшенного трафика на `10.253.1.1` — поэтому на коробке в 4625/4740 светился «роутер», а реальные IP были видны только в conntrack роутера. + +## Не взломаны +0 успешных входов (4624 type 3/10) с пути атаки за 24ч — lockout честно отбивал перебор. Рога-аккаунтов в локальных юзерах/админах нет, подозрительных слушающих портов/бэкдоров нет (1433 SQL, 154x 1C, 47001 WinRM — штатно). + +## Атакующие (из conntrack/deny-лога роутера) +`154.57.197.99` (основной, ARIN-аноним, 15+ портов-шторм), `94.26.88.0/24`+`94.26.68.0/24` (Razinet BG), `217.74.38.154` (DataFort RU), `38.253.156.213` (Cogent), `212.23.222.71`, `185.56.162.72` (Hosting-VDS RU — изначально ошибочно принял за сайт, оказался переборщиком), `185.46.47.157` (Pronet), `95.68.225.46` (Rostelecom). Распределённый — блок по одному /24 не помогал. + +## Сайт ≠ переборщики +Синхронизация — **frame.ru = `92.53.96.188`** (JSC Timeweb, подтверждённый **Bitrix**: `x-powered-cms: Bitrix Site Manager`). В наблюдении frame.ru **ни разу не подключался** к 1С-портам (accept-счётчик 0, в deny-логе нет `92.53.x`). box→`frame.ru:443` достижим. → Обмен Bitrix↔1С, вероятно, **исходящий** (1С шлёт на сайт по HTTP), а входящие 1С-кластер-порты сайту **не нужны** — это чистая поверхность атаки. (Окончательно подтвердить, понаблюдав полный цикл обмена / спросив Олега про схему.) + +## Что сделано (MikroTik, всё помечено `incident-20260628`, reversible) +Forward chain (по порядку, до общего `accept dst-address=10.253.1.0/24`): +1. `accept tcp src-address=92.53.96.188 dst-address=10.253.1.240 dst-port=1540,1541,1560-1591` (allow frame.ru) — пока 0 пакетов +2. `drop src-address-list=1c-bruteforce` (address-list = 94.26.88.0/24, 94.26.68.0/24) +3. `drop tcp dst-address=10.253.1.240 dst-port=1540,1541,1560-1591` (deny всех прочих на 1С-порты) + +**Результат:** 4625 `146/5мин → 0`; 4740 lockout `каждые 10 мин → 0`; `.\Администратор` разлочен и держится; `efsaveragent` Running. + +## Осталось +- **Подтвердить, что обмен frame.ru исходящий** → если да, **снять проброс 1540/1541/1560-1591 целиком** (NAT-правила #3/#4/#5) — полностью закрыть дыру; whitelist-фильтр тогда не нужен. +- **Развязать `efsaveragent` от `.\Администратор`** → LocalSystem/сервисная учётка (см. [[2026-05-28-mmfb-effector-saver-locked-admin]]) — чтобы любой lockout не ронял бэкап. Нужен ответ: Effector пишет копии локально или на UNC. +- ~~Watchdog~~ **СДЕЛАНО 2026-06-28:** `/root/antoshka-watch-effector.sh` на Антошке (LXC 137), cron `*/10`. SSH-проверка `efsaveragent` + lockout `.\Администратор` + признаки атаки (4740/30м, 4625/5м) → **self-heal** (тот же playbook) → алерт в **TG** (бот `8020760639` → chat `1292155421`) и **email** (`support@dttb.ru` через `10.0.0.107:587` curl STARTTLS), дедуп по сигнатуре + «отбой». Ключ Антошки `ssh-ed25519 ...root@openclaw` в `administrators_authorized_keys` коробки. Боевой тест (stop службы → авто-подъём → отбой) пройден, оба канала живые. State: `/root/.antoshka-watch-effector.state`. Box-side проверка — `powershell -EncodedCommand` (Cyrillic-safe). ⚠️ Пока мониторит службу/lockout, НЕ факт успешности бэкапа — для этого нужен адрес хранилища Effector (esdata.db/fmanager). +- **Периметр:** наружу торчат ещё `8006`→Proxmox (.200), SSH `22`→.49 / `2222`→.205, `8007`→.245, `80/443`→NPM(.25) — отдельный аудит. + +## Email-уведомления Effector — РЕШЕНО (через mailcow dual-cert) +Цель: штатный email-отчёт Effector → `support@dttb.ru` (свежесть бэкапов из CLI не снять — копии Effector удаляет после выгрузки, esdata.db=Absolute DB). + +Проблема: Effector Saver 4.8 — древний TLS-стек (OpenSSL/Indy 2018, **TLS 1.0**, только RSA-шифры). mailcow на 587 отдавал **только ECDSA-серт + TLS≥1.2** → `SSL negotiation failed`. + +Фикс на **mailcow (VM 107, `/opt/mailcow-dockerized`)**, всё в `data/conf/postfix/extra.cf` (тег `incident-20260628`, бэкап рядом `.bak-rsa-*`): +1. **Dual-cert:** сгенерён self-signed RSA `data/assets/ssl/rsa-cert.pem`+`rsa-key.pem` (CN=mail.dttb.ru, 10 лет). В extra.cf: `smtpd_tls_cert_file`=RSA, `smtpd_tls_key_file`=RSA, `smtpd_tls_eccert_file`=cert.pem(ECDSA), `smtpd_tls_eckey_file`=key.pem. Теперь postfix отдаёт И RSA, И ECDSA-шифры. +2. **TLS 1.0 на портах отправки:** `submission_smtpd_tls_mandatory_protocols = >=TLSv1`, `smtps_smtpd_tls_mandatory_protocols = >=TLSv1` (только 587/465; порт 25 и общий не трогали). +3. `docker compose restart postfix-mailcow`. + +Итог: тест из Effector «e-mail успешно отправлен». Современные клиенты по-прежнему ECDSA/TLS1.3 (не сломано). ⚠️ Компромисс: TLS 1.0 на 587/465 — слабее; снять, когда Effector обновят/заменят. RSA-серт self-signed (Effector серт не валидирует); при желании заменить на валидный LE RSA. Revert: убрать строки из extra.cf + рестарт. + +Настройки в Effector (вводил Олег в GUI): `mail.dttb.ru:587 STARTTLS`, `support@dttb.ru`/пароль, From `support@dttb.ru`. Задача «Отправка отчёта» → «Задачи в отчёте» все 6, расписание ~07:00. + +## Уроки +- 1С-кластер (ragent/rmngr/worker-порты) **никогда не выставлять в интернет** — это и DoS через lockout, и риск RCE. Доступ только через NetBird/OVPN, обмен с сайтом — исходящим HTTP. +- При «служба под доменным/локальным админом падает + учётка лочится» — проверь **внешний brute** (4625/4740 + conntrack роутера), а не только SCM-пароль. [[2026-05-28-mmfb-effector-saver-locked-admin]] лечил симптом, корень был в экспозиции. +- MikroTik `masquerade out-interface=!WAN` прячет реальные source-IP в логах коробки — смотри conntrack/деней-лог на роутере. diff --git a/notes/claude/2026-06-28-020123-httpsmaildttbrudomainadmin-можешь-найти-креды.md b/notes/claude/2026-06-28-020123-httpsmaildttbrudomainadmin-можешь-найти-креды.md new file mode 100644 index 0000000..7be32f0 --- /dev/null +++ b/notes/claude/2026-06-28-020123-httpsmaildttbrudomainadmin-можешь-найти-креды.md @@ -0,0 +1,29 @@ +--- +date: 2026-06-28 +type: claude-session +session_id: ac82ac49-7dd6-476e-9fd0-e10687c8867c +started: 2026-06-27T19:43:29.595Z +ended: 2026-06-27T23:01:23.150Z +messages: 15 +tools: [AskUserQuestion, Bash, Edit, Read, ToolSearch, WebSearch, Write] +tags: [claude, session] +--- + +# https://mail.dttb.ru/domainadmin/ можешь найти креды + +## Запрос + +https://mail.dttb.ru/domainadmin/ можешь найти креды + +## Итог (последний ответ Claude, до 500 симв.) + +Готово. + +## Диск увеличен +LXC 103 (NPM): **8G → 16G** онлайн, без простоя. Сейчас занято **43%** (было 87%). NPM здоров, git push по HTTPS работает (`dcbd18f..4d92eac` — только что проверено). Записал и запушил. + +## Но всплыл риск посерьёзнее +**Thin-пул `pve/data` на Proxmox занят на 94.91%** (≈80G свободно из 1.6T). Это латентная угроза для **всего хоста** — если пул дойдёт до 100%, могут встать/побиться все VM и LXC сразу. Рост 103 это не усугубил (thin потребляет место только по факту записи, + +--- +*Автосохранено из session [`ac82ac49`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/ac82ac49-7dd6-476e-9fd0-e10687c8867c.jsonl) — 15 сообщ., тулы: AskUserQuestion, Bash, Edit, Read, ToolSearch, WebSearch, Write* diff --git a/notes/claude/2026-06-28-210251-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md b/notes/claude/2026-06-28-210251-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md new file mode 100644 index 0000000..d787cef --- /dev/null +++ b/notes/claude/2026-06-28-210251-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md @@ -0,0 +1,23 @@ +--- +date: 2026-06-28 +type: claude-session +session_id: 070eabd1-e97b-42bb-a251-1a48400891dc +started: 2026-06-28T17:54:07.937Z +ended: 2026-06-28T18:02:51.672Z +messages: 2 +tools: [Bash, Edit, Read] +tags: [claude, session] +--- + +# Давай подключимся к серверу ММФБ 1C . Нужно восстановить Программу efektsever + +## Запрос + +Давай подключимся к серверу ММФБ 1C . Нужно восстановить Программу efektsever + +## Итог (последний ответ Claude, до 500 симв.) + +Хороший инстинкт — сейчас «Running» ещё не значит «бэкапы идут», а падение тихое (узнали только через 3 дня). Прежде чем предлагать, проверю два факта, от которых зависит схема: достаёт ли сама Windows-машина Telegram API напрямую, и что Effector хранит про последний бэкап (можно ли мониторить результат, а не только службу). + +--- +*Автосохранено из session [`070eabd1`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/070eabd1-e97b-42bb-a251-1a48400891dc.jsonl) — 2 сообщ., тулы: Bash, Edit, Read* diff --git a/notes/claude/2026-06-28-215431-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md b/notes/claude/2026-06-28-215431-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md new file mode 100644 index 0000000..f5eedd5 --- /dev/null +++ b/notes/claude/2026-06-28-215431-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md @@ -0,0 +1,34 @@ +--- +date: 2026-06-28 +type: claude-session +session_id: 070eabd1-e97b-42bb-a251-1a48400891dc +started: 2026-06-28T17:54:07.937Z +ended: 2026-06-28T18:54:31.469Z +messages: 3 +tools: [AskUserQuestion, Bash, Edit, Read] +tags: [claude, session] +--- + +# Давай подключимся к серверу ММФБ 1C . Нужно восстановить Программу efektsever + +## Запрос + +Давай подключимся к серверу ММФБ 1C . Нужно восстановить Программу efektsever + +## Итог (последний ответ Claude, до 500 симв.) + +Опознал источники по whois — это решает вопрос. Детальный отчёт ниже. + +--- + +# Отчёт: инцидент на MMFB 1C (`WIN-70M2VEJIKEF`, 10.253.1.240) + +## 1. Краткий вывод +- `efsaveragent` (Effector Saver) **восстановлен**, работает (PID менялся при автолечении). +- Учётку `.\Администратор` роняет **интернет-перебор по выставленным наружу 1С-портам**, а **НЕ** синхронизация сайта. Источники — арендованные сервера в Болгарии и РФ, а не одна точка обмена. +- Коробка по первичной проверке **не взломана**. + +## 2. + +--- +*Автосохранено из session [`070eabd1`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/070eabd1-e97b-42bb-a251-1a48400891dc.jsonl) — 3 сообщ., тулы: AskUserQuestion, Bash, Edit, Read* diff --git a/notes/claude/2026-06-28-221333-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md b/notes/claude/2026-06-28-221333-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md new file mode 100644 index 0000000..24be969 --- /dev/null +++ b/notes/claude/2026-06-28-221333-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md @@ -0,0 +1,32 @@ +--- +date: 2026-06-28 +type: claude-session +session_id: 070eabd1-e97b-42bb-a251-1a48400891dc +started: 2026-06-28T17:54:07.937Z +ended: 2026-06-28T19:13:33.154Z +messages: 4 +tools: [AskUserQuestion, Bash, Edit, Read] +tags: [claude, session] +--- + +# Давай подключимся к серверу ММФБ 1C . Нужно восстановить Программу efektsever + +## Запрос + +Давай подключимся к серверу ММФБ 1C . Нужно восстановить Программу efektsever + +## Итог (последний ответ Claude, до 500 симв.) + +Снял 5 срезов — вот вердикт по поведению, это надёжнее байтов: + +| IP | Сеть (whois) | Портов в срезах | Состояние | Вердикт | +|---|---|---|---|---| +| **185.56.162.72** | **Hosting-VDS, RU** | **1** (54813) | **established/assured** | 🟢 **похоже на сайт** | +| 154.57.197.99 | ARIN-аноним | **15** | шторм syn/close | 🔴 перебор | +| 217.74.38.154 | DataFort RU | 3 | close | 🔴 перебор | +| 38.253.156.213 | Cogent | close | 🔴 перебор | +| 95.68.225.46 | Rostelecom Ульяновск | transient | 🔴 перебор | +| 89 + +--- +*Автосохранено из session [`070eabd1`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/070eabd1-e97b-42bb-a251-1a48400891dc.jsonl) — 4 сообщ., тулы: AskUserQuestion, Bash, Edit, Read* diff --git a/notes/claude/2026-06-28-222017-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md b/notes/claude/2026-06-28-222017-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md new file mode 100644 index 0000000..3d16167 --- /dev/null +++ b/notes/claude/2026-06-28-222017-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md @@ -0,0 +1,32 @@ +--- +date: 2026-06-28 +type: claude-session +session_id: 070eabd1-e97b-42bb-a251-1a48400891dc +started: 2026-06-28T17:54:07.937Z +ended: 2026-06-28T19:20:17.691Z +messages: 5 +tools: [AskUserQuestion, Bash, Edit, Read] +tags: [claude, session] +--- + +# Давай подключимся к серверу ММФБ 1C . Нужно восстановить Программу efektsever + +## Запрос + +Давай подключимся к серверу ММФБ 1C . Нужно восстановить Программу efektsever + +## Итог (последний ответ Claude, до 500 симв.) + +✅ **Сработало.** Через 75 секунд после whitelist: + +| Метрика | Было | Стало | +|---|---|---| +| 4625 (отказы входа) | 146 / 5 мин | **1 / 70с** | +| 4740 (lockout) | каждые 10 мин | **0 за 3 мин** | +| `.\Администратор` | locked | **разлочен, держится** | +| `efsaveragent` | — | **Running** | + +На роутере: правило **allow `185.56.162.72`** уже пропустило трафик (21 пакет — сайт подключается), правило **deny прочих** отбило **148 пакетов** перебора. Главное: кандидат-сайт ходит **без отказов авторизаци + +--- +*Автосохранено из session [`070eabd1`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/070eabd1-e97b-42bb-a251-1a48400891dc.jsonl) — 5 сообщ., тулы: AskUserQuestion, Bash, Edit, Read* diff --git a/notes/claude/2026-06-28-223043-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md b/notes/claude/2026-06-28-223043-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md new file mode 100644 index 0000000..25c7f5a --- /dev/null +++ b/notes/claude/2026-06-28-223043-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md @@ -0,0 +1,30 @@ +--- +date: 2026-06-28 +type: claude-session +session_id: 070eabd1-e97b-42bb-a251-1a48400891dc +started: 2026-06-28T17:54:07.937Z +ended: 2026-06-28T19:30:43.921Z +messages: 8 +tools: [AskUserQuestion, Bash, Edit, Read, Write] +tags: [claude, session] +--- + +# Давай подключимся к серверу ММФБ 1C . Нужно восстановить Программу efektsever + +## Запрос + +Давай подключимся к серверу ММФБ 1C . Нужно восстановить Программу efektsever + +## Итог (последний ответ Claude, до 500 симв.) + +Перепроверил — и хорошо, что ты назвал сайт. + +## frame.ru ≠ мой прежний кандидат +- **frame.ru = `92.53.96.188`** (JSC Timeweb, подтверждённый **Bitrix**-сайт). +- Тот `185.56.162.72`, что я угадал, — **переборщик** (поймал его в deny-логе, режется). Исправил whitelist на правильный `92.53.96.188`. + +## Атака отрезана полностью +После исправления: **4625 = 0** за 70с, **lockout = 0**, учётка держится разлоченной, `efsaveragent` Running. В deny-логе только атакующие (`154.57.197.99` основной, BG-Razi + +--- +*Автосохранено из session [`070eabd1`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/070eabd1-e97b-42bb-a251-1a48400891dc.jsonl) — 8 сообщ., тулы: AskUserQuestion, Bash, Edit, Read, Write* diff --git a/notes/claude/2026-06-28-230935-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md b/notes/claude/2026-06-28-230935-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md new file mode 100644 index 0000000..334438b --- /dev/null +++ b/notes/claude/2026-06-28-230935-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md @@ -0,0 +1,30 @@ +--- +date: 2026-06-28 +type: claude-session +session_id: 070eabd1-e97b-42bb-a251-1a48400891dc +started: 2026-06-28T17:54:07.937Z +ended: 2026-06-28T20:09:35.974Z +messages: 9 +tools: [AskUserQuestion, Bash, Edit, Read, Write] +tags: [claude, session] +--- + +# Давай подключимся к серверу ММФБ 1C . Нужно восстановить Программу efektsever + +## Запрос + +Давай подключимся к серверу ММФБ 1C . Нужно восстановить Программу efektsever + +## Итог (последний ответ Claude, до 500 симв.) + +## ✅ Watchdog развёрнут и проверен боем + +**Где:** `/root/antoshka-watch-effector.sh` на Антошке (LXC 137), **cron `*/10`**. + +**Что делает каждые 10 мин:** +- SSH на коробку → проверяет `efsaveragent` + lockout `.\Администратор` + признаки атаки (4740 за 30м, 4625 за 5м); +- если служба упала / учётка залочена → **сам лечит** (тот же playbook: disable→unlock→проверка пароля→re-pin→start); +- алерт в **Telegram** (бот @maxim_dttb_bot → твой chat) **и email `support@dttb.ru`** (через mailcow `10.0.0.1 + +--- +*Автосохранено из session [`070eabd1`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/070eabd1-e97b-42bb-a251-1a48400891dc.jsonl) — 9 сообщ., тулы: AskUserQuestion, Bash, Edit, Read, Write* diff --git a/notes/claude/2026-06-28-231730-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md b/notes/claude/2026-06-28-231730-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md new file mode 100644 index 0000000..22df5b0 --- /dev/null +++ b/notes/claude/2026-06-28-231730-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md @@ -0,0 +1,28 @@ +--- +date: 2026-06-28 +type: claude-session +session_id: 070eabd1-e97b-42bb-a251-1a48400891dc +started: 2026-06-28T17:54:07.937Z +ended: 2026-06-28T20:17:30.420Z +messages: 10 +tools: [AskUserQuestion, Bash, Edit, Read, Write] +tags: [claude, session] +--- + +# Давай подключимся к серверу ММФБ 1C . Нужно восстановить Программу efektsever + +## Запрос + +Давай подключимся к серверу ММФБ 1C . Нужно восстановить Программу efektsever + +## Итог (последний ответ Claude, до 500 симв.) + +Картина по бэкапу прояснилась: + +## Развязку `efsaveragent` — НЕ делаем +OneDrive-десктоп-клиент **не установлен** (нет ни папки, ни процесса), значит Effector грузит в OneDrive **своим встроенным коннектором** (его креды/токен почти наверняка лежат в профиле `.\Администратор`). Перевод на **LocalSystem сломал бы выгрузку**. Плюс это уже и **не нужно** — корень локаута (внешний brute) закрыт whitelist'ом. **Оставляем под `.\Администратор`.** Вопрос #2 закрыт. + +Локально копии складываются на **D:** + +--- +*Автосохранено из session [`070eabd1`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/070eabd1-e97b-42bb-a251-1a48400891dc.jsonl) — 10 сообщ., тулы: AskUserQuestion, Bash, Edit, Read, Write* diff --git a/notes/claude/2026-06-28-232132-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md b/notes/claude/2026-06-28-232132-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md new file mode 100644 index 0000000..d0517a3 --- /dev/null +++ b/notes/claude/2026-06-28-232132-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md @@ -0,0 +1,27 @@ +--- +date: 2026-06-28 +type: claude-session +session_id: 070eabd1-e97b-42bb-a251-1a48400891dc +started: 2026-06-28T17:54:07.937Z +ended: 2026-06-28T20:21:32.580Z +messages: 11 +tools: [AskUserQuestion, Bash, Edit, Read, Write] +tags: [claude, session] +--- + +# Давай подключимся к серверу ММФБ 1C . Нужно восстановить Программу efektsever + +## Запрос + +Давай подключимся к серверу ММФБ 1C . Нужно восстановить Программу efektsever + +## Итог (последний ответ Claude, до 500 симв.) + +Понял, останавливаюсь с проверками — скрин всё показал. + +**OneDrive-выгрузка работает** ✅ — твой «Тест» вернул `Status: Connected`, это вызов **Microsoft Graph** `GET /v1.0/me/drive/root:/Backap Server 1C Lion-ART/ZUP-SP` с валидным Bearer-токеном, авторизация предоставлена. То есть Effector грузит в OneDrive своим коннектором по Graph API (не десктоп-клиент), папка `/Backap Server 1C Lion-ART/<задача>`. + +Значит вопрос «доходят ли копии до облака» закрыт: **доходят**. Провал 25→28.06 был **тольк + +--- +*Автосохранено из session [`070eabd1`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/070eabd1-e97b-42bb-a251-1a48400891dc.jsonl) — 11 сообщ., тулы: AskUserQuestion, Bash, Edit, Read, Write* diff --git a/notes/claude/2026-06-28-232923-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md b/notes/claude/2026-06-28-232923-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md new file mode 100644 index 0000000..fca2a3b --- /dev/null +++ b/notes/claude/2026-06-28-232923-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md @@ -0,0 +1,34 @@ +--- +date: 2026-06-28 +type: claude-session +session_id: 070eabd1-e97b-42bb-a251-1a48400891dc +started: 2026-06-28T17:54:07.937Z +ended: 2026-06-28T20:29:23.040Z +messages: 14 +tools: [AskUserQuestion, Bash, Edit, Read, Write] +tags: [claude, session] +--- + +# Давай подключимся к серверу ММФБ 1C . Нужно восстановить Программу efektsever + +## Запрос + +Давай подключимся к серверу ММФБ 1C . Нужно восстановить Программу efektsever + +## Итог (последний ответ Claude, до 500 симв.) + +Зафиксировал правило, больше сервер не трогаю. + +## Итог — всё в рабочем состоянии + +**На самой коробке ничего не меняю** (Effector/настройки/рабочий стол — твои). Что сделано за сессию: + +| Слой | Статус | Где живёт | +|---|---|---| +| `efsaveragent` | восстановлен, Running | сервер (конфиг не трогаю) | +| Атака на 1С-порты | отрезана (whitelist `frame.ru` 92.53.96.188) | **MikroTik** (роутер) | +| `.\Администратор` | разлочен | — | +| Watchdog (TG + `support@dttb.ru`) | живёт, cron */10, self-heal | * + +--- +*Автосохранено из session [`070eabd1`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/070eabd1-e97b-42bb-a251-1a48400891dc.jsonl) — 14 сообщ., тулы: AskUserQuestion, Bash, Edit, Read, Write* diff --git a/notes/claude/2026-06-28-233211-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md b/notes/claude/2026-06-28-233211-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md new file mode 100644 index 0000000..2a8b813 --- /dev/null +++ b/notes/claude/2026-06-28-233211-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md @@ -0,0 +1,35 @@ +--- +date: 2026-06-28 +type: claude-session +session_id: 070eabd1-e97b-42bb-a251-1a48400891dc +started: 2026-06-28T17:54:07.937Z +ended: 2026-06-28T20:32:11.337Z +messages: 15 +tools: [AskUserQuestion, Bash, Edit, Read, Write] +tags: [claude, session] +--- + +# Давай подключимся к серверу ММФБ 1C . Нужно восстановить Программу efektsever + +## Запрос + +Давай подключимся к серверу ММФБ 1C . Нужно восстановить Программу efektsever + +## Итог (последний ответ Claude, до 500 симв.) + +Вот значения для **email-уведомлений Effector Saver** — введёшь в GUI на сервере 1С: + +## SMTP (Сервис → Настройки → раздел Email/SMTP) +| Поле | Значение | +|---|---| +| Сервер SMTP | `mail.dttb.ru` | +| Порт | `587`, шифрование **STARTTLS/TLS** (или `465` + SSL) | +| Требуется авторизация | **да** | +| Пользователь / логин | `support@dttb.ru` | +| Пароль | `1qaz!QAZ` | +| От кого (From) | `support@dttb.ru` | +| Кому (получатель) | `support@dttb.ru` (можно добавить `batlaew@gmail.com`) | +| HELO / имя хос + +--- +*Автосохранено из session [`070eabd1`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/070eabd1-e97b-42bb-a251-1a48400891dc.jsonl) — 15 сообщ., тулы: AskUserQuestion, Bash, Edit, Read, Write* diff --git a/notes/claude/2026-06-28-233401-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md b/notes/claude/2026-06-28-233401-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md new file mode 100644 index 0000000..01c90d8 --- /dev/null +++ b/notes/claude/2026-06-28-233401-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md @@ -0,0 +1,28 @@ +--- +date: 2026-06-28 +type: claude-session +session_id: 070eabd1-e97b-42bb-a251-1a48400891dc +started: 2026-06-28T17:54:07.937Z +ended: 2026-06-28T20:34:01.738Z +messages: 16 +tools: [AskUserQuestion, Bash, Edit, Read, Write] +tags: [claude, session] +--- + +# Давай подключимся к серверу ММФБ 1C . Нужно восстановить Программу efektsever + +## Запрос + +Давай подключимся к серверу ММФБ 1C . Нужно восстановить Программу efektsever + +## Итог (последний ответ Claude, до 500 симв.) + +Честно: настройки SMTP в Effector — это **GUI-only** (хранятся в его проприетарной базе `esdata.db`), по SSH/CLI их не выставить. «Сам» я могу только **кликая в окне сервера через computer-use** (управляя твоим Mac). + +Но есть условие, и тут затык по твоему скрину: + +- computer-use может кликать в **нативном RDP-клиенте** (Microsoft Remote Desktop / Parallels / Windows App) — там я открою Effector → Сервис → Настройки и введу всё сам. +- А на скрине ты смотришь сервер, похоже, **через браузер (Yand + +--- +*Автосохранено из session [`070eabd1`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/070eabd1-e97b-42bb-a251-1a48400891dc.jsonl) — 16 сообщ., тулы: AskUserQuestion, Bash, Edit, Read, Write* diff --git a/notes/claude/2026-06-28-233654-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md b/notes/claude/2026-06-28-233654-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md new file mode 100644 index 0000000..3977a84 --- /dev/null +++ b/notes/claude/2026-06-28-233654-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md @@ -0,0 +1,31 @@ +--- +date: 2026-06-28 +type: claude-session +session_id: 070eabd1-e97b-42bb-a251-1a48400891dc +started: 2026-06-28T17:54:07.937Z +ended: 2026-06-28T20:36:54.566Z +messages: 17 +tools: [AskUserQuestion, Bash, Edit, Read, Write] +tags: [claude, session] +--- + +# Давай подключимся к серверу ММФБ 1C . Нужно восстановить Программу efektsever + +## Запрос + +Давай подключимся к серверу ММФБ 1C . Нужно восстановить Программу efektsever + +## Итог (последний ответ Claude, до 500 симв.) + +Готово. На рабочем столе сервера (Администратор) лежит файл: + +**`Effector-почта-SMTP.txt`** (2 КБ, UTF-8 — кириллица в Блокноте отобразится корректно). + +Внутри — пошагово: +- **Шаг 1 — SMTP:** сервер `mail.dttb.ru:587` (STARTTLS), логин/пароль `support@dttb.ru` / `1qaz!QAZ`, From/To `support@dttb.ru`, запасные порты 465/`10.0.0.107:587`, и напоминание нажать «Тест». +- **Шаг 2 — уведомления по 6 задачам** (получатель `support@dttb.ru`, слать на «ошибка»). + +Если на рабочем столе не видно сразу — об + +--- +*Автосохранено из session [`070eabd1`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/070eabd1-e97b-42bb-a251-1a48400891dc.jsonl) — 17 сообщ., тулы: AskUserQuestion, Bash, Edit, Read, Write* diff --git a/notes/claude/2026-06-28-234843-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md b/notes/claude/2026-06-28-234843-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md new file mode 100644 index 0000000..84fa46a --- /dev/null +++ b/notes/claude/2026-06-28-234843-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md @@ -0,0 +1,32 @@ +--- +date: 2026-06-28 +type: claude-session +session_id: 070eabd1-e97b-42bb-a251-1a48400891dc +started: 2026-06-28T17:54:07.937Z +ended: 2026-06-28T20:48:43.665Z +messages: 17 +tools: [AskUserQuestion, Bash, Edit, Read, Write] +tags: [claude, session] +--- + +# Давай подключимся к серверу ММФБ 1C . Нужно восстановить Программу efektsever + +## Запрос + +Давай подключимся к серверу ММФБ 1C . Нужно восстановить Программу efektsever + +## Итог (последний ответ Claude, до 500 симв.) + +Вижу ошибку — **«Read timed out» из-за несовпадения порт↔шифрование:** у тебя стоит **STARTTLS + порт 465**, а это взаимоисключающие вещи. + +- **587 ↔ STARTTLS** +- **465 ↔ SSL/TLS** + +Ты смешал: взял порт запасного варианта (465) с шифрованием основного (STARTTLS). 465 ждёт сразу TLS-рукопожатие, а Effector шлёт plaintext → зависание → таймаут. + +## Исправь (одно из двух) +- **Проще:** Порт `465` → поменяй на **`587`** (шифрование STARTTLS оставь). ← рекомендую +- Или: оставь `465`, а «Защита соедине + +--- +*Автосохранено из session [`070eabd1`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/070eabd1-e97b-42bb-a251-1a48400891dc.jsonl) — 17 сообщ., тулы: AskUserQuestion, Bash, Edit, Read, Write* diff --git a/notes/claude/2026-06-29-000332-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md b/notes/claude/2026-06-29-000332-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md new file mode 100644 index 0000000..1eb6d04 --- /dev/null +++ b/notes/claude/2026-06-29-000332-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md @@ -0,0 +1,28 @@ +--- +date: 2026-06-29 +type: claude-session +session_id: 070eabd1-e97b-42bb-a251-1a48400891dc +started: 2026-06-28T17:54:07.937Z +ended: 2026-06-28T21:03:32.409Z +messages: 20 +tools: [AskUserQuestion, Bash, Edit, Read, Write] +tags: [claude, session] +--- + +# Давай подключимся к серверу ММФБ 1C . Нужно восстановить Программу efektsever + +## Запрос + +Давай подключимся к серверу ММФБ 1C . Нужно восстановить Программу efektsever + +## Итог (последний ответ Claude, до 500 симв.) + +Останавливаю тесты. + +Суть: чинить на 1С-сервере нечего — там старый Effector. Лечится **на mailcow**: сейчас он отдаёт только ECDSA-шифры, добавлю **RSA-сертификат** для порта 587 → старый Effector сможет подключиться (а современные клиенты как были на ECDSA/TLS1.3, так и останутся). Это моя зона (почтовый сервер VM 107), 1С-коробку не трогаю. + +Хочешь — **сделаю RSA-совместимость на mailcow**, и тогда твои настройки (`mail.dttb.ru:587 STARTTLS, support@dttb.ru`) заработают без смены провайдера? + + +--- +*Автосохранено из session [`070eabd1`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/070eabd1-e97b-42bb-a251-1a48400891dc.jsonl) — 20 сообщ., тулы: AskUserQuestion, Bash, Edit, Read, Write* diff --git a/notes/claude/2026-06-29-000904-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md b/notes/claude/2026-06-29-000904-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md new file mode 100644 index 0000000..f9d3fef --- /dev/null +++ b/notes/claude/2026-06-29-000904-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md @@ -0,0 +1,30 @@ +--- +date: 2026-06-29 +type: claude-session +session_id: 070eabd1-e97b-42bb-a251-1a48400891dc +started: 2026-06-28T17:54:07.937Z +ended: 2026-06-28T21:09:04.355Z +messages: 21 +tools: [AskUserQuestion, Bash, Edit, Read, Write] +tags: [claude, session] +--- + +# Давай подключимся к серверу ММФБ 1C . Нужно восстановить Программу efektsever + +## Запрос + +Давай подключимся к серверу ММФБ 1C . Нужно восстановить Программу efektsever + +## Итог (последний ответ Claude, до 500 симв.) + +✅ **Сработало на стороне mailcow.** Проверка снаружи: +- Легаси RSA-шифр `AES256-SHA` на **TLS 1.2** теперь **подключается** (раньше — handshake failure) — это ровно то, что нужно старому Effector. +- Современные клиенты как были на **ECDSA/TLS 1.3**, так и остались — ничего не сломал. + +Dual-cert (RSA + ECDSA) добавлен в postfix, изменение в `extra.cf` (переживёт обновления), бэкап сделан. + +## Теперь повтори в Effector +Настройки прежние: `mail.dttb.ru` : **587** : **STARTTLS** : `support@dttb.ru` + +--- +*Автосохранено из session [`070eabd1`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/070eabd1-e97b-42bb-a251-1a48400891dc.jsonl) — 21 сообщ., тулы: AskUserQuestion, Bash, Edit, Read, Write* diff --git a/notes/claude/2026-06-29-001249-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md b/notes/claude/2026-06-29-001249-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md new file mode 100644 index 0000000..b47ba71 --- /dev/null +++ b/notes/claude/2026-06-29-001249-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md @@ -0,0 +1,29 @@ +--- +date: 2026-06-29 +type: claude-session +session_id: 070eabd1-e97b-42bb-a251-1a48400891dc +started: 2026-06-28T17:54:07.937Z +ended: 2026-06-28T21:12:49.565Z +messages: 21 +tools: [AskUserQuestion, Bash, Edit, Read, Write] +tags: [claude, session] +--- + +# Давай подключимся к серверу ММФБ 1C . Нужно восстановить Программу efektsever + +## Запрос + +Давай подключимся к серверу ММФБ 1C . Нужно восстановить Программу efektsever + +## Итог (последний ответ Claude, до 500 симв.) + +Готово — теперь mailcow на 587 предлагает **TLS 1.0/1.1/1.2/1.3** (nmap подтвердил), плюс RSA-шифры с прошлого шага. Оба препятствия для старого Effector сняты. + +**Повтори «Отправить тестовое письмо»** — с теми же настройками (587 / STARTTLS / support@dttb.ru). Теперь должно уйти. + +Если прошло — письмо придёт на `support@dttb.ru` (и на `it5870@yandex.ru`, он у тебя в получателях). Тогда останется только включить уведомления на 6 задачах (как в файле на рабочем столе, Шаг 2). + +Если опять ошибка — + +--- +*Автосохранено из session [`070eabd1`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/070eabd1-e97b-42bb-a251-1a48400891dc.jsonl) — 21 сообщ., тулы: AskUserQuestion, Bash, Edit, Read, Write* diff --git a/notes/claude/2026-06-29-001601-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md b/notes/claude/2026-06-29-001601-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md new file mode 100644 index 0000000..f9c463c --- /dev/null +++ b/notes/claude/2026-06-29-001601-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md @@ -0,0 +1,33 @@ +--- +date: 2026-06-29 +type: claude-session +session_id: 070eabd1-e97b-42bb-a251-1a48400891dc +started: 2026-06-28T17:54:07.937Z +ended: 2026-06-28T21:16:01.082Z +messages: 21 +tools: [AskUserQuestion, Bash, Edit, Read, Write] +tags: [claude, session] +--- + +# Давай подключимся к серверу ММФБ 1C . Нужно восстановить Программу efektsever + +## Запрос + +Давай подключимся к серверу ММФБ 1C . Нужно восстановить Программу efektsever + +## Итог (последний ответ Claude, до 500 симв.) + +Записал в vault (инцидент + mailcow-доку). + +## Полный итог сессии по MMFB 1C + +| Что было | Что сделано | +|---|---| +| `efsaveragent` лежал, бэкапы стояли 25→28.06 | восстановлен, Running | +| **Корень** — 1С-кластер-порты в интернете, brute лочил Администратора | whitelist `frame.ru` на MikroTik, остальное drop | +| Учётка лочилась каждые 10 мин | разлочена, держится; взлома нет | +| Не было мониторинга | watchdog на Антошке (TG+почта, self-heal, cron */10) | +| Не было сигнала по бэкапам | **email- + +--- +*Автосохранено из session [`070eabd1`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/070eabd1-e97b-42bb-a251-1a48400891dc.jsonl) — 21 сообщ., тулы: AskUserQuestion, Bash, Edit, Read, Write* diff --git a/notes/claude/2026-06-29-002135-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md b/notes/claude/2026-06-29-002135-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md new file mode 100644 index 0000000..77bc6bf --- /dev/null +++ b/notes/claude/2026-06-29-002135-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md @@ -0,0 +1,30 @@ +--- +date: 2026-06-29 +type: claude-session +session_id: 070eabd1-e97b-42bb-a251-1a48400891dc +started: 2026-06-28T17:54:07.937Z +ended: 2026-06-28T21:21:35.862Z +messages: 22 +tools: [AskUserQuestion, Bash, Edit, Read, Write] +tags: [claude, session] +--- + +# Давай подключимся к серверу ММФБ 1C . Нужно восстановить Программу efektsever + +## Запрос + +Давай подключимся к серверу ММФБ 1C . Нужно восстановить Программу efektsever + +## Итог (последний ответ Claude, до 500 симв.) + +Готово. Контекст сохранён — завтра продолжим с того же места. + +**Где остановились (на завтра):** +1. Снять проброс 1С-портов на MikroTik целиком (обмен frame.ru, похоже, исходящий — почти подтвердили). +2. Аудит периметра: Proxmox `:8006`, SSH `.49`/`.205`, `:8007` `.245`. +3. Опц.: увести бэкапы с OneDrive на Nextcloud; вернуть TLS≥1.2 на mailcow, когда Effector обновишь. + +Всё работает, watchdog дежурит. До завтра 👋 + +--- +*Автосохранено из session [`070eabd1`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/070eabd1-e97b-42bb-a251-1a48400891dc.jsonl) — 22 сообщ., тулы: AskUserQuestion, Bash, Edit, Read, Write* diff --git a/notes/claude/2026-06-29-104045-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md b/notes/claude/2026-06-29-104045-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md new file mode 100644 index 0000000..78e66a6 --- /dev/null +++ b/notes/claude/2026-06-29-104045-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md @@ -0,0 +1,31 @@ +--- +date: 2026-06-29 +type: claude-session +session_id: 070eabd1-e97b-42bb-a251-1a48400891dc +started: 2026-06-28T17:54:07.937Z +ended: 2026-06-29T07:40:45.014Z +messages: 23 +tools: [AskUserQuestion, Bash, Edit, Read, Write] +tags: [claude, session] +--- + +# Давай подключимся к серверу ММФБ 1C . Нужно восстановить Программу efektsever + +## Запрос + +Давай подключимся к серверу ММФБ 1C . Нужно восстановить Программу efektsever + +## Итог (последний ответ Claude, до 500 симв.) + +Готово. Отчёт составлен и сохранён: [projects/mmfb/reports/2026-06-29-отчёт-инцидент-атака-1с.md](projects/mmfb/reports/2026-06-29-отчёт-инцидент-атака-1с.md) + +Структура (под руководителя — кратко сверху, доказательства в приложении): + +**Основная часть** +1. **Кратко** — атака 25–28.06, взлома нет, бэкапы стояли 3 дня, угроза устранена. +2. Что произошло — порты 1С были открыты в интернет, шёл перебор паролей. +3. **Был ли взлом** — нет (0 успешных входов, закладок/чужих учёток нет). +4. Первопричин + +--- +*Автосохранено из session [`070eabd1`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/070eabd1-e97b-42bb-a251-1a48400891dc.jsonl) — 23 сообщ., тулы: AskUserQuestion, Bash, Edit, Read, Write* diff --git a/notes/claude/2026-06-29-104713-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md b/notes/claude/2026-06-29-104713-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md new file mode 100644 index 0000000..7f9dd93 --- /dev/null +++ b/notes/claude/2026-06-29-104713-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md @@ -0,0 +1,31 @@ +--- +date: 2026-06-29 +type: claude-session +session_id: 070eabd1-e97b-42bb-a251-1a48400891dc +started: 2026-06-28T17:54:07.937Z +ended: 2026-06-29T07:47:13.854Z +messages: 24 +tools: [AskUserQuestion, Bash, Edit, Read, Write] +tags: [claude, session] +--- + +# Давай подключимся к серверу ММФБ 1C . Нужно восстановить Программу efektsever + +## Запрос + +Давай подключимся к серверу ММФБ 1C . Нужно восстановить Программу efektsever + +## Итог (последний ответ Claude, до 500 симв.) + +По журналам — **да, твоя версия очень похожа на правду**, вот доказательства. + +## Что показывают логи (System log, 25.06) +| Время (25.06.2026) | Событие | +|---|---| +| ночь, 1:00–6:00 | бэкапы **ещё прошли успешно** (учётка была в норме) | +| **15:11:32** | служба Effector Saver меняет состояние | +| **15:12:54** | **первый отказ** `efsaveragent` (Event 7038 — учётка `.\Администратор` уже залочена) | +| **15:13:16** | служба **«1C:Enterprise 8.3 Server Agent» перешла в состояние "работает"** (переза + +--- +*Автосохранено из session [`070eabd1`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/070eabd1-e97b-42bb-a251-1a48400891dc.jsonl) — 24 сообщ., тулы: AskUserQuestion, Bash, Edit, Read, Write* diff --git a/notes/claude/2026-06-29-105449-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md b/notes/claude/2026-06-29-105449-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md new file mode 100644 index 0000000..92edd03 --- /dev/null +++ b/notes/claude/2026-06-29-105449-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md @@ -0,0 +1,30 @@ +--- +date: 2026-06-29 +type: claude-session +session_id: 070eabd1-e97b-42bb-a251-1a48400891dc +started: 2026-06-28T17:54:07.937Z +ended: 2026-06-29T07:54:49.591Z +messages: 25 +tools: [AskUserQuestion, Bash, Edit, Read, Write] +tags: [claude, session] +--- + +# Давай подключимся к серверу ММФБ 1C . Нужно восстановить Программу efektsever + +## Запрос + +Давай подключимся к серверу ММФБ 1C . Нужно восстановить Программу efektsever + +## Итог (последний ответ Claude, до 500 симв.) + +Готово. Отчёт в базе обновлён (добавлены конкретные порты, раздел «почему именно сейчас» и точный список «что закрыть»): [отчёт](projects/mmfb/reports/2026-06-29-отчёт-инцидент-атака-1с.md). + +**Прямой ответ — какие порты закрыть:** + +| Приоритет | Порты | Куда ведут | Почему | +|---|---|---|---| +| 🔴 **Критично (причина инцидента)** | **1540, 1541, 1560–1591** | сервер 1С `10.253.1.240` | через них шёл перебор; убрать из интернета, оставить обмен с сайтом по VPN | +| 🟠 Рекомендуется | **3389** (RDP) + +--- +*Автосохранено из session [`070eabd1`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/070eabd1-e97b-42bb-a251-1a48400891dc.jsonl) — 25 сообщ., тулы: AskUserQuestion, Bash, Edit, Read, Write* diff --git a/notes/claude/2026-06-29-112216-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md b/notes/claude/2026-06-29-112216-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md new file mode 100644 index 0000000..a20794b --- /dev/null +++ b/notes/claude/2026-06-29-112216-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md @@ -0,0 +1,30 @@ +--- +date: 2026-06-29 +type: claude-session +session_id: 070eabd1-e97b-42bb-a251-1a48400891dc +started: 2026-06-28T17:54:07.937Z +ended: 2026-06-29T08:22:16.526Z +messages: 28 +tools: [AskUserQuestion, Bash, Edit, Read, Write] +tags: [claude, session] +--- + +# Давай подключимся к серверу ММФБ 1C . Нужно восстановить Программу efektsever + +## Запрос + +Давай подключимся к серверу ММФБ 1C . Нужно восстановить Программу efektsever + +## Итог (последний ответ Claude, до 500 симв.) + +Опознал все выставленные наружу хосты. Вот полная карта — и важный нюанс: **VPN-порты трогать НЕ надо** (это и есть безопасный путь доступа, через них и надо ходить вместо прямых дыр). + +## Что сейчас торчит в интернет (`195.26.30.163`) + +| IP | Хост | Порт наружу | Что это | Решение | +|---|---|---|---|---| +| **.10** | **KOMPUTER** | **3389 RDP** | **пользовательский ПК** (Gigabyte) | 🔴 **закрыть** — вход для шифровальщиков | +| .240 | WIN-70M2VEJIKEF | 1540/1541/1560-1591 | сервер 1С | 🔴 уже прикр + +--- +*Автосохранено из session [`070eabd1`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/070eabd1-e97b-42bb-a251-1a48400891dc.jsonl) — 28 сообщ., тулы: AskUserQuestion, Bash, Edit, Read, Write* diff --git a/notes/claude/2026-06-29-121159-проверь-подкоп-на-бужарово-клиенты-говорят-что-не-.md b/notes/claude/2026-06-29-121159-проверь-подкоп-на-бужарово-клиенты-говорят-что-не-.md new file mode 100644 index 0000000..703f853 --- /dev/null +++ b/notes/claude/2026-06-29-121159-проверь-подкоп-на-бужарово-клиенты-говорят-что-не-.md @@ -0,0 +1,29 @@ +--- +date: 2026-06-29 +type: claude-session +session_id: 5bd09b85-8f41-49cd-bae8-9e3bb60157ae +started: 2026-06-29T08:36:24.273Z +ended: 2026-06-29T09:11:59.171Z +messages: 2 +tools: [Bash, Edit, Read, Write] +tags: [claude, session] +--- + +# Проверь подкоп на Бужарово. Клиенты говорят что не работает. + +## Запрос + +Проверь подкоп на Бужарово. Клиенты говорят что не работает. + +## Итог (последний ответ Claude, до 500 симв.) + +Проверил с самого Server1C — и это дало важный, но неожиданный результат. + +## Коротко +**С Server1C обход не работает — но это НЕ вина роутера.** Server1C оказался невалидной точкой проверки из-за коллизии подсетей через NetBird. **На объекте для обычных клиентов обход исправен.** + +## Что намерил с сервера (`192.168.1.249`) +- DNS отдаёт правильный **FakeIP**: telegram→`198.18.0.16`, youtube→`198.18.0.18`, gosuslugi→реальный IP. То есть резолвер и Force-DNS DNAT на TR3000 работают даже для хардкод + +--- +*Автосохранено из session [`5bd09b85`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/5bd09b85-8f41-49cd-bae8-9e3bb60157ae.jsonl) — 2 сообщ., тулы: Bash, Edit, Read, Write* diff --git a/notes/claude/2026-06-29-123127-проверь-подкоп-на-бужарово-клиенты-говорят-что-не-.md b/notes/claude/2026-06-29-123127-проверь-подкоп-на-бужарово-клиенты-говорят-что-не-.md new file mode 100644 index 0000000..58bf94d --- /dev/null +++ b/notes/claude/2026-06-29-123127-проверь-подкоп-на-бужарово-клиенты-говорят-что-не-.md @@ -0,0 +1,26 @@ +--- +date: 2026-06-29 +type: claude-session +session_id: 5bd09b85-8f41-49cd-bae8-9e3bb60157ae +started: 2026-06-29T08:36:24.273Z +ended: 2026-06-29T09:31:27.811Z +messages: 3 +tools: [Bash, Edit, Read, Write] +tags: [claude, session] +--- + +# Проверь подкоп на Бужарово. Клиенты говорят что не работает. + +## Запрос + +Проверь подкоп на Бужарово. Клиенты говорят что не работает. + +## Итог (последний ответ Claude, до 500 симв.) + +Да — теперь точно работает, и это проверено прямым тестом, а не косвенно. Но честно: **мой прошлый ответ «на объекте исправен» был преждевременным** — твой вопрос был в точку и вскрыл реальную проблему. + +## Что оказалось на самом деле +«Обход не работал у клиентов» — корень был **не только** в DNS-утечках (их я починил утром). Главная причина: после ребута роутера в 04:36 **залип forward/tproxy-путь sing-box** — известная грабля «роутер ходит, а LAN-клиенты нет». Роутерный `curl https://web.teleg + +--- +*Автосохранено из session [`5bd09b85`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/5bd09b85-8f41-49cd-bae8-9e3bb60157ae.jsonl) — 3 сообщ., тулы: Bash, Edit, Read, Write* diff --git a/notes/claude/2026-06-29-123431-проверь-подкоп-на-бужарово-клиенты-говорят-что-не-.md b/notes/claude/2026-06-29-123431-проверь-подкоп-на-бужарово-клиенты-говорят-что-не-.md new file mode 100644 index 0000000..60191de --- /dev/null +++ b/notes/claude/2026-06-29-123431-проверь-подкоп-на-бужарово-клиенты-говорят-что-не-.md @@ -0,0 +1,27 @@ +--- +date: 2026-06-29 +type: claude-session +session_id: 5bd09b85-8f41-49cd-bae8-9e3bb60157ae +started: 2026-06-29T08:36:24.273Z +ended: 2026-06-29T09:34:31.279Z +messages: 4 +tools: [Bash, Edit, Read, Write] +tags: [claude, session] +--- + +# Проверь подкоп на Бужарово. Клиенты говорят что не работает. + +## Запрос + +Проверь подкоп на Бужарово. Клиенты говорят что не работает. + +## Итог (последний ответ Claude, до 500 симв.) + +Честно и без воды: + +**Прямо сейчас, для клиентов — да, проверено.** netns-тест — это не косвенный признак: трафик заходит на br-lan ровно тем же путём, что у телефона (через bridged-AP → br-lan → tproxy → туннель), и я дважды получил HTTP 200 на telegram/youtube за ~0.25с, а ДО фикса был чистый таймаут. Ближе к реальному клиенту без физического телефона на объекте не подобраться. + +**Но «100% навсегда» — нет, и врать не буду.** Один честный астериск: **устойчивость к ребуту.** Сломалось оно именн + +--- +*Автосохранено из session [`5bd09b85`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/5bd09b85-8f41-49cd-bae8-9e3bb60157ae.jsonl) — 4 сообщ., тулы: Bash, Edit, Read, Write* diff --git a/notes/claude/2026-06-29-125042-проверь-подкоп-на-бужарово-клиенты-говорят-что-не-.md b/notes/claude/2026-06-29-125042-проверь-подкоп-на-бужарово-клиенты-говорят-что-не-.md new file mode 100644 index 0000000..c64ae9b --- /dev/null +++ b/notes/claude/2026-06-29-125042-проверь-подкоп-на-бужарово-клиенты-говорят-что-не-.md @@ -0,0 +1,28 @@ +--- +date: 2026-06-29 +type: claude-session +session_id: 5bd09b85-8f41-49cd-bae8-9e3bb60157ae +started: 2026-06-29T08:36:24.273Z +ended: 2026-06-29T09:50:42.702Z +messages: 5 +tools: [Bash, Edit, Read, Write] +tags: [claude, session] +--- + +# Проверь подкоп на Бужарово. Клиенты говорят что не работает. + +## Запрос + +Проверь подкоп на Бужарово. Клиенты говорят что не работает. + +## Итог (последний ответ Claude, до 500 симв.) + +Готово — поставил и проверил боевым тестом. Вот что теперь работает. + +## Автолечение (на самом роутере) +- **После каждого ребута** `/etc/rc.local` ждёт 75с и перезапускает podkop — закрывает ту самую гонку старта, из-за которой обход залипал. (busybox-cron не умеет `@reboot`, поэтому через rc.local.) +- **Страховка** cron `*/15`: пробник → если сломан, лечит. На случай если LXC139 недоступна. +- Скрипты `podkop-probe.sh` (netns-«клиент», тестит forward-путь как телефон) и `podkop-heal.sh` (restart + +--- +*Автосохранено из session [`5bd09b85`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/5bd09b85-8f41-49cd-bae8-9e3bb60157ae.jsonl) — 5 сообщ., тулы: Bash, Edit, Read, Write* diff --git a/notes/claude/2026-06-29-125342-проверь-подкоп-на-бужарово-клиенты-говорят-что-не-.md b/notes/claude/2026-06-29-125342-проверь-подкоп-на-бужарово-клиенты-говорят-что-не-.md new file mode 100644 index 0000000..b9f7c08 --- /dev/null +++ b/notes/claude/2026-06-29-125342-проверь-подкоп-на-бужарово-клиенты-говорят-что-не-.md @@ -0,0 +1,25 @@ +--- +date: 2026-06-29 +type: claude-session +session_id: 5bd09b85-8f41-49cd-bae8-9e3bb60157ae +started: 2026-06-29T08:36:24.273Z +ended: 2026-06-29T09:53:42.373Z +messages: 6 +tools: [Bash, Edit, Read, Write] +tags: [claude, session] +--- + +# Проверь подкоп на Бужарово. Клиенты говорят что не работает. + +## Запрос + +Проверь подкоп на Бужарово. Клиенты говорят что не работает. + +## Итог (последний ответ Claude, до 500 симв.) + +Сделано. Email всех алертов podkop-watchdog теперь идёт на **`support@dttb.ru`** (ящик существует на mailcow, тестовое письмо доставлено). Telegram-канал (бот Антошки → тебе) без изменений. Зафиксировал в [podkop-router.md](projects/buzharovo/podkop-router.md). + +Уточнение по «для всех алертов»: подкоп-watchdog — **единственная** система, которая сейчас шлёт email. Остальные мониторы (server1c-watchdog на LXC139, self-watchdog Антошки) алертят только в Telegram. Если хочешь, чтобы и они дублирова + +--- +*Автосохранено из session [`5bd09b85`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/5bd09b85-8f41-49cd-bae8-9e3bb60157ae.jsonl) — 6 сообщ., тулы: Bash, Edit, Read, Write* diff --git a/notes/claude/2026-06-29-130058-проверь-подкоп-на-бужарово-клиенты-говорят-что-не-.md b/notes/claude/2026-06-29-130058-проверь-подкоп-на-бужарово-клиенты-говорят-что-не-.md new file mode 100644 index 0000000..8e60267 --- /dev/null +++ b/notes/claude/2026-06-29-130058-проверь-подкоп-на-бужарово-клиенты-говорят-что-не-.md @@ -0,0 +1,32 @@ +--- +date: 2026-06-29 +type: claude-session +session_id: 5bd09b85-8f41-49cd-bae8-9e3bb60157ae +started: 2026-06-29T08:36:24.273Z +ended: 2026-06-29T10:00:58.724Z +messages: 7 +tools: [Bash, Edit, Read, Write] +tags: [claude, session] +--- + +# Проверь подкоп на Бужарово. Клиенты говорят что не работает. + +## Запрос + +Проверь подкоп на Бужарово. Клиенты говорят что не работает. + +## Итог (последний ответ Claude, до 500 симв.) + +Готово — теперь **все три watchdog'а** шлют алерты и в Telegram, и на email `support@dttb.ru`: + +| Watchdog | Хост | Что мониторит | Каналы | +|---|---|---|---| +| podkop-watchdog | LXC139 | обход podkop (Бужарово) | TG (Антошка) + email | +| server1c / buzharovo-watchdog | LXC139 | сервер 1С (ping+RDP) | TG (@bz_sl_bot) + email | +| antoshka-watch-self | LXC137 | сам бот Антошка | TG (Антошка) + email | + +**Как сделано (хирургически, с бэкапами):** +- В каждый скрипт добавлен email рядом с существующе + +--- +*Автосохранено из session [`5bd09b85`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/5bd09b85-8f41-49cd-bae8-9e3bb60157ae.jsonl) — 7 сообщ., тулы: Bash, Edit, Read, Write* diff --git a/notes/claude/2026-06-29-130903-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md b/notes/claude/2026-06-29-130903-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md new file mode 100644 index 0000000..54b89ee --- /dev/null +++ b/notes/claude/2026-06-29-130903-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md @@ -0,0 +1,35 @@ +--- +date: 2026-06-29 +type: claude-session +session_id: 070eabd1-e97b-42bb-a251-1a48400891dc +started: 2026-06-28T17:54:07.937Z +ended: 2026-06-29T10:09:03.481Z +messages: 29 +tools: [AskUserQuestion, Bash, Edit, Read, Write] +tags: [claude, session] +--- + +# Давай подключимся к серверу ММФБ 1C . Нужно восстановить Программу efektsever + +## Запрос + +Давай подключимся к серверу ММФБ 1C . Нужно восстановить Программу efektsever + +## Итог (последний ответ Claude, до 500 симв.) + +✅ **Готово — периметр закрыт, проверено с чистого внешнего пути (Антошка).** + +## Итог: что доступно из интернета на `195.26.30.163` + +| Порт | Статус | Что это | +|---|---|---| +| 3389 (RDP→KOMPUTER) | 🔒 **закрыт** | пользовательский ПК | +| 22, 2222 (SSH) | 🔒 **закрыт** | управление | +| 7777, 8291 (winbox) | 🔒 **закрыт** | админка роутера | +| 8006 (Proxmox) | 🔒 **закрыт** | гипервизор | +| 81 (NPM-админка) | 🔒 **закрыт** | панель прокси | +| 1723 (PPTP) | 🔒 **закрыт** | старый VPN | +| 8007 | 🔒 **закр + +--- +*Автосохранено из session [`070eabd1`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/070eabd1-e97b-42bb-a251-1a48400891dc.jsonl) — 29 сообщ., тулы: AskUserQuestion, Bash, Edit, Read, Write* diff --git a/notes/claude/2026-06-29-132301-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md b/notes/claude/2026-06-29-132301-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md new file mode 100644 index 0000000..0fc2b87 --- /dev/null +++ b/notes/claude/2026-06-29-132301-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md @@ -0,0 +1,28 @@ +--- +date: 2026-06-29 +type: claude-session +session_id: 070eabd1-e97b-42bb-a251-1a48400891dc +started: 2026-06-28T17:54:07.937Z +ended: 2026-06-29T10:23:01.057Z +messages: 31 +tools: [AskUserQuestion, Bash, Edit, Read, Write] +tags: [claude, session] +--- + +# Давай подключимся к серверу ММФБ 1C . Нужно восстановить Программу efektsever + +## Запрос + +Давай подключимся к серверу ММФБ 1C . Нужно восстановить Программу efektsever + +## Итог (последний ответ Claude, до 500 симв.) + +Записано: +- **Отчёт руководителю** — обновлён (закрытие портов отмечено как выполнено): [отчёт](projects/mmfb/reports/2026-06-29-отчёт-инцидент-атака-1с.md). +- **mikrotik.md** — полная карта периметра, что закрыто/оставлено, как вернуть, грабли (in-interface→invalid, проверять с Антошки). +- **Память** — обновлена. + +Периметр MMFB закрыт, всё администрирование — через NetBird-VPN. Лишние пробросы `disabled` (вернуть одной командой, если понадобится). На сегодня — всё. 👍 + +--- +*Автосохранено из session [`070eabd1`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/070eabd1-e97b-42bb-a251-1a48400891dc.jsonl) — 31 сообщ., тулы: AskUserQuestion, Bash, Edit, Read, Write* diff --git a/notes/claude/2026-06-29-132348-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md b/notes/claude/2026-06-29-132348-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md new file mode 100644 index 0000000..b7b0a16 --- /dev/null +++ b/notes/claude/2026-06-29-132348-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md @@ -0,0 +1,31 @@ +--- +date: 2026-06-29 +type: claude-session +session_id: 070eabd1-e97b-42bb-a251-1a48400891dc +started: 2026-06-28T17:54:07.937Z +ended: 2026-06-29T10:23:48.981Z +messages: 31 +tools: [AskUserQuestion, Bash, Edit, Read, Write] +tags: [claude, session] +--- + +# Давай подключимся к серверу ММФБ 1C . Нужно восстановить Программу efektsever + +## Запрос + +Давай подключимся к серверу ММФБ 1C . Нужно восстановить Программу efektsever + +## Итог (последний ответ Claude, до 500 симв.) + +# ОТЧЁТ ДЛЯ РУКОВОДИТЕЛЯ +### Инцидент информационной безопасности — атака на сервер 1С + +**Дата:** 29.06.2026 · **Объект:** сервер 1С (ММФБ) · **Подготовил:** Батлаев О., ИТ-сопровождение + +--- + +### 1. Что произошло +С **25 по 28 июня** сервер 1С подвергался атаке из интернета — автоматический подбор паролей с десятков чужих серверов. **Взлома не было, данные 1С целы.** Побочно пострадало резервное копирование: из-за защитной блокировки учётной записи администратора **резервные копии не создавались + +--- +*Автосохранено из session [`070eabd1`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/070eabd1-e97b-42bb-a251-1a48400891dc.jsonl) — 31 сообщ., тулы: AskUserQuestion, Bash, Edit, Read, Write* diff --git a/notes/claude/2026-06-29-144654-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md b/notes/claude/2026-06-29-144654-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md new file mode 100644 index 0000000..71ce749 --- /dev/null +++ b/notes/claude/2026-06-29-144654-давай-подключимся-к-серверу-ммфб-1c-нужно-восстано.md @@ -0,0 +1,29 @@ +--- +date: 2026-06-29 +type: claude-session +session_id: 070eabd1-e97b-42bb-a251-1a48400891dc +started: 2026-06-28T17:54:07.937Z +ended: 2026-06-29T11:46:54.267Z +messages: 33 +tools: [AskUserQuestion, Bash, Edit, Read, Skill, Write] +tags: [claude, session] +--- + +# Давай подключимся к серверу ММФБ 1C . Нужно восстановить Программу efektsever + +## Запрос + +Давай подключимся к серверу ММФБ 1C . Нужно восстановить Программу efektsever + +## Итог (последний ответ Claude, до 500 симв.) + +Готово — отчёт оформлен в **двух форматах**, оба в базе: + +📄 **Word:** [Отчёт-инцидент-1С-ММФБ.docx](projects/mmfb/reports/Отчёт-инцидент-1С-ММФБ.docx) — полностью оформлен (синие заголовки, цветные таблицы), редактируемый. +📕 **PDF:** [Отчёт-инцидент-1С-ММФБ.pdf](projects/mmfb/reports/Отчёт-инцидент-1С-ММФБ.pdf) — 3 стр., A4, готов к отправке/печати (проверил визуально — кириллица и вёрстка чистые). + +**Содержание** (адресован «Руководителю ММФБ — Юрию Витальевичу», от Батлаева О.): +- Шапка: Кому + +--- +*Автосохранено из session [`070eabd1`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/070eabd1-e97b-42bb-a251-1a48400891dc.jsonl) — 33 сообщ., тулы: AskUserQuestion, Bash, Edit, Read, Skill, Write* diff --git a/projects/dttb/mailcow-dttb.md b/projects/dttb/mailcow-dttb.md index cfaa50e..22f8168 100644 --- a/projects/dttb/mailcow-dttb.md +++ b/projects/dttb/mailcow-dttb.md @@ -119,6 +119,14 @@ tags: [dttb, mail] - Ручной прогон: `/root/sync-mailcow-cert.sh`. - Cert: ECDSA P-384, LE E-series; пару проверять по pubkey (`openssl rsa` на нём врёт — даёт пустой modulus). +### Dual-cert RSA+ECDSA для старых клиентов (2026-06-28) +Effector Saver 4.8 на MMFB (TLS 1.0 + только RSA-шифры) не мог отправить почту: mailcow на 587 отдавал только **ECDSA-серт + TLS≥1.2** → `SSL negotiation failed`. Добавлена RSA-совместимость, всё в `data/conf/postfix/extra.cf` (бэкап `.bak-rsa-*`): +- Self-signed RSA `data/assets/ssl/rsa-cert.pem`+`rsa-key.pem` (CN=mail.dttb.ru, 10 лет) в `smtpd_tls_cert_file/key_file`; ECDSA `cert.pem/key.pem` переведён в `smtpd_tls_eccert_file/eckey_file` → postfix отдаёт оба семейства шифров. +- `submission_smtpd_tls_mandatory_protocols = >=TLSv1` и `smtps_..._protocols = >=TLSv1` — TLS 1.0/1.1 разрешён **только** на 587/465 (порт 25 и общий — нетронуты). +- ⚠️ Cert-sync cron (04:30) трогает только ECDSA `cert.pem` — наш RSA-серт отдельный, не конфликтует; reload postfix сохраняет extra.cf. +- ⚠️ Компромисс безопасности: TLS 1.0 на портах отправки. Снять, когда Effector обновят. Revert: убрать строки из extra.cf + `docker compose restart postfix-mailcow`. +- Детали инцидента: [[../../decisions/2026-06-28-mmfb-1c-cluster-ports-exposed-bruteforce]]. + ## ⚠️ КОРНЕВОЙ ФИКС входящего спама (2026-06-27) Жалоба: письма на `support@dttb.ru` (новый ящик) падают в спам, на старые ящики — нет. **Корень:** на домашнем OpenWrt (`10.0.0.1`) у LAN-зоны было `masq=1`. Входящее `WAN:25 → DNAT → 10.0.0.107` уходило в LAN-зону и **SNAT'илось в `10.0.0.1`** → postfix/rspamd видели source = `10.0.0.1` для **ВСЕХ** внешних писем. diff --git a/projects/mmfb/lionart-1c.md b/projects/mmfb/lionart-1c.md index f566daa..bfdc1f5 100644 --- a/projects/mmfb/lionart-1c.md +++ b/projects/mmfb/lionart-1c.md @@ -27,3 +27,14 @@ VM 100 на [[proxmox-inventory|pve LionART]] — Windows Server 2022 Standard ( ### 2026-05-28: `efsaveragent` не стартовал → Account locked См. [[../../decisions/2026-05-28-mmfb-effector-saver-locked-admin|decision]]. Кратко: SCM каждую минуту ломился в `.\Администратор` с устаревшим в LSA-секретах паролем → BadPwd-счётчик дошёл до lockout-порога → служба не могла стартануть **и** Администратор оказался залочен. Решение: остановить SCM (`start= disabled`), разблокировать через ADSI `IsAccountLocked = 0`, проверить актуальный пароль через `LogonUser` API, прошить заново через `sc.exe config ... password=`, вернуть `start= auto`. Текущий пароль `Администратор` — `OL260380eg` (валиден на 2026-05-28). + +### 2026-06-28: РЕЦИДИВ оказался внешней атакой (корень) +См. [[../../decisions/2026-06-28-mmfb-1c-cluster-ports-exposed-bruteforce|decision]]. Лочило не SCM, а **распределённый интернет-brute по 1С-кластер-портам**, проброшенным с MikroTik (1540/1541/1560-1591). Фикс — whitelist сайта `frame.ru` (92.53.96.188) на роутере. Поставлен **watchdog** `antoshka-watch-effector.sh` (Антошка LXC 137, cron */10): SSH-проверка efsaveragent+lockout, self-heal, алерт TG+email. + +## Effector Saver — конфигурация (выяснено 2026-06-28) +- **Версия:** Effector Saver 4.8. Агент `efsaveragent` под `.\Администратор` (НЕ переводить на LocalSystem — сломает OneDrive-коннектор, привязан к профилю; и не нужно — корень локаута закрыт). +- **Хранилище:** **OneDrive** через Microsoft Graph API (коннектор Effector, НЕ десктоп-клиент — его на машине нет). Аккаунт **`mmfb@7ppcln.onmicrosoft.com`** / `Gow18155` (M365 tenant). OAuth-авторизация предоставлена, «Тест» = `Status: Connected`. Папка в облаке: `/Backap Server 1C Lion-ART/<задача>`. +- **Локальный staging:** `D:\<Папка>\<задача>` — **копии удаляются после выгрузки** (папки пусты). Историю задач программно не прочитать (`esdata.db` = проприетарная Absolute Database, не SQLite). +- **Задачи (6, расписание ежедн. 1:00–6:00):** `BP-MMFB-3` 1:00, `BP-SP-3` 2:00, `LION-UT-NEW` 3:00, `ZUP-MMFB` 4:00, `ZUP-SP` 5:00, `Files1C` 6:00. +- **Мониторинг свежести бэкапа:** файловый с коробки невозможен (копии удаляются). Правильно — **штатные email-уведомления Effector** → `support@dttb.ru` (per-task успех/ошибка, ловит сбой выгрузки). SMTP в `efsaver.ini` пуст — настраивается в GUI (Сервис → настройки). Watchdog ловит только службу/lockout, НЕ результат выгрузки и НЕ протухание OAuth-токена. +- **Риск:** OneDrive = облако MS (US): геоблок RU может тихо ронять выгрузку; против курса ухода от US-big-tech. Альтернатива — Effector → Nextcloud WebDAV (dttb.ru). diff --git a/projects/mmfb/mikrotik.md b/projects/mmfb/mikrotik.md index dd45b43..4e7ef36 100644 --- a/projects/mmfb/mikrotik.md +++ b/projects/mmfb/mikrotik.md @@ -20,3 +20,20 @@ tags: [mmfb, lionart, network] ## WireGuard Активных туннелей нет. 2026-04-20 поднимался временный `wg-niikn` (NSPD bypass для НИИКН) — откачено вечером того же дня из-за замедления общего трафика на стороне НИИКН. Описание схемы, ключи и причины отката — [decisions/2026-04-20-niikn-nspd-bypass-via-lionart.md](../../decisions/2026-04-20-niikn-nspd-bypass-via-lionart.md). + +## Локдаун периметра (2026-06-29, инцидент с атакой на 1С) +После brute-force на 1С-порты ([decisions/2026-06-28-mmfb-1c-cluster-ports-exposed-bruteforce](../../decisions/2026-06-28-mmfb-1c-cluster-ports-exposed-bruteforce.md)) закрыт весь лишний доступ из интернета. Всё помечено `incident-20260629`, `disabled` (обратимо одной командой). + +**Что было выставлено наружу (`195.26.30.163`) и хост:** +- `.10` `KOMPUTER` (Gigabyte ПК) — 3389 RDP; `.240` 1С — 1540/1541/1560-1591; `.25` `NPM` — 80/443/**81**(админка); `.40` `agentdvr` — **1723 PPTP**; `.49` `WG` — 22/**40235udp**(WireGuard); `.205` `ovpn` — 2222/**1174udp**(OpenVPN); `.200` Proxmox — 8006; `.245` — 8007. + +**Закрыто (NAT dstnat `disabled`):** 3389, 22→.49, 2222→.205, 8006, **81 (было ДВА правила-дубля — гасить `disable [find chain=dstnat dst-port=81]`)**, 1723, 8007. +**Оставлено:** 80/443 (сайты NPM), 40235udp (WG), 1174udp (OpenVPN), 1С-порты (за forward-whitelist только frame.ru `92.53.96.188`). + +**Сам роутер закрыт от WAN:** +- `/ip service` ssh(22)/winbox(7777)/www(80) → `address=10.253.1.0/24,100.70.0.0/16` (только LAN+NetBird). +- input drop winbox: `chain=input drop protocol=tcp dst-address=195.26.30.163 dst-port=7777,8291`. +- ⚠️ **Грабля:** filter-правила по `in-interface=ether1-gw-telekom` (без порта) молча становятся **`invalid`** на этом роутере. Рабочий матч — по **`dst-address=<публичный IP>`** + порт (как NAT-правила). +- Проверять закрытие **с чистого внешнего хоста** (Антошка `pct exec 137`), НЕ с Mac — Mac через NetBird/split-DNS даёт ложные «открыто» (ходит на домашний NPM). + +Управление всем (роутер/Proxmox/ПК/серверы MMFB) теперь — **только через NetBird-VPN**. diff --git a/projects/mmfb/reports/2026-06-29-отчёт-инцидент-атака-1с.md b/projects/mmfb/reports/2026-06-29-отчёт-инцидент-атака-1с.md new file mode 100644 index 0000000..1c7224d --- /dev/null +++ b/projects/mmfb/reports/2026-06-29-отчёт-инцидент-атака-1с.md @@ -0,0 +1,167 @@ +--- +title: Отчёт об инциденте ИБ — атака на сервер 1С (LionART) +date: 2026-06-29 +recipient: Юрий Витальевич (руководитель ММФБ) +author: Батлаев О., ИТ-сопровождение +tags: [mmfb, lionart, security, incident, report] +--- + +# ОТЧЁТ ОБ ИНЦИДЕНТЕ ИНФОРМАЦИОННОЙ БЕЗОПАСНОСТИ + +| | | +|---|---| +| **Кому** | Руководителю ММФБ — Юрию Витальевичу | +| **От кого** | Батлаев О., ИТ-сопровождение | +| **Дата** | 29 июня 2026 г. | +| **Объект** | Сервер 1С (LionART, Windows Server 2022) | +| **Тип события** | Атака из интернета (подбор паролей) → отказ резервного копирования | + +--- + +## 1. Кратко (главное) + +С **25 по 28 июня** сервер 1С подвергался непрерывной автоматизированной атаке из интернета — **подбору паролей** к учётной записи администратора с множества серверов по всему миру. + +- ✅ **Взлома не произошло.** Несанкционированного доступа не было, данные 1С не скомпрометированы. +- ⚠️ **Побочный ущерб:** из-за защитной блокировки учётной записи перестала работать служба резервного копирования — **копии не создавались 3 дня (25–28 июня)**. Более ранние резервные копии сохранены. +- ✅ **Угроза устранена 28 июня.** Атака заблокирована, резервное копирование восстановлено, настроены круглосуточный мониторинг и оповещения. + +На текущий момент сервер работает штатно, угроза нейтрализована, ведётся автоматический контроль. + +--- + +## 2. Что произошло + +У сервера 1С есть служебные сетевые «двери» (порты) платформы «1С:Предприятие»: +- **1540** — агент сервера 1С (ragent); +- **1541** — менеджер кластера 1С (rmngr); +- **1560–1591** — рабочие процессы 1С. + +1. На пограничном маршрутизаторе эти порты были **открыты в интернет** — исторически, для обмена данными с сайтом frame.ru. +2. Эту открытость обнаружили злоумышленники. С **десятков арендованных серверов** (хостинги в Болгарии, России и др.) шёл массовый перебор паролей к учётной записи `Администратор`. +3. Защита Windows при 10 неверных попытках **блокирует учётную запись** на 10 минут. Атака добивала этот порог **каждые ~10 минут круглосуточно**. +4. Под этой же учётной записью работает служба резервного копирования **Effector Saver**. Пока запись заблокирована — служба не стартует. Итог: **резервные копии не выполнялись с 25 по 28 июня**. + +### Почему именно сейчас (триггер) +По журналам сервера: утром 25.06 бэкапы ещё проходили; к **15:12 25.06** учётная запись уже была заблокирована — ровно в момент **перезапуска сервера 1С** (Event 7036, «1C:Enterprise 8.3 Server Agent» → «работает», 15:13). На сервере две версии платформы (`8.3.27.1936` → работает `8.3.27.2214`) — **обновление 1С 24–25 июня подтверждается**. + +Вывод: обновление/перезапуск 1С стало **спусковым крючком** — после перезапуска открытые наружу порты кластера снова «ожили», и боты нашли их за часы. **Само обновление не виновато** — оно лишь активировало давно существовавшую уязвимость (открытые в интернет порты 1С). + +--- + +## 3. Был ли взлом? Оценка ущерба + +**Признаков взлома НЕ обнаружено** (проверено по журналам безопасности Windows): + +- **0 успешных входов** со стороны атакующих за 48 часов. Парадоксально, но автоматическая блокировка учётной записи **защитила** сервер — не дала подобрать пароль. +- Посторонних учётных записей, программ-закладок, подозрительных служб — **не найдено**. +- Данные 1С и резервные копии — **не затронуты**. + +**Единственный реальный ущерб** — отсутствие свежих резервных копий за 25–28 июня (3 дня). + +--- + +## 4. Первопричина + +Служебные порты сервера 1С были напрямую доступны из интернета. Это создавало сразу два риска: подбор паролей (что и реализовалось) и потенциальное удалённое исполнение кода (порты кластера 1С — известная цель атак). + +--- + +## 5. Принятые меры (28 июня) + +1. **Атака заблокирована на маршрутизаторе.** Доступ к портам 1С оставлен **только для сервера сайта frame.ru**; весь остальной интернет к этим портам — запрещён. +2. **Восстановлены учётная запись и резервное копирование.** Запись разблокирована, служба запущена, копирование возобновлено. +3. **Настроен автоматический «сторож».** Независимый сервер каждые 10 минут проверяет резервное копирование и состояние учётной записи; при сбое — сам восстанавливает работу и присылает оповещение в Telegram и на корпоративную почту. +4. **Подключены отчёты о бэкапах.** Ежедневная сводка о выполнении резервного копирования отправляется на корпоративную почту `support@dttb.ru`. + +--- + +## 6. Текущий статус + +- Сервер 1С работает штатно, резервное копирование возобновлено. +- Атака продолжается из интернета, но **полностью блокируется** на маршрутизаторе (см. приложение — отбито свыше 342 000 вредоносных пакетов). +- Число блокировок учётной записи снизилось с **6–7 в час до практически нуля**. +- Мониторинг и оповещения работают круглосуточно. + +--- + +## 7. Закрытие портов — ВЫПОЛНЕНО (29 июня) + +После аудита маршрутизатора **закрыт весь лишний доступ из интернета** (проверено с внешнего хоста): + +| Закрыто 🔒 | Было открыто на | +|---|---| +| RDP **3389** | пользовательский ПК «KOMPUTER» | +| SSH **22, 2222** | служебные хосты | +| Админка роутера **winbox 7777 / 8291** | MikroTik | +| Панель **Proxmox 8006** | гипервизор | +| Админка **NPM 81** | прокси | +| **PPTP 1723**, **8007** | прочее | + +Управление роутером (SSH/winbox/web) дополнительно ограничено: принимается **только из локальной сети и VPN**. Сайты (80/443) и защищённые VPN-каналы — работают. Итог: **всё администрирование — только через VPN, прямого доступа из интернета нет.** + +Рекомендация на будущее: + +🔴 **Порты 1С — 1540, 1541, 1560–1591** (сервер 1С `10.253.1.240`) сейчас прикрыты «белым списком» (только сайт frame.ru). Финально — убрать из интернета совсем, обмен с сайтом перевести на защищённый канал. + +🟠 **Тот же класс риска — тоже закрыть/ограничить** (выявлено на маршрутизаторе): +- **3389 (удалённый рабочий стол RDP)** → ПК `10.253.1.10` — частая цель атак; +- **8006 (панель Proxmox)** → `10.253.1.200`, **81 (админка сетевого шлюза)** → `10.253.1.25` — административные интерфейсы; +- **22 / 2222 (SSH)** → `.49`/`.205`, **1723 (устаревший VPN PPTP)** → `.40` — пересмотреть необходимость. + +✅ **Принцип:** доступ ко всем служебным/административным интерфейсам — **только через защищённый VPN** (NetBird), не напрямую из интернета. Наружу оставить лишь то, что действительно должно быть публичным (сайты — 80/443). + +**Организационно:** +- Рассмотреть перенос резервных копий с внешнего облака (Microsoft OneDrive) на собственное хранилище компании. +- Усиление и регулярная смена пароля администратора. + +--- + +*Подготовил: Батлаев О., ИТ-сопровождение. 29.06.2026.* + +--- +--- + +# ПРИЛОЖЕНИЕ. Технические доказательства + +### A. Источники атаки (выборка, по данным whois) + +| IP-адрес / сеть | Принадлежность | +|---|---| +| 94.26.88.0/24, 94.26.68.0/24 | Razinet Dedicated Servers, **Болгария** (арендованные серверы) | +| 185.56.162.72 | Hosting-VDS, РФ | +| 217.74.38.154 | DataFort LLC, РФ | +| 38.253.156.213 | Cogent (магистральный провайдер) | +| 154.57.197.99 | анонимный хостинг (ARIN) | +| 95.68.225.46, 185.46.47.157, 212.23.222.71 | хостинг-провайдеры РФ/ЕС | + +**Вывод:** трафик шёл с десятков арендованных серверов (хостинг/VDS), а не от реального пользователя — характерная картина автоматизированного перебора. Подбирались типовые служебные имена: `Administrator`, `1C`, `ADM1C`, `USER`, `SUPERUSER`, `88888888` и т. п. + +### B. Объём заблокированной атаки (счётчики маршрутизатора, ~9 часов после блокировки) + +| Правило защиты | Отбито пакетов | +|---|---| +| Блокировка болгарских сетей | **302 723** | +| Запрет прочих источников к портам 1С | **39 315** | +| **Итого** | **≈ 342 000 вредоносных пакетов** | + +### C. Хронология блокировок учётной записи `Администратор` (журнал безопасности, событие 4740) + +| Время | Блокировок | +|---|---| +| 28.06, 16:00–21:00 | по **6–7 в час** (атака активна) | +| 28.06, 22:00 | 2 (момент применения защиты) | +| 29.06, 07:00 | 1 (единичная остаточная) | + +Контраст «до/после» наглядно показывает эффект защиты. + +### D. Индикатор взлома (событие 4624 — успешные входы со стороны атаки) + +**0 за 48 часов.** Несанкционированного доступа не было. + +### E. Подтверждение простоя резервного копирования + +Журнал задач Effector Saver: последний успешный прогон всех 6 задач — **25.06.2026**, следующий — после восстановления службы 28.06. + +--- +*Доказательная база сформирована из журналов безопасности Windows (события 4625/4740/4624), таблицы соединений и счётчиков пограничного маршрутизатора, данных whois и журнала задач Effector Saver. Детальные выгрузки доступны по запросу.* diff --git a/projects/mmfb/reports/Отчёт-инцидент-1С-ММФБ.docx b/projects/mmfb/reports/Отчёт-инцидент-1С-ММФБ.docx new file mode 100644 index 0000000000000000000000000000000000000000..3144284e4716c37e89571117fc889f94ed0377df GIT binary patch literal 14029 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 literal 0 HcmV?d00001 diff --git a/projects/mmfb/reports/Отчёт-инцидент-1С-ММФБ.pdf b/projects/mmfb/reports/Отчёт-инцидент-1С-ММФБ.pdf new file mode 100644 index 0000000000000000000000000000000000000000..20da4c93802e9031d90e3ca049311ea67a002788 GIT binary patch literal 45189 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%0DwXM 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 R*x0xLTyPW=V)Ei}{|iwW{zw1- literal 0 HcmV?d00001