Skip to main content
The quickest path to a production deployment:
docker-compose.yml

Security hardening

Sundew’s Docker image is hardened by default:

Network isolation

For maximum security, deploy with no outbound network access:
Or use a dedicated bridge network with no internet access:

Storage limits

Prevent disk exhaustion from high-traffic attacks:
Sundew also has built-in limits:
  • SQLite database: 500 MB max (oldest events pruned)
  • JSONL log: 100 MB with 5 rotated backups
  • Rate limiting: 100 req/s per source IP (configurable)

Deployment checklist

Before going live, verify:
1

Network isolation

Container has no outbound network access (--network=none or internal bridge).
2

Read-only filesystem

Root filesystem is read-only with only ./data/ writable.
3

Non-root execution

Running as non-root user (UID 1001).
4

No real credentials

No real API keys, tokens, or passwords anywhere in config or persona files.
5

Canary validation

All canary tokens are verifiably fake: sundew validate-config.
6

Log rotation

Storage limits configured to prevent disk exhaustion.
7

Host firewall

Only the honeypot port is open inbound. No egress allowed.
8

Security audit

make audit passes (pip-audit + bandit + security tests).

Building from source

The Dockerfile uses a multi-stage build on Docker Hardened Images (dhi.io/python:3.13-alpine) with nonroot execution, no shell, and minimal attack surface.