Алекс-защитник: сторож сети против WAN-SSH/спам-атак
- alex-security.sh (аудит Cudy под вектор инцидента 2026-05-20) - alex-secwatch.sh + cron */15 -> алерт Олегу в TG при угрозе - on-demand "нас не ломают?" проверено; всё чисто, ~150 брутов отбито Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
328
notes/claude/2026-05-31-210941-session.md
Normal file
328
notes/claude/2026-05-31-210941-session.md
Normal file
@@ -0,0 +1,328 @@
|
|||||||
|
---
|
||||||
|
date: 2026-05-31
|
||||||
|
type: claude-session
|
||||||
|
session_id: 83491ec7-16d3-47aa-9bcc-655c342ad2a2
|
||||||
|
started: 2026-05-30T08:49:37.558Z
|
||||||
|
ended: 2026-05-31T18:09:41.686Z
|
||||||
|
messages: 44
|
||||||
|
tools: [AskUserQuestion, Bash, Edit, Read, TaskCreate, TaskUpdate, ToolSearch, Write, mcp__ccd_session__mark_chapter]
|
||||||
|
tags: [claude, session]
|
||||||
|
---
|
||||||
|
|
||||||
|
# ---
|
||||||
|
|
||||||
|
## Запрос
|
||||||
|
|
||||||
|
---
|
||||||
|
date: 2026-05-30
|
||||||
|
type: project-spec
|
||||||
|
tags: [product, ai-assistant, pilot, openclaw, alexandr, business]
|
||||||
|
status: draft
|
||||||
|
---
|
||||||
|
|
||||||
|
# AI-ассистент в коробке — пилот для Александра
|
||||||
|
|
||||||
|
> **Это первая страница нового продукта Олега.** Цель — собрать автономного AI-консьержа на маленьком ПК, продать Александру (КП Бенелюкс) как пилот. Если зайдёт — переезжает к клиенту физически, дальше масштабирование на других клиентов.
|
||||||
|
|
||||||
|
Этот файл — **промт для следующей Claude-сессии**, которая будет строить систему. Открываешь новый чат и вставляешь всё ниже целиком.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📋 Промт для копирования в новую сессию
|
||||||
|
|
||||||
|
```
|
||||||
|
Я разрабатываю коммерческий AI-консьерж-продукт. Маленький ПК с предустановленным
|
||||||
|
ассистентом, который покупает домохозяйство и ставит в свою сеть. Сегодня пилот
|
||||||
|
для одного конкретного клиента — Александра Григорьева (КП Бенелюкс, Истра).
|
||||||
|
|
||||||
|
═══════════════════════════════════════════════════════════════════════════════
|
||||||
|
КОНТЕКСТ — кто я и что у меня уже есть
|
||||||
|
|
||||||
|
Я Олег Батлаев, DevOps. У меня уже работает похожая система для себя — Антошка
|
||||||
|
(openclaw в LXC 137 на моём Proxmox). Она использует OmniRoute (бесплатный
|
||||||
|
ProxyDispatcher к Sonnet 4.5/Opus/GPT-5.4), есть Telegram-бот, есть Nextcloud
|
||||||
|
Talk-бот, есть RAG над моим Obsidian-vault. Это базовая референс-архитектура.
|
||||||
|
|
||||||
|
Я обслуживаю Александра как сетевого админа уже несколько недель. Знаю всю его
|
||||||
|
инфру наизусть — описано в моём vault (см. ссылки ниже). Хочу выделить из этой
|
||||||
|
работы продукт.
|
||||||
|
|
||||||
|
═══════════════════════════════════════════════════════════════════════════════
|
||||||
|
ЦЕЛЬ ПРОЕКТА
|
||||||
|
|
||||||
|
Собрать на маленьком ПК (Proxmox VE 9.1, ZOTAC H61 / i3-2100 / 15 GB RAM /
|
||||||
|
SSD 112 GB + HDD 1.8 TB, IP 10.0.0.147 пока у меня) автономный AI-ассистент,
|
||||||
|
который умеет:
|
||||||
|
|
||||||
|
1. Помогать Александру с типичными бытовыми IT-проблемами его сети
|
||||||
|
(«не работает Telegram», «принтер не печатает», «почта не отправляется»)
|
||||||
|
2. Сам диагностировать (read-only тулы) и предлагать решения
|
||||||
|
3. Выполнять починку (write-action тулы) только после подтверждения клиента
|
||||||
|
4. Работать с его документами и почтой через RAG
|
||||||
|
5. Общаться через 3 интерфейса с единой памятью: Web / Telegram / Nextcloud Talk
|
||||||
|
6. Постепенно обучаться (расширяемая RAG-база, не fine-tuning)
|
||||||
|
|
||||||
|
Бизнес: пилот → если Александр покупает, ПК физически переезжает к нему домой,
|
||||||
|
переходит в его LAN. Дальше масштабирую на других клиентов.
|
||||||
|
|
||||||
|
═══════════════════════════════════════════════════════════════════════════════
|
||||||
|
АРХИТЕКТУРА (принципы)
|
||||||
|
|
||||||
|
✅ ПОЛНАЯ АВТОНОМНОСТЬ от моей dttb-инфры. Бот не должен зависеть от:
|
||||||
|
- моего openclaw / claude-memory
|
||||||
|
- моего vault / Gitea
|
||||||
|
- моего code-server / openclaw-NetBird
|
||||||
|
- моего OmniRoute (его instance может крутиться где угодно — отдельно)
|
||||||
|
После переезда ПК к клиенту — никаких связей со мной не остаётся, кроме
|
||||||
|
возможности удалённой поддержки.
|
||||||
|
|
||||||
|
✅ ОТДЕЛЬНЫЙ vault — новый git-репозиторий `alexandr-knowledge-base`. Туда
|
||||||
|
копируется ТОЛЬКО инфра Александра (из моего vault projects/benilux/,
|
||||||
|
snippets/clients/alexandr-*, claude-memory/benelux*.md, плюс универсальные
|
||||||
|
snippets). Данные других моих клиентов (НИИКН, ММФБ, Знаменское, Главторг)
|
||||||
|
НЕ копируются ни в каком виде — это утечка их данных третьему лицу.
|
||||||
|
|
||||||
|
✅ ВНЕШНИЙ ДОСТУП через мой VPS на Spaceweb с белым IP. Я куплю домен (имя
|
||||||
|
уточню позже). От бота до VPS — обратный туннель (рекомендую Cloudflare
|
||||||
|
Tunnel — бесплатно, SSL автоматом, не требует port-forward на роутере
|
||||||
|
клиента; альтернатива — FRP или WireGuard). На VPS — Nginx Proxy Manager
|
||||||
|
или Caddy с Let's Encrypt → проксирует на бота через туннель.
|
||||||
|
|
||||||
|
✅ ОДИН ПОЛЬЗОВАТЕЛЬ (Александр). Многопользовательский режим для семьи —
|
||||||
|
возможный апгрейд в будущем, но не сейчас.
|
||||||
|
|
||||||
|
✅ ГИБРИДНЫЕ TOOLS:
|
||||||
|
- read-only (ping, lpstat, awg show, curl, RAG search) — всегда без
|
||||||
|
подтверждения
|
||||||
|
- write-action (restart_podkop, flush_dns_on_mac, change_uci_setting) —
|
||||||
|
ВСЕГДА требуют клик кнопки «Да, разрешаю» в TG/Web inline keyboard
|
||||||
|
- все действия логируются → отдельный audit-log канал в TG для меня
|
||||||
|
|
||||||
|
═══════════════════════════════════════════════════════════════════════════════
|
||||||
|
СТЕК ТЕХНОЛОГИЙ (предложение)
|
||||||
|
|
||||||
|
Слой | Технология | Где живёт
|
||||||
|
──────────────────┼─────────────────────────────────────┼──────────────────────
|
||||||
|
Гипервизор | Proxmox VE 9.1.0 | host (уже стоит)
|
||||||
|
NAS-OS | ZimaOS в VM 100 (8 GB / 128 GB) | KVM (запущена сегодня)
|
||||||
|
Reverse proxy | NPM в LXC 101 (10.0.0.207) | LXC (уже работает)
|
||||||
|
Контейнер бота | LXC (Debian, ~4 GB RAM) | новый LXC 102
|
||||||
|
LLM роутер | OmniRoute (форк или свой instance) | LXC 102
|
||||||
|
Conversation DB | PostgreSQL | LXC 102 в Docker
|
||||||
|
RAG / vector DB | Qdrant или pgvector | LXC 102 в Docker
|
||||||
|
Embeddings | через API (OpenAI text-embedding или |
|
||||||
|
| Voyage AI или Sonnet с описанием) | внешние
|
||||||
|
Email клиент | MCP-imap server | LXC 102 в Docker
|
||||||
|
Web UI | Open WebUI или собственный простой | LXC 102
|
||||||
|
Telegram bot | python-telegram-bot или Telethon | LXC 102
|
||||||
|
Nextcloud Talk | Nextcloud в Docker внутри ZimaOS | VM 100 (Zima)
|
||||||
|
| + Talk-плагин + nextcloud-talk-bot |
|
||||||
|
| (или повторить мой Антошка-Talk |
|
||||||
|
| через long-poll скрипт) |
|
||||||
|
Туннель | Cloudflare Tunnel (рекомендую) | LXC 102 → CF edge
|
||||||
|
DNS | Cloudflare (бесплатно) | для домена клиента
|
||||||
|
Secrets | sops + age, либо HashiCorp Vault | LXC 102
|
||||||
|
|
||||||
|
═══════════════════════════════════════════════════════════════════════════════
|
||||||
|
ИНТЕРФЕЙСЫ И ЕДИНОЕ СОСТОЯНИЕ
|
||||||
|
|
||||||
|
3 канала входа — Web / Telegram / Nextcloud Talk — должны делить:
|
||||||
|
- Conversation history (Postgres)
|
||||||
|
- RAG-память (Qdrant/pgvector)
|
||||||
|
- Audit log (отдельная таблица в Postgres)
|
||||||
|
|
||||||
|
То есть Александр пишет в TG: «Принтер не печатает». Потом утром идёт в Web →
|
||||||
|
видит ту же беседу с продолжением. В Nextcloud Talk пишет вечером — тот же
|
||||||
|
контекст.
|
||||||
|
|
||||||
|
═══════════════════════════════════════════════════════════════════════════════
|
||||||
|
ЗНАНИЯ И ОБУЧЕНИЕ
|
||||||
|
|
||||||
|
Старт-импорт в RAG из моего vault (передам файлы через scp или git-clone):
|
||||||
|
- projects/benilux/README.md
|
||||||
|
- projects/benilux/credentials.md (только данные Александра, не моих)
|
||||||
|
- snippets/clients/alexandr-benelux-amnezia-reinstall.md
|
||||||
|
- snippets/clients/alexandr-benelux-power-recovery.md
|
||||||
|
- claude-memory/benelux.md
|
||||||
|
- claude-memory/benelux-topology.md
|
||||||
|
- decisions/2026-05-20-benelux-compromise.md (история инцидента — учит «бот
|
||||||
|
всегда сначала диагностирует, потом действует»)
|
||||||
|
- decisions/2026-05-20-amneziavpn-macos-v1-v2-incompat.md
|
||||||
|
|
||||||
|
Также добавить универсальные знания (без привязки к Александру):
|
||||||
|
- как закрыть приложение из памяти на iOS/Android/macOS
|
||||||
|
- как сделать DNS-flush на Mac
|
||||||
|
- как проверить включён ли Private Relay
|
||||||
|
- как разбудить HP-принтер из deep sleep
|
||||||
|
- типичные коды ошибок AmneziaVPN
|
||||||
|
|
||||||
|
Self-update memory: после каждой решённой проблемы бот спрашивает Александра
|
||||||
|
«Это помогло?». Если да — записывает в RAG как новое решение. Через месяц у
|
||||||
|
бота своя локальная база типичных кейсов Александра.
|
||||||
|
|
||||||
|
═══════════════════════════════════════════════════════════════════════════════
|
||||||
|
PERSONA (стиль общения)
|
||||||
|
|
||||||
|
- Имя бота — Олег решит (поле для заполнения, например «Помощник Бенелюкса»)
|
||||||
|
- Тон: спокойный, дружелюбный, на «ты», без жаргона
|
||||||
|
- НЕ использовать: «критическая ошибка», «сбой», «недоступен», «провал»
|
||||||
|
- Использовать: «немного не работает», «давай посмотрим», «починим за минуту»
|
||||||
|
- Если Александр злится — извиниться, обещать разобраться, не оправдываться
|
||||||
|
- Перед действием объяснять простыми словами что будет делать
|
||||||
|
- После действия описывать результат человеческим языком
|
||||||
|
|
||||||
|
═══════════════════════════════════════════════════════════════════════════════
|
||||||
|
ДОСТУП БОТА К СЕТИ АЛЕКСАНДРА (для диагностики)
|
||||||
|
|
||||||
|
Сейчас на пилоте — бот живёт в моей LAN dttb (10.0.0.147), к сети Александра
|
||||||
|
(192.168.1.0/24 за роутером Cudy в Бенелюксе) подключается через NetBird.
|
||||||
|
Cudy уже в моём NetBird (openwrt-benilux 100.70.207.97). Выдам боту отдельный
|
||||||
|
NetBird-setup-key с доступом только в группу Бенелюкса.
|
||||||
|
|
||||||
|
После переезда ПК к клиенту — бот в его LAN напрямую, прямой доступ к
|
||||||
|
Cudy/Cloud Key/принтеру/устройствам семьи без NetBird-overhead.
|
||||||
|
|
||||||
|
SSH-ключи к устройствам Александра:
|
||||||
|
- Cudy роутер: ssh-ключ Олежиного Mac уже добавлен; добавим ключ бота
|
||||||
|
- Cloud Key Gen2+ (192.168.1.199): только по ключу, ключ Александра не у меня
|
||||||
|
— попросим Александра добавить наш ключ через UniFi OS Console
|
||||||
|
- Mac Александра (aleksandrgrigorev): добавим публичный ключ бота
|
||||||
|
- Принтер HP M775 (192.168.1.148): через CUPS, не SSH
|
||||||
|
|
||||||
|
═══════════════════════════════════════════════════════════════════════════════
|
||||||
|
ЭТАПЫ РЕАЛИЗАЦИИ (предложение)
|
||||||
|
|
||||||
|
Этап 1: Базовая инфра (без интернета извне)
|
||||||
|
─ LXC 102 «assistant» на pve-147 (Debian, 4 GB RAM)
|
||||||
|
─ Docker внутри LXC
|
||||||
|
─ Postgres + Qdrant в Docker
|
||||||
|
─ Каркас бота (openclaw-форк, OmniRoute с моими токенами)
|
||||||
|
─ Telegram-bot создан через @BotFather (handle и токен — Олег предоставит)
|
||||||
|
─ Простейший Web UI (Open WebUI)
|
||||||
|
─ Тест: «привет, как дела?» в TG → ответ из Sonnet через OmniRoute
|
||||||
|
|
||||||
|
Этап 2: Tools (read-only)
|
||||||
|
─ ping_host, check_router_health, check_printer, check_dns
|
||||||
|
─ NetBird-setup на боте (доступ в Бенелюкс)
|
||||||
|
─ SSH-ключ бота добавлен на Cudy, Mac Александра
|
||||||
|
─ Тест: «проверь работает ли подкоп» → бот делает awg show на Cudy
|
||||||
|
|
||||||
|
Этап 3: RAG и знания
|
||||||
|
─ Импорт vault Александра в Qdrant
|
||||||
|
─ MCP-инструменты для бота: search_knowledge, recall_history
|
||||||
|
─ Тест: «как починить TG если не открывается» → бот выдаёт инструкцию из RAG
|
||||||
|
|
||||||
|
Этап 4: Tools (write-action с подтверждением)
|
||||||
|
─ Inline keyboard в TG: «Да, разрешаю» / «Нет»
|
||||||
|
─ restart_podkop, flush_dns_on_mac, restart_printer_queue
|
||||||
|
─ Audit log в отдельный TG-канал для Олега
|
||||||
|
─ Тест: «принтер не печатает» → бот предлагает действие → клик → перезапуск
|
||||||
|
|
||||||
|
Этап 5: Внешний доступ
|
||||||
|
─ Куплен домен (Олег)
|
||||||
|
─ Cloudflare Tunnel настроен (LXC 102 → CF edge → домен)
|
||||||
|
─ Web UI доступен снаружи по HTTPS через домен
|
||||||
|
─ Telegram-bot работает (он и так через TG-API, без туннеля)
|
||||||
|
|
||||||
|
Этап 6: Nextcloud Talk и почта
|
||||||
|
─ Nextcloud в Docker на ZimaOS-NAS
|
||||||
|
─ Talk бот через long-poll (по образцу моего nextcloud-talk-bot для Антошки)
|
||||||
|
─ MCP-imap: подключение к почте Александра (IMAP-сервер уточню)
|
||||||
|
─ RAG-индексация писем и документов из NAS-share
|
||||||
|
|
||||||
|
Этап 7: Документы
|
||||||
|
─ ZimaOS-NAS share по SMB
|
||||||
|
─ Бот видит файлы через MCP-filesystem
|
||||||
|
─ Индексация в RAG
|
||||||
|
|
||||||
|
Этап 8: Обучение и калибровка
|
||||||
|
─ Олег проводит 5-10 тестовых диалогов
|
||||||
|
─ Калибровка persona (тон, длина ответов, эмодзи)
|
||||||
|
─ Тест на семейных сценариях: «помоги маме закрыть рекламу в Сафари»
|
||||||
|
|
||||||
|
Этап 9: Юридическое и передача
|
||||||
|
─ Простое соглашение на 1 страницу (Олег подготовит)
|
||||||
|
─ Демо Александру по видеосвязи
|
||||||
|
─ Если покупает — выезд к нему, физический переезд ПК
|
||||||
|
|
||||||
|
═══════════════════════════════════════════════════════════════════════════════
|
||||||
|
ОТКРЫТЫЕ ВОПРОСЫ (для уточнения у Олега в новой сессии)
|
||||||
|
|
||||||
|
1. Имя бота? (Алекс, Помощник, Лёша, Билли, что-то фирменное?)
|
||||||
|
2. Telegram-handle? Олег создаст через @BotFather и даст токен
|
||||||
|
3. Домен — какой Олег купит? (alexbot.ru, ai-helper.ru, your-helper.online?)
|
||||||
|
4. VPS Spaceweb — выделить отдельный или использовать существующий?
|
||||||
|
IP, доступ?
|
||||||
|
5. Email сервис Александра — Yandex/Gmail/Mail.ru/iCloud? IMAP-host? App-pass
|
||||||
|
или OAuth?
|
||||||
|
6. Где Александр хранит документы — Mac локально / iCloud / OneDrive? Как
|
||||||
|
ассистент к ним получит доступ?
|
||||||
|
7. Cloudflare Tunnel: использовать существующий аккаунт Олега (если есть) или
|
||||||
|
создать новый под клиента?
|
||||||
|
8. Цена пилота для Александра?
|
||||||
|
9. Топ-5 типичных сценариев которые точно должны работать к демо
|
||||||
|
(TG не открывается, принтер не печатает, что ещё?)
|
||||||
|
10. Готов ли Олег дать боту admin-уровень доступа к Cudy / Cloud Key, или
|
||||||
|
только конкретные команды через sudo-whitelist?
|
||||||
|
|
||||||
|
═══════════════════════════════════════════════════════════════════════════════
|
||||||
|
КОНТЕКСТНЫЕ ССЫЛКИ (мой vault, прочитать перед стартом)
|
||||||
|
|
||||||
|
- projects/benilux/README.md — что такое объект Бенелюкс
|
||||||
|
- projects/benilux/credentials.md — пароли (для копирования в Alex-vault)
|
||||||
|
- snippets/clients/alexandr-benelux-amnezia-reinstall.md — история инцидента
|
||||||
|
- snippets/clients/alexandr-benelux-power-recovery.md — типичные кейсы семьи
|
||||||
|
- claude-memory/benelux.md — текущее состояние Cudy
|
||||||
|
- claude-memory/benelux-topology.md — карта сети + список устройств
|
||||||
|
- decisions/2026-05-20-benelux-compromise.md — урок про безопасность
|
||||||
|
- projects/dttb/proxmox-pve-147.md — карточка целевого хоста
|
||||||
|
- claude-memory/MEMORY.md — общая память (для понимания моего стиля и инфры)
|
||||||
|
|
||||||
|
═══════════════════════════════════════════════════════════════════════════════
|
||||||
|
КОНЕЦ ПРОМТА. Действуй: задай мне 10 открытых вопросов одним сообщением,
|
||||||
|
получи ответы, начни с Этапа 1. По итогам каждого этапа — короткий статус
|
||||||
|
в чате (что сделал, что проверил, что осталось).
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Что Олег решает в чате (НЕ внутри промта)
|
||||||
|
|
||||||
|
Перед открытием новой сессии:
|
||||||
|
|
||||||
|
- [ ] Создать TG-бота через @BotFather → получить токен и handle
|
||||||
|
- [ ] Купить домен (или выбрать из существующих свободных)
|
||||||
|
- [ ] Проверить статус VPS Spaceweb (есть ли свободный с белым IP)
|
||||||
|
- [ ] Решить имя бота (или дать новой сессии выбрать варианты)
|
||||||
|
- [ ] Прикинуть цену пилота — €15/мес? €25? разово €300?
|
||||||
|
|
||||||
|
## Что в новой сессии делать НЕ нужно
|
||||||
|
|
||||||
|
- ❌ Использовать мой openclaw (LXC 137) — пилот строит свой независимый бот
|
||||||
|
- ❌ Использовать мою claude-memory или мой Anthropic-API-token
|
||||||
|
- ❌ Подключать к моему vault через rclone/git
|
||||||
|
- ❌ Использовать мой Postgres/Qdrant из dttb-инфры
|
||||||
|
- ❌ Копировать в Alex-vault инфо о других клиентах (ММФБ, НИИКН и т.п.)
|
||||||
|
|
||||||
|
## Связанные файлы в vault
|
||||||
|
|
||||||
|
- [[proxmox-pve-147]] — целевой хост
|
||||||
|
- [[../benilux/README]] — объект клиента
|
||||||
|
- [[../../snippets/clients/alexandr-benelux-amnezia-reinstall]] — история работы
|
||||||
|
- [[../../snippets/clients/alexandr-benelux-power-recovery]] — типовой плейбук
|
||||||
|
|
||||||
|
## Итог (последний ответ Claude, до 500 симв.)
|
||||||
|
|
||||||
|
Запушено, кб синхронизирована.
|
||||||
|
|
||||||
|
## ✅ Готово — Алекс получил доступ к UniFi и умеет печатать
|
||||||
|
|
||||||
|
**📶 UniFi** (Cloud Key `192.168.1.199`, 13 точек + 7 свитчей)
|
||||||
|
- «какие точки wifi по комнатам» / «не работает интернет в спальне» → Алекс **сам смотрит контроллер** (Спальня хозяйская, Гараж, Хаммам, Зал рояль, Игровая…) и пингом проверяет, на связи ли точка.
|
||||||
|
- Локальный UniFi-API залочен SSO (403) → обошёл через SSH в Cloud Key → его MongoDB.
|
||||||
|
|
||||||
|
**🖨️ Печать** (HP LaserJet M775)
|
||||||
|
- «распечатай …» → Алекс п
|
||||||
|
|
||||||
|
---
|
||||||
|
*Автосохранено из session [`83491ec7`](file:///Users/ai/.claude/projects/-Users-ai-knowledge-base/83491ec7-16d3-47aa-9bcc-655c342ad2a2.jsonl) — 44 сообщ., тулы: AskUserQuestion, Bash, Edit, Read, TaskCreate, TaskUpdate, ToolSearch, Write, mcp__ccd_session__mark_chapter*
|
||||||
@@ -119,6 +119,15 @@ status: active
|
|||||||
- Коробка достаёт принтер через **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` применён).
|
- Коробка достаёт принтер через **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).
|
- Кириллица: `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`, «🛡️ Алекс-сторож на посту»).
|
||||||
|
- On-demand в TG: «нас не ломают?» → Алекс сам зовёт проверку, объясняет спокойно. Проверено.
|
||||||
|
- Статус: всё чисто, ~150 WAN-SSH брутов отбито (nft counter растёт — защита держит вектор).
|
||||||
|
|
||||||
## NPM (reverse proxy)
|
## NPM (reverse proxy)
|
||||||
|
|
||||||
| Параметр | Значение |
|
| Параметр | Значение |
|
||||||
|
|||||||
Reference in New Issue
Block a user