Аудит перед запуском в прод. Найдены и исправлены critical и medium issues:
Critical (fixed):
- File permissions 644 → 600/640 для id_ed25519, БД, config.yaml
- Нет logrotate (диск 2GB зальётся) → /etc/logrotate.d/rustdesk
- Нет авто-бэкапа → daily cron 03:00 в /root/rustdesk-backups/
Medium (fixed):
- Brute-force на /api/admin/login → NPM rate-limit 5r/m
Medium (deferred):
- NC share без пароля (NC сейчас down — отдельный task)
- Security headers не наследуются в location / (NPM template limitation)
Документация:
- decisions/2026-04-30-rustdesk-pre-prod-audit.md — полный отчёт
- projects/dttb/rustdesk-runbook.md — операционный runbook (recovery,
troubleshooting, onboarding, updates)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
NPM stack пересоздан с публикацией портов 21115-21119. Compose-файл теперь
лежит на host /data/compose/2/docker-compose.yml (Portainer хранил только
в своём volume — теперь синхронизированы). Custom stream.conf с TLS
termination для 21118/21119 в /data/compose/2/data/nginx/custom/.
wss://remot.dttb.ru:21118/ws/id и /ws/relay отвечают 101 Switching Protocols.
WebClient доходит до hbbr с relay request, но peer должен быть online +
залогинен в API чтобы соединение установилось.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
При попытке завести web-client (wss://remot.dttb.ru:21118) выяснилось что
docker port для NPM публикует только 80/81/443. Streams 21115-21119
работают только внутри docker-сети — desktop-клиенты ходят на 10.0.0.244
напрямую через LAN/NetBird. Web-client требует rebuild NPM compose с ports.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Админка lejianwen-api 2.7 при клике на peer открывает /webclient2/#/<id>,
но api отдаёт Flutter WebClient на /webclient/. Без rewrite получаем 404.
Добавлен return 301 в advanced_config NPM Proxy Host 14 — hash остаётся
в браузере, peer-id корректно подхватывается Flutter-app.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>