Security
Built secure by default.
Configurable to your risk level.
Every ReefOffice server comes with a strong security foundation — no setup required.
The short version — for the questions your clients actually ask:
- Where is our data?
- On your own dedicated server in the EU — never shared with another client.
- Who can access it?
- You. In Managed mode ReefOffice can maintain it for you — every action logged — or pick air-gapped so no one connects without your say-so.
- How is it backed up?
- Daily, encrypted on your server before it leaves, and kept in a separate EU location.
- Can we leave?
- Yes — everything runs on open-source apps in standard formats. Export anytime.
The detail behind each answer is below — in plain language, with the technical specifics one click away.
Baseline
Always included — nothing to configure
Your own server, not shared with anyone
Your files, emails, and passwords live on a machine that belongs only to you — no other companies or clients share it.
Technical details ▸
- → Your own VPS on Contabo Cloud — EU data centers
- → 8 vCPU (AMD EPYC), 24 GB RAM, 400 GB SSD — allocated exclusively to your instance
- → NixOS — immutable OS, every config change is traceable and reproducible
- → Full root access, isolated at the hypervisor level — no other client can access your machine
A stolen password alone can never open your door
Whether the login password is leaked in a breach, guessed, or stolen via phishing — it still will not open the door without the second factor. Every team member is enrolled on their first login. No exceptions, no opt-outs.
Technical details ▸
- → Authentik SSO — one identity for all services; 2FA is checked at the SSO layer, so it covers Nextcloud, Vaultwarden, and everything else automatically
- → Default: TOTP — 6-digit code from any authenticator app (Aegis, Google Authenticator, 1Password…)
- → Upgrade: FIDO2/WebAuthn — hardware key (YubiKey) or device passkey; phishing-resistant by design
- → No SMS — not offered; SIM-swap attacks make SMS 2FA unreliable
- → First login redirects to TOTP setup — there is no skip path
Login passwords your team can't make weak
Every team member has one password to log in — to Nextcloud, Vaultwarden, and every other service. When they set or change it, the system rejects anything easy to guess, and anything already found in a known data breach.
Technical details ▸
- → Applies to the Authentik SSO password — the single login for all services (Nextcloud, Vaultwarden web UI, etc.)
- → zxcvbn score ≥ 3 (NIST SP 800-63B): models real attacker guessing strategies — dictionary words, name+year patterns, keyboard walks — no rigid character-class rules that train users to write "Password1!"
- → 12 characters minimum
- → HaveIBeenPwned check on every set/change — zero tolerance, any breach appearance rejects the password
- → Does not cover the Vaultwarden master password (vault encryption key set per user in their client app — outside Authentik's scope)
A log of everything done on your server
Every action we take on your server is recorded with a timestamp, visible to you in real time from your dashboard.
Technical details ▸
- → Hash-chained audit trail — every action recorded, visible in the Security tab of each server in your dashboard
- → SSH host key pinned on first connection (TOFU) — key mismatch causes connection failure and is logged
Your automations can't leak your passwords
The workflows running on your server need admin access to your apps to do their job. ReefOffice keeps those credentials in a locked layer your team can never open or read — so a built-in automation can never become a back door to copy out a password.
Technical details ▸
- → Built-in automations run in an operator-only automation runtime — never in the Activepieces no-code builder your team uses
- → Their secrets are encrypted and read only by the running job through job-scoped runtime credentials; agent-triggered runs go through a local allow-listed shim and never receive general automation-engine credentials
- → Your no-code builder holds zero operator credentials; the two layers are kept separate
- → Operator-only workspace membership is re-enforced on every deploy — no stale account keeps access
Your documents are searched without ever leaving your server
To make your files, invoices, and notes searchable, most AI tools upload your documents to a big AI company (OpenAI and the like) to be processed. ReefOffice runs a small AI model on your own server for that step — so the contents of your documents are never sent to anyone, not even to be indexed or searched.
Technical details ▸
- → Embeddings (the math that makes text searchable) are computed locally by bge-m3 (a multilingual, MIT-licensed open model) in Ollama on your VM — no third-party AI API is ever called
- → Vectors and text live in Qdrant on your own server; a search never leaves the machine
- → On Private AI plans the answer runs on a ReefOffice GPU in Germany — only your question and the matching snippets go to it, and no third-party AI is ever involved
- → On no-GPU plans you may optionally connect your own AI key for written answers; then only the question + the matching snippets are sent (never your whole corpus), and only if you opt in
Automatic backups — encrypted before they leave your server
Your data is backed up daily (and more often), encrypted on your server before being sent anywhere, and stored in a separate location from your server.
Technical details ▸
- → Restic — client-side AES-256 encryption before transfer, unique key per VM
- → Stored on Hetzner Storage Box (EU) over SFTP/SSH port 23 — geographically separate from the Contabo compute VM, encrypted before transfer
- → Retention: 24 hourly · 7 daily · 4 weekly · 12 monthly snapshots
- → Backup key never stored in the ReefOffice control-plane database
Your choices
Three choices — pick what fits your situation
These are set when your server is created. SSH management can be disabled later; disk encryption and zero-knowledge backup mode require provisioning or a planned handoff.
Disk encryption
Default: onThe question: what happens if someone physically accesses your server hardware?
✓ On — root data is encrypted
The root filesystem is encrypted at rest. This protects removed disks and root-disk snapshots that do not include the boot unlock material.
Off — files are readable
Anyone with physical access to the disk can read your files directly.
Technical details ▸
- → LUKS2 root-filesystem encryption by default — applied before NixOS is installed
- → A random key is generated per VM at provisioning and applied automatically at boot — no passphrase prompt on reboot
- → Small unencrypted boot partition (bootloader + initrd) · rest of disk LUKS2-encrypted (ext4)
- → LUKS protects data at rest only — for running-system security see the kernel hardening section in the FAQ below
Access mode
Default: ManagedThe question: who can connect to your server to apply updates and manage services?
Managed — we handle it
ReefOffice applies updates, toggles services, and fixes issues for you. Every action is logged and visible to you.
Air-gapped — you decide
Nobody connects without your explicit permission. You apply updates on your schedule. Required for zero-trust environments only.
Technical details ▸
- → Managed: control plane holds a dedicated SSH key; TOFU host key pinning prevents MITM on reconnect
- → Air-gapped: only your SSH keys are installed; ReefOffice cannot toggle services or apply updates remotely after handoff
- → Optional weekly digest email (opt-in from Settings): lists all operations across your servers — covers Managed-mode SSH activity without per-action noise
- → Honest: in Managed mode, ReefOffice has permanent root SSH access. All access is logged, but it is not zero-operator access.
Backup encryption key
Default: StandardThe question: if you need to restore a backup, who needs to be involved?
Standard — we restore for you
The backup key stays on your server. If something goes wrong, we can restore your data without waiting for you to provide a key.
Zero-knowledge — only you can restore
After handoff, you replace the backup key with one only you hold. We cannot read or restore those backups without your involvement.
Technical details ▸
- → Standard: restic password stored on the encrypted root filesystem — never in the control-plane DB
- → Zero-knowledge: after handoff, you replace the placeholder restic password with a key only you hold; ReefOffice cannot restore backups for you
- → Attack chain in Standard mode: attacker must break LUKS2, then achieve root, then read the backup key — a multi-stage independent compromise
- → Zero-knowledge removes ReefOffice backup-key custody after handoff, at the cost of self-managed restore
Deep dive
For security teams — threats, mitigations & roadmap
Click any question to expand.
Do my documents get sent to OpenAI or another AI company to be searched?
How are the built-in automations isolated from my team and my no-code tools?
LUKS only protects the disk at rest — what protects a running server?
Do you scan for known CVEs in Authentik, Nextcloud, and Vaultwarden?
What if the ReefOffice control plane itself is compromised?
Can Contabo staff read my data?
How long is the attack chain to reach the backup key in Standard mode?
How does SSH host key pinning prevent man-in-the-middle attacks?
Who hosts ReefOffice's servers, and can I trust them?
Have a security or compliance question?
Tell us your risk requirements — disk encryption, access mode, zero-knowledge backups, or a specific control — and we'll walk through how ReefOffice handles it for your workspace.
Security question or responsible disclosure: security@reefoffice.com