- CasaOS хранит пароль как чистый MD5 в /var/lib/casaos/db/user.db o_users - смена через sudo sqlite3 UPDATE (API/CLI смены нет); старый отвергнут, новый ок - alex-nas цел (SSH Linux отдельный, не менялся) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
23 KiB
date, type, tags, status
| date | type | tags | status | |||||||
|---|---|---|---|---|---|---|---|---|---|---|
| 2026-05-31 | project |
|
active |
🔐 AI-ассистент «umnybot» — инфра и креды (пилот Александра)
⚠️ КОНФИДЕНЦИАЛЬНО. Продукт «консьерж в коробке». См. PROMPT (тех-задание) и память
project_alexandr_assistant. Все секреты также лежат на коробке в/opt/assistant/.env(chmod 600).
Коробка (хост + контейнер)
| Параметр | Значение |
|---|---|
| Хост | Proxmox pve (pve-147), 10.0.0.147, root / 1qaz!QAZ |
| Контейнер | LXC 102 «assistant», Debian 12, IP 10.0.0.163 |
| root LXC 102 | j5DS1JSPKewKQw6i7mTK (уникальный; Mac-ключ ai@mac-20260112 в authorized_keys) |
| Стек | Docker (overlayfs) + Node 22; openclaw 2026.5.27; OmniRoute 3.8.7; Postgres16/pgvector |
| Доступ | sshpass -p '1qaz!QAZ' ssh root@10.0.0.147 → pct exec 102 -- bash (или ssh root@10.0.0.163 по Mac-ключу) |
OmniRoute (LLM-роутер)
| Параметр | Значение |
|---|---|
| Сервис | systemd omniroute.service, слушает 0.0.0.0:20128 |
| Дашборд | https://omni.umnybot.ru (через NPM, LE) или http://10.0.0.163:20128 |
| Пароль дашборда | A30Y7aan8dCKf9 (Settings → Security можно сменить) |
| API-ключ (для openclaw) | ork_VQo75huaEVGzhdfD4QlrL2XaxTmNKPTD |
| Конфиг/секреты | /root/.omniroute/.env (STORAGE_ENCRYPTION_KEY + СВЕЖИЕ JWT_SECRET/API_KEY_SECRET — перегенерены перед выходом наружу), storage.sqlite |
| Старт сервера | node /usr/lib/node_modules/omniroute/app/server.js (PORT=20128, HOSTNAME=0.0.0.0) |
| Провайдеры | Kiro подключён (GitHub device-flow, аккаунт kiro1@umnybot.ru) — но новый аккаунт троттлит (429 AWS CodeWhisperer). Олег добавляет 2-й провайдер через дашборд-GUI |
| Сброс пароля | omniroute-reset-password (интерактивный, нужен expect для pipe) |
openclaw (мозг + каналы)
| Параметр | Значение |
|---|---|
| Версия | 2026.5.27 (глоб. npm), конфиг /root/.openclaw/openclaw.json |
| Gateway | systemd openclaw-gateway.service (openclaw gateway run), loopback 127.0.0.1:18789 |
| Канал | Telegram @alex_umny_bot (connected, polling) |
| Дефолт-модель | пока openai/gpt-5.5 (без провайдера) → переключить на omniroute/<provider>/<model> |
| Провайдер omniroute | openclaw models auth paste-api-key (baseUrl http://127.0.0.1:20128/v1, key ork_VQo…) |
Telegram
| Параметр | Значение |
|---|---|
| Бот | @alex_umny_bot «Консьерж Бот», id 8601326674 |
| Токен | 8601326674:AAEJwbyXGEgEEiIwmfZVdYbG2SxpyMkmDiA |
| Audit chat_id | 1292155421 (Олег, @it5870) |
Postgres + pgvector
127.0.0.1:5432 (Docker assistant-postgres, pgvector/pgvector:pg16) — user assistant / c2e193fb341120471917f720a1c6eeea / db assistant. Compose: /opt/assistant/docker-compose.yml.
Домен umnybot.ru (Spaceweb)
| Параметр | Значение |
|---|---|
| Регистратор/DNS | Spaceweb, панель vps.sweb.ru, логин it5870yand / 1qaz!QAZ |
| API | POST https://api.sweb.ru/domains/dns (методы editMain/editMx/editTxt, action:add) |
| ⚠️ Проверка DNS | только через DoH (curl https://1.1.1.1/dns-query?name=...&type=...) — dig из dttb-сети режется домашним :53-перехватом (ложно-пусто). action:add РАБОТАЕТ |
| Записи | omni A→176.62.183.186; @ MX→mail.dttb.ru (10); @ TXT SPF v=spf1 ip4:176.62.183.186 ~all; dkim._domainkey (2048); _dmarc |
| Поддомены план | omni. = дашборд OmniRoute; alex. = веб ассистента Александра; <client>. на будущих |
Почта (на Mailcow dttb, VM 107)
| Параметр | Значение |
|---|---|
| Ящик ассистента | assistant@umnybot.ru / KQcZnxkB5sMNiVYo |
| Catch-all | @umnybot.ru → assistant@umnybot.ru (любой адрес, удобно под регистрацию аккаунтов) |
| Вебмейл | https://mail.dttb.ru (SOGo) |
| IMAP/SMTP | mail.dttb.ru:993 / mail.dttb.ru:587 |
| Mailcow | 10.0.0.107, admin admin/1qaz!QAZ, API dttb-mailcow-api-2026 (с 10.0.0.0/24) |
| rspamd whitelist | github.com, sgmail.github.com, sendgrid.net для umnybot.ru (новый домен резался, для приёма GitHub-кодов) |
Codex/OpenAI ящики (мульти-аккаунт, 2026-05-31)
8 ящиков на umnybot.ru, общий пароль 1BU5zqB9NxC84h: codex1@umnybot.ru … codex8@umnybot.ru (quota 512MB, real-боксы, не catch-all). Вебмейл https://mail.dttb.ru (логин любым codexN@umnybot.ru / пароль). Коды можно тянуть по IMAP mail.dttb.ru:993. ⚠️ OpenAI требует телефон при регистрации — реальный потолок числа аккаунтов.
Аккаунты провайдеров
| Сервис | Логин | Заметка |
|---|---|---|
| GitHub (для Kiro) | kiro1@umnybot.ru |
пароль задал Олег — здесь не записан, спросить у Олега. Зарегистрирован через catch-all (код пришёл в assistant@) |
| Kiro (AWS) | через GitHub-логин выше | device-flow, профиль arn:aws:codewhisperer:us-east-1:.... Новый аккаунт троттлит |
NetBird (доступ коробки к сети Александра)
| Параметр | Значение |
|---|---|
| Setup-key (Benelux) | 26C84D9A-B71B-474D-BC41-8FAC2C4C6399 (reusable, до 2027-05-31) |
| Группа | Benelux d8e5s1jl0ubs73f3g7vg (туда добавлен Cudy «OpenWrt Benilux»), политика «Benelux Access» |
| Коробка в NetBird | alex-assistant = 100.70.186.192 (userspace-режим, без TUN — работает; TUN прописан в /etc/pve/lxc/102.conf, активируется при pct reboot 102) |
| Цель | достать Cudy Александра 100.70.207.97 (ping ✅ ~62мс) → jump на Mac (aleksandrgrigorev/gav1971@)/устройства |
| Управление NetBird | api.netbird.io, токен nbp_… в projects/dttb/credentials.md |
| ⚠️ Безопасность | Default-политика NetBird = All↔All → коробка достаёт и др. сети Олега. Для продукта — Александра в ОТДЕЛЬНЫЙ NetBird (изоляция + автономность). |
Инструменты Алекса — управление устройствами Александра (2026-05-31)
Алекс ходит в сеть Александра: коробка → NetBird → Cudy (100.70.207.97) → LAN. Прямой роут в 192.168.1.0/24 нельзя (коллизия с Знаменское/НИИКН в NetBird) → всё джампом через Cudy. Обёрнуто в скрипты на коробке (/opt/assistant/), Алекс зовёт их через exec под хард-гейтом (exec-policy: security=allowlist, ask=on-miss — read-инструменты в allowlist бегут свободно, запись/новое → кнопка approval в TG, см. ниже). Проверено в живом диалоге (TG): «какие точки wifi по комнатам» → Алекс сам зовёт alex-unifi.sh.
Подтверждение write-действий (Этап 4) — ХАРД-ГЕЙТ, ПОДТВЕРЖДЁН 2026-05-31: exec-approvals.json → defaults {security:"allowlist", ask:"on-miss", askFallback:"deny"} + agents."*".allowlist[] с glob'ами read-инструментов (/opt/assistant/alex-router.sh*, alex-unifi.sh*, alex-security.sh*, alex-print.sh*). alex-fix.sh НЕ в allowlist → при попытке агента выполнить openclaw показывает Олегу в Telegram кнопки [Allow Once] [Allow Always] [Deny] (+ текст-команды /approve <id> allow-once|allow-always|deny), команда висит pending до решения. Живой тест в TG прошёл — кнопка появилась на alex-fix.sh restart-podkop. Агент физически не обойдёт. Гибкость сохранена: незнакомую команду агент не теряет — спрашивает кнопкой (Allow Once). SOUL объясняет действие до запуска (без дубля текстового «да» — кнопка сама спрашивает). Бэкстоп — авто-аудит каждого ВЫПОЛНЕННОГО write-действия Олегу. Добавить read-инструмент: openclaw approvals allowlist add "/opt/assistant/<script>*". ⚠️ НЕ жать «Allow Always» на alex-fix (запомнит → перестанет спрашивать).
| Скрипт | Что делает |
|---|---|
alex-router.sh [status|devices|printer|dns] |
Cudy: статус обхода (awg show awg0), DHCP-аренды, пинг принтера, FakeIP-DNS. read-only |
alex-unifi.sh [list|check <ip>] |
UniFi: точки/свитчи по комнатам + онлайн-проверка пингом. read-only |
alex-print.sh (текст на stdin) |
Печать на HP M775, кириллица через paps→CUPS |
alex-fix.sh [restart-podkop|reboot-ap <ip>|test] |
write-действия (перезапуск обхода / перезагрузка Wi-Fi точки). Авто-аудит Олегу в TG на каждое. reboot-ap через device-SSH ktf8b@<ip> пароль TlbbdJoVADiXGDrcpnNq3q |
alex-security.sh |
аудит безопасности сети (см. ниже «Защита сети») |
alex-nas.sh [status|find <q>|list [папка]|usage] |
Домашний NAS ZimaOS (10.0.0.190): место, поиск файлов (кириллица через python), содержимое папок. read-only, в allowlist |
UniFi (Cloud Key Gen2+ 192.168.1.199)
- Доступ: SSH через Cudy —
DROPBEAR_PASSWORD='1qaz!QAZ!QAZ' dbclient -y root@192.168.1.199(sshpass на Cudy нет; dropbeardbclientберёт пароль из env). - ⚠️ Локальный UniFi-API залочен SSO (
/api/auth/login= 403). Данные тянем из MongoDB контроллера:mongo --quiet --port 27117 ace --eval "db.device.find({},{name:1,ip:1,model:1,_id:0}).forEach(printjson)". Полеstateпустое → онлайн проверяем пингом точки с Cudy. - 13×UAP6MP по комнатам + 7 свитчей, см. benelux-topology.
Принтер (HP LaserJet M775 192.168.1.148)
- 9100/515 закрыты, открыт только IPP/631 (+AirPrint).
- Печать: CUPS на коробке (
apt: cups cups-client cups-filters paps), очередьalex=ipp://100.70.207.97:6310/ipp/print(IPP Everywhere,lpadmin -m everywhere). - Коробка достаёт принтер через DNAT на Cudy:
100.70.207.97:6310(NetBird) →192.168.1.148:631. Персистентно:/etc/nftables.d/30-alex-printer.nft(dstnat + masquerade только дляsaddr 100.70.186.192;fw4 checkОК,fw4 reloadприменён). - Кириллица:
paps --font='DejaVu Sans Mono 11'→ PostScript → CUPS. Хелпер/opt/assistant/alex-print.sh. Тест-лист напечатан (job completed).
Защита сети — Алекс-сторож (2026-05-31)
Алекс защищает сеть Александра от повторения инцидента ../../decisions/2026-05-20-benelux-compromise (WAN-SSH брут → спам-релей). Детект + алерт (превенция уже стоит: nft incident-20260520 + key-only).
- Аудит:
/opt/assistant/alex-security.sh(на коробке) →/root/.alex-seccheck.sh(на Cudy, read-only). Чек-лист под вектор инцидента: WAN-SSH закрыт (правилоincident-20260520-no-ssh-from-wan), нетAllow-SSH-WAN,PasswordAuth=off, чужие SSH-сессии (не100.70./192.168.1.), исходящий SMTP 25/465/587, посторонний cron, скрытые executable в /tmp, левые SSH-ключи (белый список:mac-20260112/claude-code@code-server/alex-assistant), LA≥3. - Сторож:
/opt/assistant/alex-secwatch.sh+ cron коробки*/15→ при FLAG алерт Олегу в TG (TELEGRAM_AUDIT_CHAT_ID=1292155421из.env), дедуп по md5 набора угроз, «отбой» когда чисто. Канал проверен (tg=200, «🛡️ Алекс-сторож на посту»). - Авто-лечение: если флаг = открытый WAN-SSH, сторож САМ возвращает nft-блок (
nft insert ... input iifname eth0 dport 22 drop) до алерта + помечает «закрыл автоматически». Проверено боевым тестом (удалил handle изincident_block_in→ сторож восстановил →count=1). Расширять авто-heal на cron/ключи НЕ стоит (риск ложного авто-удаления) — там только алерт. - ⚠️ ssh в скриптах — с
-n(или запуск из cron/файла, не pipe):sshбез-nв скрипте, поданном вbashчерез pipe, съедает остаток скрипта со stdin. - On-demand в TG: «нас не ломают?» → Алекс сам зовёт проверку, объясняет спокойно. Проверено.
- Статус: всё чисто, ~150 WAN-SSH брутов отбито (nft counter растёт — защита держит вектор).
ZimaOS NAS — интеграция с Алексом (2026-06-01)
«AI-NAS»: Алекс = интерфейс к домашнему NAS семьи.
- VM 100 «Zima» на pve-147, 10.0.0.190 (8 ГБ, autoboot). Веб
http://10.0.0.190/https://zima.umnybot.ru. Веб/API логин:admin/8FLnjg6kcpQKKKyvmW(сменён 2026-06-01, публичная панель). SSH (Linux):admin/1qaz!QAZ— ОТДЕЛЬНЫЙ, только LAN/NetBird (не публичный), его юзаетalex-nas; root SSH запрещён, у admin есть sudo. API JWTPOST /v1/users/login. SMB(445/139) + NFS(2049) + ttyd(7681). - Хранилище
/DATA(114G, ~83G свободно). HDD 1.8TB/dev/sdbещё НЕ проброшен в ZimaOS (на будущее — disk-passthrough). Папки:Documents/Gallery/Downloads/Backup(777-доступ). - Доступ Алекса: sshpass
admin@10.0.0.190(ключ не положить — home=/DATAroot-owned,.sshне создать). Инструментalex-nas.sh(в allowlist, read-only). - ⚠️ Кириллический поиск:
find -inameНЕ case-fold'ит кириллицу даже наen_US.UTF-8(иC.UTF-8не помог). Решение — список файлов с ZimaOS → фильтр черезpython3 .lower()на коробке (Unicode-aware). Вalex-nas.shтак и сделано. - Проверено в TG: «сколько места на NAS, найди договор» → Алекс отвечает.
- Домен
zima.umnybot.ru(2026-06-01): A→176.62.183.186(Spaceweb editMain add), основной NPM 10.0.0.195 proxyhost id31 →http://10.0.0.190:80, LE cert id116 (до 30 авг 2026, websocket+force-SSL). Работает публично (200), серт LE valid. ⚠️ Грабли NPM v2.14: cert-create принимает толькоmeta:{}(НЕ email/agree/dns_challenge — «additional properties»). На NPM коробки zima пока НЕ продублирован (отложено с внешним доступом). - ✅ БЕЗОПАСНОСТЬ (закрыто 2026-06-01): веб-пароль ZimaOS сменён на сильный
8FLnjg6kcpQKKKyvmW. CasaOS хранит пароль как чистый MD5 в/var/lib/casaos/db/user.dbтаблицаo_users(файл root:644 → правкаecho PASS | sudo -S sqlite3 ... "UPDATE o_users SET password='<md5>' WHERE username='admin'"). API/CLI смены пароля НЕ нашлось (Bearer-токен отвергается 401,casaos-cli userтолько list,zimaos-user -ruопасен). Проверено: старый пароль отвергнут, новый логинится. Публичная панель больше не на1qaz!QAZ. SSH (Linux) остался1qaz!QAZ— но не публичен (LAN/NetBird), для продакшна тоже сменить. - Дальше (roadmap AI-NAS): RAG по содержимому документов (parse+index в pgvector); SMB-шара для загрузки файлов семьёй с телефонов/Mac; управление приложениями ZimaOS (через API+approval); passthrough HDD 1.8TB. Тестовые сэмплы в /DATA/Documents (Договор-аренды-2026, wifi-инструкция) — удалить перед передачей.
Антошка стережёт Алекса — внешний мониторинг пилота (2026-05-31)
Антошка (openclaw LXC 137, 10.0.0.239 / NetBird 100.70.167.54, бот-токен 8020760639:AAH-Ra0nayJnFgjvSVAagAtZgSb46onBpB4) следит за коробкой Алекса, лечит и алертит Олега. Второй слой поверх Restart=on-failure самих сервисов.
- Скрипт:
/root/antoshka-watch-alex.shна LXC 137, cron*/3. - Путь лечения: LXC 137 →
sshpass -p 1qaz!QAZ ssh root@10.0.0.147(pve-147) →pct exec 102(137 умеет sshpass, достаёт pve-147 и 10.0.0.163). - Проверяет: контейнер 102
running(иначеpct start 102);openclaw-gatewayactive (иначе restart);omnirouteactive + HTTP:20128отвечает (иначе restart); диск <90% (иначе только алерт, сам не чистит). Перепроверка через 6с — не ловить штатный рестарт. - Алерт от имени Антошки Олегу (chat
1292155421), дедуп md5 + «отбой». Проверено боевым тестом:stop openclaw-gateway→ Антошка поймал, перезапустил (active), прислал алерт. - ⚠️ При передаче клиенту: Алекс автономен (самолечение
Restart=on-failure); Антошка достанет коробку уже только через NetBird (100.70.186.192) — поправить IP в скрипте на NetBird-адрес или оставить как опц. внешний контроль Олега.
NPM коробки — автономный reverse-proxy (LXC 101, настроен 2026-05-31)
Для автономности при переезде к клиенту коробка раздаёт свои домены САМА — через свой NPM (LXC 101 pve-147), не завися от основного NPM Олега.
| Параметр | Значение |
|---|---|
| NPM коробки | LXC 101 «npm» (pve-147), 10.0.0.207, порты 80/81/443. Админка http://10.0.0.207:81, логин it5870@yandex.ru / 1qaz!QAZ |
| Proxy host id1 | omni.umnybot.ru → http://10.0.0.163:20128 (OmniRoute), websocket + force-SSL |
| Cert id1 | omni.umnybot.ru — скопирован с основного NPM (LE до 2026-08-29, provider=other → коробка его НЕ авто-renew) |
| Проверка | локально curl --resolve omni.umnybot.ru:443:10.0.0.207 → серт валиден (LE trusted), проксирует в OmniRoute (307). Публично пока на основном NPM (один 443 на дом Олега) |
При переезде к клиенту (Александр):
- DNS
omni.umnybot.ru(+ др. поддомены) → публичный IP клиента (Cudy WAN, напр. 45.143.21.60). - Роутер клиента (Cudy) форвардит 443 + 80 → NPM коробки (его IP в LAN клиента).
- Пере-выпустить серт как LE-managed на NPM коробки (HTTP-01 заработает — публичные 80/443 теперь приходят на коробку) → авто-renew. Либо DNS-01.
- Cloudflare Tunnel (Этап 5, без проброса/белого IP):
cloudflaredустановлен/usr/local/bin/cloudflared. Тест 2026-05-31 из РФ-сети коробки: подключается к CF только по--protocol http2(QUIC/7844 троттлится РФ-DPI: «datagram manager failure», UDP-буфер не растёт), регистрируется на московский edgedme01. НО free quick-tunnel (trycloudflare) флапает на обслуживании —530 origin unregisteredи с коробки, и с Mac. Может быть нестабильность РФ-канала ИЛИ известная флакость trycloudflare. Продакшн named-tunnel не тестирован (нужен CF-аккаунт + umnybot.ru на CF — у CF стабильный routing, может работать где quick не смог). ⚠️ Для РФ-коробки CF Tunnel РИСКОВАН — альтернатива надёжнее: VPS reverse-tunnel (коробка→Finland VPS swtest/vps-znam→публично, исходящий из РФ стабилен, Олег владеет VPS).
Старое (убрать при передаче): основной NPM 10.0.0.195 proxyhost id30 omni→10.0.0.163:20128, cert id115 — пока обслуживает публичный omni.umnybot.ru.
Статус (2026-05-31)
Этап 1 почти закрыт. Тракт TG→openclaw→OmniRoute→Kiro-роутинг проверен (429 = достучались). Блокер: рабочая модель (новый Kiro троттлит → Олег подключает 2-й провайдер). Дальше: openclaw model=omniroute/* + fallback → тест «привет» в TG.