Synadia Protect

Running the gateway

This section assumes you have completed the setup and have a my_gateway directory with a config.yaml and NKey files.

Starting the gateway

$ protect start --config my_gateway/config.yaml

WARNING: If you are running the gateway as a demo, you will need to provide your license JWT via --license.file /path/to/license.jwt. Alternatively, you can add it to my_gateway/config.yaml:

license:
  file: /path/to/license.jwt

Output:

[84241] 2026/04/01 17:14:22.191130 [INF] audit log directory dir=logs
[84241] 2026/04/01 17:14:22.195274 [INF] embedded nats started port=4911
[84241] 2026/04/01 17:14:22.200603 [INF] registered listener endpoint=$PROTECT.v1.server.info
[84241] 2026/04/01 17:14:22.200623 [INF] registered listener endpoint=$PROTECT.v1.profiles.add
...
[84241] 2026/04/01 17:14:22.201228 [INF] control plane service started
[84241] 2026/04/01 17:14:22.201345 [INF] monitoring started port=8080
[84241] 2026/04/01 17:14:22.204129 [INF] tracer service started trace_profiles=0
[84241] 2026/04/01 17:14:22.206442 [INF] bundle service started ports=[clients]
[84241] 2026/04/01 17:14:22.206468 [WRN] no rules specified - proxy requests will evaluate to per-port unmatched action
[84241] 2026/04/01 17:14:22.206514 [WRN] leafnodes are not enabled
[84241] 2026/04/01 17:14:22.206518 [INF] listening for clients port=4222

These warnings appear because no rules are installed yet and no leafnode port was configured.

Setting up admin access

The protect admin commands connect to the management API. Set up a NATS context for the admin key:

$ nats context add --server 127.0.0.1:4911 --nkey my_gateway/admin.nk admin

If you do not wish to add a NATS context, you can provide the admin key directly in the CLI:

$ protect admin --nkey my_gateway/admin.nk info

Verify the gateway is running:

$ protect admin --context admin info
Gateway Information

             Name: my_gateway
          Version: dev
             Time: 2026-04-09 19:53:59
           Uptime: 10.83s
      Connections: 0

Ports:

   clients:

     Connection Kind: client
                Name: clients
                Port: 4222
             Backend: nats://demo.nats.io:4222

Testing connectivity

First, verify the backend is reachable directly:

$ nats --no-context account info --server nats://demo.nats.io:4222

The command prints account information from the backend.

Now try connecting through the gateway:

$ nats --no-context account info --server 127.0.0.1:4222
nats: error: setup failed: nats: Authorization Violation denied by policy: 5QKehYmcAo21BQHqv7FSyH

The gateway denies all traffic by default. When no rules match a connection or message, the unmatched_rule_to_backend_action applies — and it defaults to deny. You must install and activate a bundle with rules that explicitly allow traffic before clients can connect or change the default to allow.

The error includes an event ID that appears in the audit log.

The gateway logs the denial:

[PID] 2026/04/01 10:35:47.589950 [INF] session ended cid=1 port=clients addr=127.0.0.1 remote=127.0.0.1 kind=client err=denied by policy: 5QKehYmcAo21BQHqv7FSyH

And the audit log (logs/audit.log) will contain a matching entry:

time=2026-04-01T10:35:47.589+00:00 type=com.synadia.protect.v1.policy.action id=5QKehYmcAo21BQHqv7FSyH device=my_gateway protocol=client ts=2026-04-01T10:35:47.589Z port=clients src=127.0.0.1 ... action=deny reason=no rules matched

The gateway is proxying connections and enforcing policy.

Previous
Setup