All documentation pages ↓

On this page

Security model

Who can use LiteBlox

Further attempts are refused with Too many failed logins; try again in N minutes, even with the right password, and the audit log records one Refused a login per lockout. Refused attempts don't count, so they can't extend it. The counts are kept in the database, so restarting LiteBlox doesn't reset them. - This means someone else's wrong guesses can lock an admin out for at most 15 minutes. If you're locked out for real (a forgotten password), set a new one on the host: docker compose exec liteblox liteblox user passwd NAME (see Locked out of LiteBlox). - Every change, login and failed login is recorded, with the client's address for logins; admins read it under Users → Audit log, filtered by user, action or detail. Sign-ins (logins, logouts, failed and refused logins) are hidden until you tick sign-ins or pick one of them as the action. - LiteBlox serves plain HTTP. Put it behind a TLS reverse proxy and set secure_cookies = true (see Installing). - The Help pages, the login page and /healthz are readable without logging in. Nothing else is.

How LiteBlox reaches the nodes

Once, over SSH, for setup.

Afterwards, only to the agent, over mutual TLS (TCP 8530).

What the agent can do on a node

On a node with Kea (DHCP):

On a node with time sync (chrony): setup makes /etc/chrony writable for the agent's group. The agent writes only chrony.conf, checked against an allow-list: - sources by name or address - the networks it serves - the fixed lines Debian ships, with fixed paths

There's nothing that includes other files, reads keys from elsewhere, or adds reference clocks. chrony checks the file too (chronyd -p). The agent can't restart chrony itself: a systemd path unit does that when the file changes.

The trade-off on the node

For the agent to write zone files without sudo, setup makes /etc/bind and the zone files group-writable for bind. Anything running as group bind, which includes named itself, can then replace files in /etc/bind. Untick the option during setup if you'd rather manage those permissions yourself; LiteBlox then can't write zones it can't reach, and the node's page shows which.

Secrets at rest

Where What Protection
./data/liteblox.db accounts (password hashes), nodes, zones, TSIG key secrets, the failover pair's private keys owner-only
./data/secret.key session signing key owner-only
./data/pki/ the CA and LiteBlox's client key owner-only folder
./backups/ node backups, including BIND keys by default files owner-only
node: /etc/liteblox-agent/agent.key the agent's private key root + liteblox-agent only
node: /etc/bind/liteblox/keys.conf every TSIG key LiteBlox writes mode 0640, group bind
node: /etc/kea/kea-dhcp-ddns.conf the TSIG key DHCP registers names with mode 0640, group _kea
node: /etc/kea/tls/ha.key the failover link's private key mode 0640, group _kea

Anyone with ./data can impersonate LiteBlox to the agents and sign updates to every dynamic zone. Back it up somewhere as safe as the servers themselves.

A client key's secret is shown once, to the admin who created or replaced it, and is never shown in the key list, logs or configuration views (LiteBlox masks secret in every configuration it displays).

API tokens

Not (yet) included