Files
MIKROTIK-RMM/docs/SISTEMA_ATUAL.md
T
GustavoandClaude Sonnet 5 5b926d637b docs: record upstream security audit (Mission 01)
- docs/AUDITORIA_BASE_2GT.md: full audit of upstream 1a4b635 (v0.24.5-beta)
  - 0 critical, 1 high (SEC-002: no per-site RBAC), 4 medium, 5 low, 5 informational
  - Verdict: APROVADO COM CORREÇÕES OBRIGATÓRIAS
  - First read-only RB: authorized (SIM)
- test: add regression coverage proving SEC-001 (no JWT revocation) and
  SEC-002 (site scoping has no per-user authorization component)
- docs/SISTEMA_ATUAL.md: record confirmed facts (RBAC scope, Change Guard
  coverage, RouterOS TLS verification) surfaced by the audit

No production code changed — audit-only per mission scope.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-08 18:32:03 -03:00

8.2 KiB

MikroRMM — Sistema Atual

1. Objetivo do sistema

Plataforma de gestão e monitoramento de dispositivos MikroTik (RouterOS): inventário de clientes/dispositivos, polling de métricas, backups, automação, alertas, change guard, firmware rollout, topologia de rede.

2. Base upstream

3. Arquitetura atual

Stack Docker Compose com 5 serviços: nginx (proxy/reverse proxy + estáticos do frontend), backend (API Node/Express + poller + coletor NetFlow), postgres (dados relacionais), redis (filas BullMQ), influxdb (métricas de série temporal).

4. Estrutura do repositório

  • backend/ — API Node.js/TypeScript (Express, BullMQ, Socket.IO, SSH2)
  • frontend/ — SPA React 19 + Vite + TailwindCSS
  • nginx/ — Dockerfile, nginx.conf, entrypoint.sh (gera cert self-signed se ausente)
  • docs/ — documentação (mkdocs)
  • scripts/ — utilitários e fixtures de seed

5. Containers e serviços

Serviço Imagem Porta host (DEV) Healthcheck
nginx build local 80, 443 nenhum definido no compose
backend build local 2055/udp (NetFlow) GET /api/health
postgres postgres:15-alpine interno pg_isready
redis redis:7-alpine interno redis-cli ping
influxdb influxdb:2.7 interno influx ping

6. Banco de dados

PostgreSQL 15, banco mikrotik_manager, usuário mikrotik. Migrations em backend/src/db/migrate.ts, executadas automaticamente no boot do backend (idempotente — cria usuário admin default apenas se a tabela users estiver vazia).

7. Redis / filas

BullMQ para jobs de polling/automação. maxmemory configurável via REDIS_MAXMEMORY (default 512mb), política noeviction (ver comentário no docker-compose.yml).

8. InfluxDB / métricas

InfluxDB 2.7, org/bucket configuráveis via env (INFLUXDB_ORG, INFLUXDB_BUCKET), token de admin gerado no setup inicial.

9. Frontend

React 19 + Vite + TailwindCSS, servido como estático pelo nginx. Build gera chunk principal >500KB (aviso do Vite, não bloqueante).

10. Backend

Node.js/TypeScript, Express, autenticação JWT, TOTP opcional, OIDC opcional, coletor NetFlow/IPFIX na porta 2055/udp, backups, SSH (ssh2) para RouterOS.

11. Autenticação

JWT (JWT_SECRET, HS256, expiração 24h), senha com bcryptjs, suporte a TOTP e OIDC. Usuário admin default criado na migration inicial (admin/admin) — a senha padrão DEVE ser trocada imediatamente após o primeiro login (feito nesta instalação DEV; ver seção 12 do CLAUDE.md).

RBAC: 3 papéis globais (admin/operator/viewer), aplicados corretamente no backend em toda rota (ver docs/AUDITORIA_BASE_2GT.md). Não existe isolamento por site/cliente — o filtro X-Site-Id é apenas de exibição; qualquer usuário autenticado enxerga todos os dispositivos de todos os sites se omitir o header (achado SEC-002). Sessões JWT não têm revogação server-side: trocar senha, desabilitar TOTP ou remover um usuário não invalida tokens já emitidos até expirarem (achado SEC-001).

12. Ambiente DEV

  • Diretório: D:\PROJETOS\MIKROTIK RMM\mikrormm (Windows 11, Git Bash/MINGW64)
  • Docker: 29.6.2 / Compose v5.3.1
  • Compose usado: docker-compose.yml (build local a partir do código-fonte, não docker-compose.ghcr.yml)
  • Portas publicadas: 80 (HTTP), 443 (HTTPS self-signed), 2055/udp (NetFlow)
  • .env local com secrets DEV gerados aleatoriamente (nunca versionado)
  • TZ=America/Bahia

