Sandboxes
An organisation of its own for trying rules, settings and sign-ins, whose mail is not real and goes nowhere.
A sandbox is an organisation made for trying things. Try a filter rule, a setting, an access rule or a new way to sign in there first, not on the organisation people rely on. It behaves like the real thing, with one difference: its mail goes nowhere.
- Whatever a sandbox sends to anybody outside it is kept in its outbox, and never sent. That covers people writing from a mail app, a forwarding rule, a vacation reply and anything else. Mail to another organisation on the same server is kept too.
- Nothing from outside reaches a sandbox. Port 25 refuses its addresses, and mail from another organisation on the same server is refused and returned to its sender.
- Its people write to each other as in any organisation.
What a sandbox starts with
-
The design, a template, or nothing. Made from the design, it starts with your organisation’s settings and filter rules. Made empty, it starts with a new organisation’s defaults. A template starts it as a typical organisation of one kind, with people, groups, settings and rules to match:
small-business: a small company, with everyone, sales and accounts groups;school: all staff, teachers, the office and three classes as groups;regulated-firm: compliance, advisers and records groups, journaling, and rules that hold back mail with client account numbers or client lists for review.
Every way, it begins at the Strict profile, and nothing else is copied from your organisation: no people, mail, keys or legal holds.
-
Its own domains, under
.test, which no DNS on the internet answers. A sandbox called “Try rules”, made from an organisation withexample.com, has the domaintry-rules.example.com.test. It can add more domains, and each one must be under.test. -
Made-up people: from the design or empty, five of them, Amira Abbott, Ben Fairbank, Carla Kettering, Dev Pellham and Elena Underwood; from a template, the people it describes. The first is the sandbox’s administrator. Their passwords are shown once, when the sandbox is made, and never again.
-
Sample mail, if you ask for it. Each mailbox is filled with made-up mail from the past four weeks: conversations between colleagues with their replies, newsletters, meeting invitations, messages with small attachments, and a few spam and phishing examples for your filter rules to work on. Every link and address in it is under
.testor.invalid, so nothing in it leads anywhere. It is stored, never sent. 60 messages a mailbox unless you choose up to 200, and it stops at the sandbox’s storage ceiling. -
1 GB of storage, like any organisation’s ceiling.
-
A lifetime of 14 days, unless you choose between 1 and 90. When it runs out, the sandbox is removed with everything in it.
An organisation keeps at most five sandboxes at a time. A sandbox cannot have sandboxes of its own.
Working inside one
Sign in to the console as the sandbox’s administrator, with the password shown when it was made. Every page then says you are in a sandbox and when it ends. Mail apps sign in as any of its people, as they would anywhere else.
The Outbox card on the Organisation page lists what the sandbox would have sent: when, who from, who to, the subject and the size. None of it left.
Guided scenarios
A scenario walks you through a common task inside a sandbox, one step at a time, and ticks each step once the sandbox is in that state. Nothing it does reaches your real organisation.
| Scenario | What you do |
|---|---|
a-person-leaves | Offboard Rowan Ellery, a made-up person the scenario adds: mark them as left, give their mail to a colleague by a delegate or a forward, and put their mailbox on legal hold. |
a-domain-is-added | Add a second domain, branch. and the sandbox’s first domain, and give somebody an address there or make it an alias. |
a-phishing-message-arrives | A message from outside borrows the administrator’s name and asks somebody to verify their account. Run it, then find it in that person’s quarantine, read in the message trace why the filter held it, and see it named in their quarantine digest. |
a-rule-holds-a-message | The scenario adds a mail-flow rule that holds mail from a new supplier for review. Run it: an invoice arrives and is held in quarantine by the rule, with the rule’s reason. Release it, and it arrives in the Inbox. |
a-spoofed-sender-fails-dmarc | A message claims to be from the administrator, at the sandbox’s own domain, from a server the domain does not name. Run it, and the domain’s DMARC policy refuses it during SMTP; the message trace says why, and nothing reaches anybody. |
a-message-from-outside-step-by-step | An ordinary message from a supplier arrives. Run it, then follow it through the message trace: received from the supplier’s server, filtered with its score, and filed in the person’s Inbox, where its headers show SPF and DMARC passing. |
a-look-alike-domain | A message from a domain that reads as the sandbox’s own at a glance (one letter swapped for one that looks the same) asks somebody to change a supplier’s bank details. Its SPF and DMARC pass. Run it: the filter quarantines it for the imitation. Read why in the trace and on the held copy, then block the domain on the organisation’s sender list. |
malware-in-an-attachment | A message carries invoice.pdf, which is really a Windows program. Run it: the filter reads what the attachment is rather than what it is called and refuses the message during SMTP. Nothing reaches anybody. |
an-account-taken-over | Starting it makes one person look as an account does when somebody else has its password: a run of wrong passwords, a sign-in and an open session from a network they never use, and a forward of all their mail to an outside address. Secure the account from their page, see the forward refused, then give them a new password. |
storage-fills-up | Running it sets the sandbox’s storage ceiling to exactly what it holds, as full as a disk can get before mail stops, and a message arrives. It is accepted and waits in the queue; the trace says why. Raise the ceiling on the Organisation page, and the queue’s next try, within fifteen minutes, files it. Nothing is lost. |
the-cloud-edge-fails | The edge in front of your organisation stops answering, so a sender’s server tries your server directly, as senders do. The message claims an edge already checked it and let it through. Run it: your server believes such claims only from its own edge, takes them out, checks the message itself and quarantines it. |
On the console, choose Scenarios beside the sandbox on the Sandboxes card, then Start. Signed in to the sandbox itself as one of its administrators, the Organisation page has the same scenarios on its Scenarios card, to start and run from inside. Each step says what to do and where, and Check again reads the sandbox afresh. A message scenario’s step that sends its message has Run, which says what happened to it. From the command line:
vsx admin sandbox scenarios 7
vsx admin sandbox start 7 a-person-leaves
vsx admin sandbox scenarios 7 a-person-leaves
A message scenario has a step that sends its message. It comes in the way mail from the internet does, through authentication, the sandbox’s own filter and rules, and delivery, but it is made inside the sandbox and can reach only the sandbox’s own people. Run it from the command line:
vsx admin sandbox start 7 a-phishing-message-arrives
vsx admin sandbox run 7 a-phishing-message-arrives
sandbox run says what happened to the message: quarantined and by which part of the filter, delivered, or refused and with what reply. A scenario’s message is sent once.
Starting a scenario adds the same things every time, so two people working through it see the same sandbox. A scenario starts once in each sandbox. Whoever may make sandboxes may start one, and so may the sandbox’s own administrators from inside it; an auditor of either can read how far one has got.
From inside the sandbox, signed in as one of its administrators with --server:
vsx admin sandbox scenarios-here
vsx admin sandbox start-here a-look-alike-domain
vsx admin sandbox run-here a-look-alike-domain
Removing one
Remove a sandbox when you are done with it, or let it run out. Either way it is taken off every list at once, then everything in it is deleted: its people, mail, settings and domains. Any of its mail still waiting to go is dropped, never sent.
A whole sandbox node
A node of its own can be a sandbox: a practice server where every organisation is a sandbox and nothing real can happen. The quickest way is one command, which makes the whole node in one directory: its configuration, its store, its key and a certificate it made itself, with every listener on a free port of this machine:
versealx-server sandbox-node new ~/sandbox
It prints the command that starts it, the address of its console and API, its port 25, and how to give its administrator a password. When you are done, stop it and remove it:
versealx-server sandbox-node remove ~/sandbox
remove deletes the directory only when it holds a sandbox node, its store says so, and the node is stopped; a production node’s directory, or one still running, is refused.
To make a sandbox node by hand instead, set it in the node’s configuration before it first starts:
[sandbox]
node = true
On a sandbox node:
- Every organisation made on it is a sandbox, and an organisation can’t be made otherwise. Its domains must be under
.test. - Mail to anyone outside an organisation is kept in its outbox and shown, never sent. The node never connects to another mail server.
- Port 25 takes mail only for the node’s own
.testdomains. - It can never join a production cluster, and a production node can never join it; the first node on a store decides which kind it is. It can’t be a disaster-recovery standby, and organisations can’t be imported into it. Its organisations never end: their end date reads never.
versealx-server explainanddoctorsay first that it is a sandbox node, and the console shows a banner on every page.
A design tried on a sandbox node reaches production as any sandbox’s does: exported as a design, never its people or mail. See Designs.
Who may
| Role | May |
|---|---|
| Administrator of the organisation | Make, see and remove sandboxes. |
| Auditor | See them. |
Making and removing a sandbox are lines in the audit log. The log records who was made, but never their passwords.
In the console
The Sandboxes card on the Organisation page lists your sandboxes, with their domains, when each ends and how much its outbox holds. Make one there with a name, what to start from (the design, a template, or nothing), whether to fill it with sample mail, and how many days it lasts. The people and their passwords are shown once, right after it is made, so copy them then.
On the command line
versealx-server admin sandbox new Try rules --days 7
versealx-server admin sandbox new Blank slate --from empty
versealx-server admin sandbox new Classroom --from template:school --mail sample
versealx-server admin sandbox list
versealx-server admin sandbox outbox 12
versealx-server admin sandbox remove 12
sandbox new prints the sandbox’s number, its organisation, when it ends, and each person with their password. --mail sample fills it with sample mail; --per-mailbox <1-200> says how much, and --seed <n> makes the same mail again. sandbox outbox and sandbox remove take the sandbox’s number, which sandbox list shows first on each line.
Over the API
| Method | Path | Purpose |
|---|---|---|
GET | /api/v1/tenants/{tenant}/sandboxes | The organisation’s sandboxes: each one’s tenant, organisation, name, from, created, expires, ceilingBytes, domains and outbox, how many messages it keeps. |
POST | /api/v1/tenants/{tenant}/sandboxes | Body: name, and optionally from (design, empty or template: and a template’s name), mail ("none", "sample", or {"seed": n, "perMailbox": n}) and days. The answer has the new tenant, its domains, and people, each with address, password and administrator. The passwords appear only here. |
DELETE | /api/v1/tenants/{tenant}/sandboxes/{sandbox} | Remove one, with everything in it. |
GET | /api/v1/tenants/{sandbox}/sandbox | Inside a sandbox: what it is, including of, the organisation it was made for. 404 in an organisation that is not a sandbox. |
GET | /api/v1/tenants/{sandbox}/sandbox/outbox | Inside a sandbox: what it would have sent, newest first: at, from, to, subject and size. |
GET | /api/v1/tenants/{tenant}/sandboxes/{sandbox}/scenarios | The scenarios a sandbox can start, and how far each started one has got. Add /{name} for one scenario’s steps, each with done, what to do, where to look and links to the settings it is about. |
POST | /api/v1/tenants/{tenant}/sandboxes/{sandbox}/scenarios | Body: name. Starts that scenario in the sandbox. |
POST | /api/v1/tenants/{tenant}/sandboxes/{sandbox}/scenarios/{name}/run | Sends a message scenario’s message into the sandbox, once, and answers with what happened to it. |
GET | /api/v1/tenants/{sandbox}/sandbox/scenarios | Inside a sandbox: its scenarios, as above. Add /{name} for one. |
POST | /api/v1/tenants/{sandbox}/sandbox/scenarios | Inside a sandbox, for its administrators. Body: name. Starts that scenario. |
POST | /api/v1/tenants/{sandbox}/sandbox/scenarios/{name}/run | Inside a sandbox, for its administrators: sends the scenario’s message, once. |
Something unclear or out of date on this page? Tell us.