Onboarding¶
Before you start, list every hostname, every machine client (monitoring, webhooks, payment
callbacks: they cannot solve a challenge) and how many connections your origin survives.
$API and $ZP_KEY: API access.
1. Create the service¶
- Shared: order it with your primary FQDN in the
customer portal; it appears in
the portal and in
GET /servicesonce provisioned. - Dedicated edges: create it yourself (main account, address from your pool, live at once). See Shared and Dedicated.
curl -s -X POST -H "Authorization: Bearer $ZP_KEY" -H 'Content-Type: application/json' \
$API/services -d '{"account_id": "ACCOUNT_ID", "fqdn": "www.example.com", "origins": [{"address": "203.0.113.10"}]}'
2. Origin¶
On a shared service, add the origin:
curl -s -X POST -H "Authorization: Bearer $ZP_KEY" -H 'Content-Type: application/json' \
$API/services/www.example.com/origins \
-d '{"name": "origin1", "address": "203.0.113.10", "port": 443, "sni": "www.example.com", "maxconn": 100}'
Set maxconn to what your application survives; the edge queues the rest. Aliases and
health checks: Origins, Services.
3. DNS¶
The edge hostname (network.edge_hostname, for example
www-example-com.edge.protect.zeroservices.eu) serves the primary FQDN and all aliases.
| Name | Record |
|---|---|
| subdomain | CNAME to the edge hostname |
apex (example.com) |
A and AAAA with the service's anycast addresses |
CAA, if set |
must allow your ACME provider |
Lower the TTL a day in advance, then check:
curl -s -H "Authorization: Bearer $ZP_KEY" "$API/services/www.example.com/dns?refresh=1"
Per hostname: ok_cname, ok_a, wrong_target, apex_cname, or not set up yet.
4. Certificate¶
curl -s -X POST -H "Authorization: Bearer $ZP_KEY" $API/services/www.example.com/ssl/issue
ACME HTTP-01 through the edge, issued within minutes once DNS passes. Own certificates: ECDSA only. Aliases have their own, see TLS.
5. Shield the origin¶
Allow only the ZERO-PROTECT edge addresses in the origin firewall (IPv4 and IPv6; support provides the list), or connect over IPsec, MPLS or a CrossConnect. Then request the application directly on the origin address from elsewhere: it must fail.
6. Protect and test¶
- Set service type and posture together with
PATCH /services/{fqdn}, for example{"service_profile": "web_dynamic", "defense_posture": "standard"}. Forapiandhlsuse postureoffand set the limits directly, see Rate limits. - Machine clients into
protection_allowlist, see Protection rules. - WAF is off by default: start at paranoia level 1, see WAF.
- After a day of normal traffic, size
req_per_10sandpath_aggregate_per_10sfrom the logs. - Test from several networks, every alias, the
80to443redirect and the machine clients from their real addresses;X-ZP-Cacheshows what the edge caches.
Guided onboarding with our engineers is billed by effort, see the terms of service.