Алекс Этап 4: write-действия + подтверждение + авто-лечение сети
- alex-fix.sh (restart-podkop / reboot-ap) с авто-аудитом Олегу в TG - гейт подтверждения = двухшаговое правило в SOUL.md (проверено: спрашивает) - авто-лечение в watchdog: WAN-SSH дыра -> сам закрывает + алерт (боевой тест ОК) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -102,11 +102,15 @@ status: active
|
||||
|
||||
Алекс ходит в сеть Александра: коробка → NetBird → Cudy (`100.70.207.97`) → LAN. Прямой роут в `192.168.1.0/24` нельзя (коллизия с Знаменское/НИИКН в NetBird) → всё джампом через Cudy. Обёрнуто в скрипты на коробке (`/opt/assistant/`), Алекс зовёт их через exec (`exec-policy` = yolo). Проверено в живом диалоге (TG): «какие точки wifi по комнатам» → Алекс сам зовёт `alex-unifi.sh`.
|
||||
|
||||
**Подтверждение write-действий (Этап 4):** гейт = ЖЕЛЕЗНОЕ ПРАВИЛО в `SOUL.md` (двухшаговый протокол: на «перезапусти» Алекс сначала описывает+спрашивает «да?», выполняет только после ОТДЕЛЬНОГО «да»). Проверено: первый прогон без правила — выполнил молча; после усиления SOUL — спрашивает. Бэкстоп = авто-аудит каждого write-действия Олегу. **Настоящий хард-гейт для продукта** = `openclaw exec-policy set --security allowlist --ask on-miss` (read-tools в allowlist, `alex-fix.sh` → кнопка-approval). Не делал на пилоте — риск сломать read-tools, нужен аккуратный allowlist; отложено в Этап 9.
|
||||
|
||||
| Скрипт | Что делает |
|
||||
|---|---|
|
||||
| `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).
|
||||
@@ -125,6 +129,8 @@ status: active
|
||||
|
||||
- **Аудит:** `/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 растёт — защита держит вектор).
|
||||
|
||||
|
||||
Reference in New Issue
Block a user