Moxon Metrics

Security and privacy

Your readings are yours

A monitoring tool sees everything on a machine, so it has to be careful with it. This page explains, in plain terms, what stays on your machines, what the relay can and cannot see, and how terminal sessions and packet capture are protected. It applies to 4.0 and 3.3 alike, with differences noted.

By default, nothing leaves the machine

Readings, history, process lists and the network map are stored on the machine that recorded them, in your own user folder. Moxon Metrics makes no outside connections except these, each of which you control:

There are no accounts to create for local use, and no usage statistics are collected.

Sharing on your own network

The relay: it carries data it cannot read

The relay is a meeting point for your devices on different networks. Every machine connects out to it, so no ports are opened on your router. Everything it routes or stores is encrypted before it leaves your device, with keys the relay never has.

Keys

Pairing a new device

What the relay can and cannot see

The relay can seeThe relay cannot see
Account and device numbers, device types (Linux, macOS, browser)Device names
When devices are online, their IP addressesReadings, processes, networks, devices around you
Message sizes and timing, which device talks to whichHistory summaries (stored, but encrypted)
That a terminal session is open, and its duration and volumeAnything typed or shown in a terminal

Version 4.0 uses the same relay protocol as 3.3, so machines on either version can share one account, and upgrading keeps the pairing.

The relay is deliberately small. Its protocol is documented in full, and automated tests check every part of it, including that the relay's own database holds no readable names, readings or keys.

Terminal sessions

A terminal gives whoever uses it the same power as the person signed in, so it has more locks than anything else:

  1. Off until you switch it on at that machine. No other device, and not the relay, can switch it on remotely.
  2. Only the machines you allow. You tick which of your devices may connect.
  3. Asked each time (on by default): a prompt appears on the machine naming the device that wants in. No answer within a minute means no.
  4. Proof of who is asking. The request is signed by the requesting device's own key and checked against your allowed list; requests that are stale, replayed or altered are refused without a reply.
  5. Keys for this session only. The two devices agree a fresh key pair (X25519) for each session; every keystroke and every screen update is encrypted with it and numbered, so nothing can be read, inserted, removed or replayed in between. Other devices on your account can't read it either.
  6. Never as an administrator. The shell runs as the signed-in user. Machines refuse terminal sessions when running as root or an elevated administrator, and on servers moxon service refuses to run the agent as root.
  7. Time limits and visibility. Sessions end after 15 minutes without typing or 8 hours in total. Open sessions show a banner with an End button, and a notification appears when one starts.
  8. A log without content. Who connected, when and for how long, and every refusal, are logged on the machine. What was typed is never recorded.

Packet capture 4.0

Packets can contain anything that crosses the network, so capture is kept narrow:

Signed packages

The apt package source is signed. apt refuses packages whose signature does not match the key you added, so a tampered mirror or download cannot slip in a different program. The signing key is kept offline on the developer's own computer, never on the download server.

Key: Moxon Metrics packages, fingerprint 4704 4752 DC5B F50C 34D5 0367 139F A85F D421 7C65. Compare it with gpg --show-keys /usr/share/keyrings/moxon-archive-keyring.gpg. Each download also has a SHA-256 checksum in Download.

The helper

Some readings need an administrator: per-app network use, everyone's disk use, drive health, and what the network says on the wire. A small helper does only that. It accepts no input from anything, changes nothing, and writes its readings to files every user can read. Listening on the network is passive: the helper never sends packets. Network scans only happen when you ask, from your own user account.

Protecting the window itself