🔐 AI-ассистент «umnybot» — инфра и креды (пилот Александра)
⚠️КОНФИДЕНЦИАЛЬНО. Продукт «консьерж в коробке». См. PROMPT (тех-задание) и память project_alexandr_assistant.
Все секреты также лежат на коробке в /opt/assistant/.env (chmod 600).
Kiro подключён (GitHub device-flow, аккаунт kiro1@umnybot.ru) — но новый аккаунт троттлит (429 AWS CodeWhisperer). Олег добавляет 2-й провайдер через дашборд-GUI
Сброс пароля
omniroute-reset-password (интерактивный, нужен expect для pipe)
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 РАБОТАЕТ
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)
Группа
Beneluxd8e5s1jl0ubs73f3g7vg (туда добавлен 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
аудит безопасности сети (см. ниже «Защита сети»)
UniFi (Cloud Key Gen2+ 192.168.1.199)
Доступ: SSH через Cudy — DROPBEAR_PASSWORD='1qaz!QAZ!QAZ' dbclient -y root@192.168.1.199 (sshpass на Cudy нет; dropbear dbclient берёт пароль из 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.
Алекс защищает сеть Александра от повторения инцидента ../../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 растёт — защита держит вектор).
NPM (reverse proxy)
Параметр
Значение
Текущий
основной NPM 10.0.0.195 (it5870@yandex.ru/1qaz!QAZ): proxyhost id30omni.umnybot.ru→10.0.0.163:20128, cert id115 (LE до 2026-08-29), websocket-upgrade вкл
План
перенести на NPM коробки (LXC 101 pve-147, 10.0.0.207) для автономности; ограничение — публичный 443 один на дом, при передаче коробки к клиенту его роутер сразу на NPM коробки
Статус (2026-05-31)
Этап 1 почти закрыт. Тракт TG→openclaw→OmniRoute→Kiro-роутинг проверен (429 = достучались). Блокер: рабочая модель (новый Kiro троттлит → Олег подключает 2-й провайдер). Дальше: openclaw model=omniroute/* + fallback → тест «привет» в TG.