MikroTik Manager is a fully self-hosted network management application distributed as a Docker container. It runs entirely within the customer's own infrastructure.
| Aspect | Detail |
|---|---|
| Data storage | Local SQLite database inside Docker volume |
| Data location | Customer's server only — no cloud, no external storage |
| Telemetry | NONE — no usage data, analytics, or crash reports |
| Phone-home | NONE — no fleet, device, configuration, or usage data ever leaves your server |
| License activation | Offline — validated locally, no external server contact |
| Device connections | Managed MikroTik devices within the customer's network |
| Optional outbound | Read-only, GET-only fetches of public feeds — never carry any of your data. (1) RouterOS CVE feed from NVD; (2) latest RouterOS version from MikroTik; (3) Manager update check from GitHub Releases. Each can be disabled; all degrade gracefully with no internet (last known data is kept). |
| Config backups | Stored in the local database |
JWT_SECRET and ENCRYPTION_KEY are auto-generated and persisted to data/.secrets.json (file mode 0600) when not supplied via environment, eliminating the public-default riskadmin/admin user is created once on first install; deleting it does not re-seed on the next restart| Role | Capabilities |
|---|---|
| Super Admin | Full access plus user management and per-site access grants — the only role that can manage users and assign sites |
| Admin | Device CRUD, commands, upgrades, service toggles |
| Operator | Device management, command execution, upgrades, backups |
| Viewer | Read-only: dashboard, device status, interface views |
Each non–Super Admin role can additionally be scoped to specific sites (per-site RBAC, v1.33.0+): the role decides what a user can do, the assigned site list decides where. A scoped user only ever sees and acts on their sites — across the dashboard, device list, sites, logs, backups, live status updates, and bulk commands/upgrades — enforced server-side at the data and WebSocket layers, not just in the UI. Users with no scope restriction retain full-fleet access.
Recommended: create a dedicated MikroTik user group with minimal policies:
/user/group/add name=manager-group policy=ssh,reboot,read,write,sensitive,rest-api,policy,!local,!telnet,!ftp,!test,!winbox,!password,!web,!sniff,api,!romon
| Method | Protocol | Encryption | Use Case |
|---|---|---|---|
| SSH | TCP/22 | Encrypted | Default, best compatibility |
| REST API | HTTPS/443 | TLS | RouterOS 7.1+ |
| SNMP | UDP/161 | SNMPv2c | Monitoring only, no write ops |
| Data | Protection |
|---|---|
| Device passwords | AES-256-GCM with unique IV per value |
| User passwords | bcrypt hash (irreversible) |
| TOTP secrets | AES-256-GCM (same key as device passwords) |
| 2FA backup codes | bcrypt hash (irreversible), single-use |
| Device configs | Local SQLite — OS-level file permissions |
| JWT & encryption secrets | Auto-generated on fresh install, persisted to data/.secrets.json (mode 0600); env vars take priority when set |
| Channel | Protection |
|---|---|
| Browser ↔ Manager | HTTPS/TLS (recommended for production) |
| Manager ↔ MikroTik (SSH) | SSH protocol encryption |
| Manager ↔ MikroTik (REST) | HTTPS/TLS |
| WebSocket | WSS when TLS enabled |
node:22-alpine — minimal attack surfacepackage-lock.jsonexpress, better-sqlite3, node-ssh, net-snmp, jsonwebtoken, bcrypt, wsMikroTik Manager minimizes supply chain risk through controlled dependencies, reproducible builds, and a fully self-contained distribution model.
node:22-alpine from Docker Hub official libraryv1.17.0), never overwrittenghcr.io), tied to the official repositorypackage-lock.json ensures reproducible installs with exact versions and integrity hashesadmin/admin password immediately after first login. Delete the admin account once a named admin exists — it will not be re-created.data/.secrets.json alongside the database — secrets are auto-generated on fresh installs and losing this file invalidates all sessions and makes encrypted device passwords unrecoverable. To override or rotate, set JWT_SECRET / ENCRYPTION_KEY via environment (openssl rand -hex 48 / -hex 32).data/mikr.db per your backup policy| Requirement | Status |
|---|---|
| Data sovereignty | Full — all data stored locally, no cloud |
| GDPR | No personal data processed beyond user account names |
| Network isolation | Supported — core management runs fully in air-gapped environments; the optional public-feed checks (CVE / version / update) simply stay idle with no errors |
| Audit trail | Command history with user attribution and timestamps |
| Access control | Role-based with three permission levels |
To report a security vulnerability, contact: ihor@hreskiv.pl
We take security reports seriously and will respond within 48 hours.