13. Ambiente PROD planejado

Infraestrutura Docker dedicada da GTI. Deve manter paridade com DEV (mesmo docker-compose.yml como base, variando apenas .env/secrets/domínio/CORS). Não implementado nesta missão.

14. Variáveis de ambiente

Somente nomes e finalidade (ver .env.example para a lista completa):

  • HTTP_PORT, HTTPS_PORT — portas publicadas do nginx
  • TZ — timezone dos containers
  • CORS_ORIGIN — origens permitidas pela API
  • DB_PASSWORD — senha do PostgreSQL
  • JWT_SECRET — segredo de assinatura JWT
  • ENCRYPTION_KEY — chave de criptografia de senhas de dispositivos (32 bytes)
  • INFLUXDB_TOKEN, INFLUXDB_ORG, INFLUXDB_BUCKET, INFLUXDB_ADMIN_PASSWORD — InfluxDB
  • POLLER_* — tuning do poller de dispositivos
  • REDIS_MAXMEMORY — teto de memória do Redis

15. Como iniciar

docker compose up -d

16. Como parar

docker compose down

17. Como rebuildar

docker compose build
docker compose up -d

18. Como verificar saúde

docker compose ps
curl -k https://localhost/api/health

19. Como executar testes

# backend
cd backend && npm ci && npm test && npm run lint && npx tsc --noEmit
# frontend
cd frontend && npm ci && npm test -- --run && npm run lint && npm run build

20. Persistência e volumes

Volumes nomeados: postgres_data, redis_data, influxdb_data, backups_data, certs_data, app_data. Persistência comprovada via docker compose restart nesta missão.

21. Backup do próprio MikroRMM

Backend expõe rotas de backup de dispositivos (backups_data); backup do próprio stack MikroRMM (dump de postgres_data/influxdb_data) ainda não documentado/procedimentado — pendente de missão futura.

22. Segurança atual

  • .env fora do Git (confirmado via git check-ignore)
  • Secrets DEV gerados aleatoriamente (DB_PASSWORD 32c, JWT_SECRET 64c hex, ENCRYPTION_KEY 32c, INFLUXDB_TOKEN 64c hex, INFLUXDB_ADMIN_PASSWORD 24c)
  • Senha padrão do admin alterada (ver .secrets-local/dev-admin-password.txt, fora do Git)
  • Certificado HTTPS self-signed gerado pelo nginx (nginx/entrypoint.sh) — adequado só para DEV
  • Lint de segurança (eslint-plugin-security) roda no baseline com 270 (backend) + 108 (frontend) warnings, 0 erros — auditados na Missão 01 (docs/AUDITORIA_BASE_2GT.md), majoritariamente falso positivo
  • Credenciais RouterOS cifradas em repouso com AES-256-GCM, chave fora do banco (SECRETS_DIR/secrets.json), IV único por operação, tag autenticada — design confirmado correto na auditoria
  • Conexão RouterOS API-SSL usa rejectUnauthorized: false (sem verificação de certificado) — suscetível a MITM na rede local (achado SEC-003, OPEN)
  • Change Guard (dead-man-switch) só cobre o fluxo de "preflight + apply analisado" em devices.ts; a maioria das edições diretas de firewall/rotas/VLAN, comandos em massa e o terminal interativo não passam por ele (achado SEC-005, OPEN)
  • Ver docs/AUDITORIA_BASE_2GT.md para a lista completa de achados, severidades e status

23. Integrações atuais

Nenhuma integração externa real conectada (GLPI, Slack, SFTP, RouterBOARD real) — fora do escopo desta missão.

24. Funcionalidades atualmente disponíveis

Conforme upstream v0.24.5-beta: gestão de clientes/dispositivos, polling, backups, automação, alertas, change guard, firmware rollout, topologia, NetFlow, OIDC, TOTP. Ver README.md do upstream para detalhes completos.

25. Funcionalidades GTI ainda não implementadas

Integração GLPI, SFTP, Slack, onboarding customizado, renomeação para "MikroRMM", RouterBOARD real conectada.

26. Procedimento para mudanças com IA

Ver CLAUDE.md na raiz do projeto.

27. Prompt/missão operacional atual

Missão 00 — Preparar Ambiente Dev Local (concluída): bootstrap e baseline apenas. Clonar upstream, subir stack local via build de código-fonte, validar saúde/login/testes, documentar, manter Git limpo, zero secrets versionados. Proibido nesta missão: renomear o produto, redesenhar UI, implementar GLPI/SFTP/Slack, alterar autenticação/schema/Change Guard, conectar RouterBOARD real, corrigir achados de auditoria. Próxima missão recomendada: Auditoria Técnica e de Segurança da Base Upstream.