Use supported images, rotate all change-me placeholders before production, and keep Docker, host OS, and dashboard dependencies updated.
Please do not open public issues for vulnerabilities.
Report security concerns privately to the maintainers with:
- affected version / image tag
- impact and exploitation prerequisites
- reproduction steps or proof of concept
- suggested remediation, if known
Maintainers should acknowledge receipt within 3 business days, provide status updates during triage, and publish fixes plus release notes after remediation is available.
- Replace every
change-me-*secret in.envbefore first start. - Keep the dashboard bound to
127.0.0.1unless a reverse proxy or VPN is in front of it. - Expose only required host ports; keep Postgres and RabbitMQ management bound to localhost.
- Run containers with
no-new-privileges; avoidprivilegedmode. - Use the Docker socket proxy instead of mounting
/var/run/docker.sockinto the dashboard directly. - Keep dashboard API reachable only through the frontend proxy / internal Docker networks.
- Review security logs for failed admin authentication, rate limiting, and watchdog restart anomalies.
- Rotate Discord, RabbitMQ, Postgres, and Funcom credentials after suspected compromise.
- Keep CI security scanning enabled (
pip-audit,npm audit) and remediate high-severity findings promptly.
When rotating credentials, follow this sequence to avoid downtime:
Important: The dashboard will refuse to start if this is set to a placeholder value (e.g.,
change-me-admin-token). Generate a real token before first deploy.
- Generate a new token:
python -c "import secrets; print(secrets.token_urlsafe(32))" - Update
.envwith the new value. - Restart the dashboard API:
docker compose up -d dashboard-api - Update any saved tokens in browser bookmarks or scripts.
- Connect to Postgres and change the role password:
ALTER ROLE dune WITH PASSWORD 'new-password'; - Update
.envwith the new password. - Restart:
docker compose up -d dashboard-api
- Update
.envwith new values. - Recreate both RabbitMQ containers:
docker compose up -d --force-recreate admin-rmq game-rmq - Restart services that connect to RabbitMQ:
docker compose restart rmq-auth-shim text-router
- Generate a new webhook URL in Discord channel settings.
- Update the URL via the dashboard Discord settings page or in
.env. - Restart:
docker compose restart dashboard-api
- Obtain a new token from the Funcom account portal.
- Update
.envwith the new value. - Restart all game server containers.
- Monitor watchdog Discord notifications for repeated crash/restart events.
- Check the dashboard metrics page for CPU/memory anomalies.
- Review
docker compose logs dashboard-apiforSECURITY:log lines (failed auth, rate limiting).
- If a credential is compromised, rotate it immediately (see runbook above).
- Block the attacker IP at the firewall or Cloudflare level.
- If a container is compromised, stop it:
docker compose stop <service>
- Pull fresh images:
docker compose pull - Rebuild dashboard:
docker compose build --no-cache dashboard-api - Clear any tampered config by restoring from backup.
- Restart services:
docker compose up -d - Verify all containers healthy:
docker compose ps - Confirm dashboard functionality and player connectivity.
- Document the incident timeline and remediation steps taken.
| Log source | Retention | Notes |
|---|---|---|
| Docker container logs | 7 days, 50 MB max | Configured via logging.options in compose |
| Dashboard request logs | 30 days | Stored in SQLite, pruned by backup scheduler |
| Connection history | 90 days | Postgres connection_log table |
| Metrics time series | 12 hours (43,200 samples) | In-memory ring buffer, configurable via DUNE_METRICS_RETENTION |
| Backup archives | Per retention policy | Configurable via dashboard backup settings |
Review and prune logs regularly. Avoid storing PII beyond the retention window.