Installing the Sentinel agent
Register an agent in the portal, install the signed package, register on the host with the one-time token, and confirm the tunnel. Covers the network requirements, updates from the portal or the package, host and tunnel health, and the check command for troubleshooting. mTLS to your tenant, no inbound ports.
The WASViking® Sentinel agent installs from a signed package. The whole flow is driven from your portal: create the agent record to get a one-time token, install the package on the host, register with the token to fetch certificates, and confirm the tunnel. The mTLS tunnel comes up and the WASViking cloud can then scan your internal targets.
Supported platforms
| Platform | Package |
|---|---|
| Ubuntu / Debian | .deb |
| RHEL / Rocky / Alma / Amazon Linux | .rpm |
| Other Linux with systemd | tarball |
| macOS | Supported for local evaluation. |
| Windows | Not supported. |
Minimum requirements: 1 vCPU, 512 MB RAM, 1 GB disk for cache and ephemeral scan output. The commands on this page use the Ubuntu / Debian package.
For the walkthrough with portal screenshots, see WASViking Sentinel Tunnel in Getting Started. This page is the full installation reference.
Network requirements
The agent only connects out. Allow these destinations from the agent host:
| Destination | Port | Used for |
|---|---|---|
sentinel.wasviking.com |
TCP 443, outbound | The tunnel. Scan traffic for your internal targets flows through it, over mutual TLS. |
api.wasviking.com |
TCP 443, outbound | Registration. The agent fetches its certificates and configuration once, with the token. |
- No inbound port. Nothing on the internet connects to the host, and no firewall opening toward it is needed.
- No TLS inspection on
sentinel.wasviking.com. The tunnel uses mutual TLS: the agent proves its identity with its own certificate and only trusts the WASViking private CA. A proxy, firewall or endpoint security product that terminates and re-signs TLS cannot carry that handshake. Add the domain to the product's inspection bypass list. Where that list usually lives in common products is described in Endpoint protection exclusions. - Cloud instances. Outbound rules can live in more than one place. On Amazon EC2, for example, check the security group outbound rules, the subnet network ACL, the route to a NAT or internet gateway, and any proxy in the VPC.
- Clock. Keep NTP enabled on the host. Certificate validation fails on a skewed clock.
The check command tests each of these from the host.
Step 1: Register a new agent in the portal
Sign in to portal.wasviking.com. In the left sidebar, under
WASVIKING SENTINEL, open Sentinel Agents and click
Add Sentinel Agent.
Set the Agent display name: a human-friendly label shown in the
portal, for example London - DMZ Scanner 01. It is not the machine
hostname, must be unique within your organization, and is renameable
later.
Click Create. The portal issues a bootstrap token, displayed once. Copy it and keep it safe. If you lose it, revoke this agent record and create a new one.
Step 2: Download the package
Click Get Agent at the top of the Sentinel Agents page. The portal serves the right package for the platform you select.
Verify the download before installing. The Verify download (SHA256 & signature) action on the modal gives you the expected checksum and the signature to validate the artifact has not been tampered with.
Step 3: Install and enable the service
On Ubuntu / Debian:
sudo dpkg -i wasviking-sentinel_<version>_amd64.deb
sudo systemctl enable --now wasviking-sentinel
Replace <version> with the release version shown in the portal. The
package installs the agent under /opt/wasviking-sentinel/, creates
the wasviking-sentinel service account, and registers a systemd unit
named wasviking-sentinel.
Starting the service before registering is expected. The service stays running and waits for the registration. Its status and its journal name the exact command to run next.
Step 4: Register the agent
Register the agent once, with the bootstrap token from Step 1. Run the command from any directory:
sudo /opt/wasviking-sentinel/wasviking-sentinel register --token <YOUR_TOKEN_FROM_PORTAL>
The command downloads the agent's client certificates, writes them
and the configuration into /opt/wasviking-sentinel/, and hands the
files to the service account. The running service picks up the
registration and connects by itself within about 15 seconds. No
restart is needed.
If you see instructions that run ./wasviking-sentinel register from
inside the agent directory without sudo, use the command above
instead. The older form fails on file permissions.
In provisioning scripts, read the token from an environment variable instead of pasting it on the command line:
export WASVIKING_BOOTSTRAP_TOKEN="<paste-from-portal>"
sudo /opt/wasviking-sentinel/wasviking-sentinel register --token "$WASVIKING_BOOTSTRAP_TOKEN"
Registration output:
Registering with WASViking API...
Certificates downloaded successfully into /opt/wasviking-sentinel/certs
Config written to /opt/wasviking-sentinel/configs/config.yaml
Agent files handed to the service account wasviking-sentinel
Next: sudo systemctl enable --now wasviking-sentinel (a service that is already running connects on its own within 15 seconds)
Then confirm the tunnel with: sudo /opt/wasviking-sentinel/wasviking-sentinel check
The private key never leaves the host. The CA certificate, the
client certificate, and the client key are written under
/opt/wasviking-sentinel/certs/ and belong to the service account:
sudo ls -l /opt/wasviking-sentinel/certs
-rw-r--r-- wasviking-sentinel wasviking-sentinel ca.crt
-rw-r--r-- wasviking-sentinel wasviking-sentinel client.crt
-rw------- wasviking-sentinel wasviking-sentinel client.key
Step 5: Confirm the agent is connected
sudo systemctl status wasviking-sentinel
sudo /opt/wasviking-sentinel/wasviking-sentinel status
- In the service status, the latest lines include
Tunnel connected to sentinel.wasviking.com:443. statusshows the agent state and, while the tunnel is down, the last connection error.- In the portal, the agent shows as Active on the Sentinel Agents page within a few seconds.
If one of the three does not match, run the check command.
The config file
register writes /opt/wasviking-sentinel/configs/config.yaml:
grpc_server: sentinel.wasviking.com
agent_hostname: dmz-scanner-01
agent_id: ""
use_tls: true
tls_ca_cert: certs/ca.crt
tls_cert: certs/client.crt
tls_key: certs/client.key
use_mtls: true
log_path: logs/sentinel_agent.log
agent_id is empty until the first run. The service populates it
automatically and persists it back to the file. You do not need to
edit this file by hand in the common case.
# After the first run, agent_id is filled in:
agent_id: 56b3bd08aa4d5201edafd434740d9c140c1e477742d47360d71a76842b09ec21 # auto-generated on first run, do not edit
Agent status
In Sentinel Agents, each agent shows one of:
| Status | Meaning |
|---|---|
| Active | Registered, tunnel connected, heartbeat current. |
| Pending | Not registered yet, or registered but has not connected yet. |
| Offline or Disconnected | Was Active, then the tunnel dropped or the heartbeat stopped. Both count under Offline. |
| Revoked | Certificate invalidated; tunnel refused. |
Counters at the top of the page summarize the fleet:
Total · Active · Pending · Offline · Revoked.
If the agent stays Pending
If an agent remains Pending for more than a few minutes, run the check on the host:
sudo /opt/wasviking-sentinel/wasviking-sentinel check
Its verdict names the cause and the next step. The usual causes are
an agent that was never registered, a service that cannot read its
files, outbound TCP 443 to sentinel.wasviking.com blocked, TLS
inspection on the path, and a skewed clock. See
Troubleshooting with the check command.
How the portal lists agents
On Sentinel → Sentinel Agents, the Scan Tunnels list shows:
| Column | Meaning |
|---|---|
| Agent | The display name set on creation, with the hostname the agent reports. |
| Status | Connected, Registered, not connected, Awaiting registration, Disconnected or Offline. Revoked agents appear when you turn on Show revoked. |
| Version | The version the agent runs and its update state. See Update from the portal. |
| Last seen | When the agent last reached WASViking. |
| Scan targets | How many targets scan through this agent. |
| Actions | Details, Update (when a newer release is available), Rotate Token and Revoke. |
Connected agents come first, then the ones that need attention, the ones still waiting for their registration and the revoked ones. Click a column header to sort the list by it and click it again to reverse the order; Status brings back the default order.
Trigger your first internal scan
With the agent Active, create a target whose URL resolves only inside your network. On the New Scan screen, the agent appears in the routing selector (Execution Mode). Pick it, configure auth if needed, and start the scan. Every analyzer routes its HTTP probes through the tunnel.
See Internal scanning for the full walkthrough.
Certificate rotation and revocation
Both are operator actions in the portal, no host change needed.
- Rotate. From the agent's row actions, click Rotate certificate. The portal issues a new certificate set; the agent picks it up on the next reconnect. The previous certificate is immediately revoked WASViking-side.
- Revoke. Click Revoke. The certificate is invalidated
immediately; the agent's status flips to
Revokedand the tunnel drops. The host record stays in the list for audit.
The client certificate also auto-rotates before expiry as defense-in-depth.
Update from the portal
From version 1.23.0, an agent installed from the Debian package can be updated from the portal. You choose the agents to update, and each one downloads, verifies and installs the new signed release by itself. No session on the host is needed.
Requirements
| Requirement | Detail |
|---|---|
| Installation | The agent was installed from the Debian package (.deb, amd64). |
| Version | 1.23.0 or later. An older agent, or one installed by other means, is upgraded once from the package. From then on it can be updated from the portal. |
| Connection | The agent is connected. Only connected agents can be updated. |
| Network | Outbound HTTPS from the host to download the package, the same requirement as registration and the tunnel. The package comes from a short-lived WASViking link. |
| Portal role | Organization admin, the same permission as Rotate Token. |
Update one agent or all of them
- Open Sentinel → Sentinel Agents and select the Scan Tunnels tab.
- Click Update on the agent row. To update every agent that can be updated, click Update all (N) in the tab header.
- Review the confirmation and confirm. The agent downloads the signed package, verifies it and installs it. Its tunnel restarts and reconnects in about a minute, and scans running through it pause until then.
The page refreshes by itself while the update runs, and the row follows it to the end. To avoid pausing a long internal scan, update the agent when no scan is running through it.
The update installs the standard Debian package, the same one you install by hand. The package manager on the host shows the new version, and the certificates and the configuration are kept:
dpkg -l wasviking-sentinel
Reading the Version column
On the Scan Tunnels tab, the Version column shows the version
each agent runs, for example v1.23.0, with a badge:
| Badge | Meaning |
|---|---|
| vX.Y.Z AVAILABLE | A newer release exists. The badge shows its version. |
| UP TO DATE | The agent runs the current release. |
| UPDATING TO vX.Y.Z | An update is running. |
| UPDATED | The last update completed. The badge stays for a day. |
| UPDATE FAILED | The last update did not complete. The cause appears under the badge, for example Download failed, with View details. The badge goes away once the agent runs that version or a newer one. |
The Scan Tunnels card at the top of the page counts the agents behind the current release, for example 2 UPDATES AVAILABLE (vX.Y.Z).
An agent older than 1.23.0 does not report its version. Its row shows Not reported and the note Update once from the package to enable remote updates. When an update is available but the agent cannot take it from the portal, a note under the badge says why, for example that the agent is not connected or that remote updates are turned off on that host. The agent's Details page shows the same information in its Remote updates line.
How remote updates are protected
- Only packages signed by WASViking are installed. The agent verifies the signature and the checksum of the package. A separate installer, which runs with administrator rights on the host, verifies them again before it installs anything.
- No downgrades. A package that is not newer than the installed version is refused.
- The agent stays unprivileged. The agent keeps running under its
own
wasviking-sentinelservice account. Only the installer runs with administrator rights, and only to install a verified package. - The host administrator decides. Remote updates can be turned off on any host, as described below.
Turning remote updates off on a host
An agent installed from the package accepts remote updates. A host administrator can turn them off on that host:
sudo systemctl mask wasviking-sentinel-update.path
The setting survives package upgrades. While remote updates are off, the portal shows that they are turned off on that host and refuses an update with that reason. Upgrades from the package keep working.
To turn remote updates back on:
sudo systemctl unmask wasviking-sentinel-update.path
sudo systemctl enable --now wasviking-sentinel-update.path
The check command has a Remote updates line that says whether the host accepts remote updates and how the last one ended. On a host where they are turned off:
[INFO] Remote updates
remote updates are turned off on this host (wasviking-sentinel-update.path is masked)
Next step: To allow them again: sudo systemctl unmask wasviking-sentinel-update.path &&
sudo systemctl enable --now wasviking-sentinel-update.path
If an update fails
The row shows UPDATE FAILED with the cause in plain words under the badge, for example Download failed or Package failed verification. View details opens:
- where the update stopped: requested, delivered to the agent, downloaded and verified, installed and reconnected;
- what happened, and whether the host was left as it was;
- the next steps for that cause, with the commands to run on the host and Retry update when the agent can take the update now;
- Technical details: a reference, the versions, the times and the original message, which Copy details for support puts on the clipboard for a support request.
On the host, the installer log and the check give the full detail:
sudo journalctl -u wasviking-sentinel-update -n 50
sudo /opt/wasviking-sentinel/wasviking-sentinel check
Fix the cause and click Update again, or upgrade from the package. When the download or a verification fails, nothing is installed and the agent keeps its current version.
Upgrade from the package
Use the package for an agent that cannot be updated from the portal: an agent older than 1.23.0, one installed by other means, or a host where remote updates are turned off. Download the new package from Get Agent and install it over the existing one:
sudo dpkg -i wasviking-sentinel_<new-version>_amd64.deb
sudo systemctl enable --now wasviking-sentinel
The upgrade keeps certs/ and configs/config.yaml, so the agent
does not need to register again. The second command makes sure the
service is enabled and running on the new version, and changes nothing
when it already is. Then confirm the tunnel with
sudo /opt/wasviking-sentinel/wasviking-sentinel check. Once the host
runs 1.23.0 or later from the Debian package, the next updates can run
from the portal.
If you added a local systemd override for an older version, for
example to run the agent as root, it is no longer needed: the current
version runs as the wasviking-sentinel account. The check reports
it as [WARN] Local service overrides and prints the exact command
that removes it.
Host and tunnel health
When scans through a private tunnel run slow or time out, start with that tunnel's details. Open Sentinel → Sentinel Agents, select the Scan Tunnels tab and click Details on the agent row. The Host and tunnel health section shows how the host is doing and how much scan work the tunnel is carrying.
What the agent reports
From version 1.24.0, the agent sends a report once a minute while its tunnel is connected. The report travels over the outbound connection the agent already uses, so there is nothing new to open in a firewall.
- The report carries numbers, plus the name of the host's operating system and its kernel version. The Details page shows them in its Operating system and Kernel lines.
- It carries no request or response content, no target data and no process list.
- Reports are kept for seven days.
- Host numbers are measured on Linux. An agent running on macOS, which is supported for local evaluation, shows only the agent and tunnel numbers.
On an older agent, the section reads Host and tunnel health needs a newer agent and sends you to the Sentinel Agents page to update it. See Update from the portal, or Upgrade from the package for a host that cannot take remote updates.
Tiles and charts
A status line says when the last report arrived. The tiles show the latest report:
| Tile | What it shows |
|---|---|
| Host CPU | CPU use on the host, with its number of cores. |
| Memory | Memory in use, with the host total. |
| Load (1 min) | The one-minute load average, with the load per core. |
| Disk | Space used on the filesystem that holds the agent directory. |
| Network in, Network out | Traffic on the network interface of the default route. |
| TCP connections | Sockets in use on the host. |
| Host uptime | Time since the host last started. |
| Tunnel busy | Share of time the tunnel spent executing scan requests, with the commands per minute. |
| Agent memory | Memory used by the agent, with its share of CPU. |
A tile turns amber or red when its value crosses a warning level.
The charts below the tiles follow the same numbers over time:
| Chart | Lines |
|---|---|
| Host CPU and memory | CPU, Memory |
| Network throughput | Received, Sent |
| Tunnel commands per minute | Commands, HTTP requests, Errors |
| Tunnel busy time and command duration | Busy, Average duration, Longest duration |
| Agent process | Memory, CPU |
| Host load and TCP connections | Load (1 min), TCP connections |
Switch the window between 1h, 24h and 7d. While the page is open, the charts refresh every minute. A gap in a line means the agent did not report during that time. Click a legend entry to hide or show its line.
Observations
Above the tiles, the section describes what it sees in plain language, mostly over the last 15 minutes:
| Observation | What it means and what to do |
|---|---|
| Healthy | No sign of pressure on the host or the tunnel. |
| Tunnel busy N% of the time | The agent runs one request at a time, so scans that share the tunnel wait for each other. Spread the targets across more agents, or schedule their scans apart. |
| N% of the commands failed | Most requests through the tunnel ended in an error. The targets refused the connection, timed out or could not be resolved from that host. |
| Host CPU at N% for 15 minutes | Requests through the tunnel slow down when the host has no CPU left. |
| Host memory at N% | With memory this tight, the host may start swapping or stop processes, the agent included. |
| Disk N% full | The filesystem that holds the agent directory is almost full. The agent writes its logs there. |
| Host restarted N ago | The tunnel came back on its own after the restart. |
| Tunnel reconnected N times in the last hour | The connection from the host to WASViking keeps dropping. Run the built-in check on the host to see where. |
| No report for N minutes | The platform still shows the tunnel as connected, but the agent stopped reporting. Check the service on the host with the same command. |
The built-in check runs on the host:
sudo /opt/wasviking-sentinel/wasviking-sentinel check
How to read it
- Tunnel busy near 100%. Scans are queuing on that agent. Install more agents that reach the same targets and spread the targets across them, or schedule the scans at different times.
- High host CPU or memory. The host needs more resources, or fewer other workloads running next to the agent.
- Repeated reconnections. The cause is on the network path between the host and WASViking. The check names the root cause and the next step. See Troubleshooting with the check command.
Uninstall
sudo systemctl disable --now wasviking-sentinel
sudo dpkg -r wasviking-sentinel
sudo rm -rf /opt/wasviking-sentinel
In the portal, Revoke the agent record so the certificate's CN is no longer accepted on the WASViking side.
Troubleshooting with the check command
check is a read-only diagnostic of the agent installation and of
the path from the host to the WASViking platform. Run it when an agent
stays Pending, goes Offline, or before you contact support:
sudo /opt/wasviking-sentinel/wasviking-sentinel check
Run it with sudo. Without elevation the check cannot read the agent
files, and the report says so.
Reading the report
The report opens with a verdict, the most likely root cause and the next step, given as an exact command or setting to change. For example, on a cloud instance whose outbound traffic is dropped:
VERDICT: FAIL
Root cause candidate: Tunnel endpoint TCP reachability. TCP connection to
sentinel.wasviking.com:443 failed: connection timed out; the packets are being silently dropped,
which is typical of a firewall, security group or egress filter.
Next step: Allow outbound TCP 443 to sentinel.wasviking.com:443: the instance security group
outbound rules, the subnet network ACL (including return traffic on ephemeral ports), the route to
a NAT or internet gateway, and any proxy or network firewall in the VPC.
The verdict is PASS, WARN or FAIL. Three sections follow, and
each finding in them is marked PASS, WARN, FAIL, INFO or
SKIP:
| Section | What it looks at |
|---|---|
| Agent installation | The configuration and the registration: certificate files present, certificates valid and consistent with each other. The host identity. The service: whether it runs or keeps restarting in a loop (with the last message from the service journal), and whether its service account can read its files. The tunnel state reported by the running agent, with its last error. Whether the host accepts remote updates, and how the last one ended. Local service overrides. |
| Platform connectivity | DNS and outbound TCP 443 to the tunnel endpoint (sentinel.wasviking.com) and to the API (api.wasviking.com). TLS inspection by a proxy or security product, which the check names when it recognizes it. The API answering through the WASViking edge. Host clock drift. The public egress address. Mutual TLS with the tunnel endpoint and the live tunnel test. |
| Local environment | Proxy variables of your session and of the service. VPN, Zero Trust and DNS filtering clients. On a cloud instance, where outbound traffic is decided: on Amazon EC2, for example, the security group outbound rules, the subnet network ACL, the NAT or internet gateway, and any proxy. |
Live tunnel test
When the agent's own tunnel is down, the check briefly opens the
tunnel with the agent's identity to confirm that the platform accepts
it. During those few seconds the portal shows the agent as Active.
A scan routed to the agent during the test is answered as not
executed; start it again afterward. Add --no-tunnel to skip the
test, or --tunnel to run it even when the agent reports its tunnel
up.
Support bundle
Each run writes two files in the current directory:
wasviking-sentinel-check_<host>_<timestamp>.json and
wasviking-sentinel-check_<host>_<timestamp>.txt. They are created
with mode 0600, belong to your account even when you run the check
with sudo, and contain no tokens or private keys. Send both files
to WASViking support: they let the team analyze the host without a
session on it.
Options and exit codes
| Option | Effect |
|---|---|
--out <dir> |
Write the support bundle to another directory. |
--json |
Print the report as JSON instead of text. |
--no-file |
Do not write the support bundle. |
--offline |
Run the local checks only, with no network probes. |
--no-tunnel |
Never run the live tunnel test. |
--tunnel |
Run the live tunnel test even when the agent reports its tunnel up. |
--config <path> |
Inspect another configuration file. |
--timeout <seconds> |
Overall time limit for the check (90 seconds by default). |
The exit code is 0 when the agent is healthy, 1 with warnings and
2 with failures, so a provisioning script can stop on a failed
check.
Common problems
| Symptom | What the check shows | Fix |
|---|---|---|
| Agent stays Pending, never registered | [FAIL] Registration (certificate bundle): the agent is not registered. |
Run the register command from Step 4 with the token from the portal. |
| Agent stays Pending after registering | [FAIL] Service account rights: the service cannot read its files. |
Run the command the check prints. It gives the agent directory back to the service account and restarts the service. |
| Agent stays Pending, endpoint unreachable | [FAIL] Tunnel endpoint DNS resolution or [FAIL] Tunnel endpoint TCP reachability. |
Allow DNS resolution of sentinel.wasviking.com and outbound TCP 443 to it. |
| Service restarting in a loop | [FAIL] Agent service: the service keeps exiting, with the restart count and the last message from the service journal. |
Fix the cause named by the other findings. To read more of the journal: sudo journalctl -u wasviking-sentinel -n 50. |
The journal says Tunnel down: no answer from sentinel.wasviking.com:443 within the connection timeout |
[FAIL] Tunnel endpoint TCP reachability: connection timed out. |
Outbound TCP 443 is dropped. Allow it in the host firewall, the cloud security group or network ACL, the NAT, and any proxy or egress filter on the path. |
| Certificate not signed by the WASViking private CA | [FAIL] TLS path integrity or [FAIL] Mutual TLS with the tunnel endpoint, naming the inspecting product when it is recognized. |
A proxy, firewall or endpoint security product is intercepting TLS. Exclude sentinel.wasviking.com and api.wasviking.com from TLS inspection. |
| The platform refused this agent | [FAIL] Live tunnel test: the agent was deleted or revoked in the portal. |
Create a new agent in the portal and register this host with its token. |
register returns 401 |
[FAIL] Registration (certificate bundle): still not registered. |
The bootstrap token was already used or expired. Use Rotate Token on the agent row, or create a new agent. |
| Certificate errors on a host with a wrong clock | [FAIL] Host clock accuracy. |
Enable time synchronization (NTP), then run the check again. |
| A local override is reported after an upgrade | [WARN] Local service overrides: the agent runs as root through an override made for an older version. |
Run the command the check prints. It removes the override and hands the files back to the service account. |
| UPDATE FAILED in the Version column | [WARN] Remote updates: the last remote update failed, with the version and the reason. |
Read the full installer log with sudo journalctl -u wasviking-sentinel-update -n 50, fix the cause and click Update again, or upgrade from the package. |
| The portal refuses the update because remote updates are turned off on the host | [INFO] Remote updates: remote updates are turned off on this host. |
A host administrator turned them off. Turn them back on as shown in Turning remote updates off on a host, or upgrade from the package. |
| Tunnel keeps dropping | A proxy, VPN or Zero Trust client listed under Local environment. | A proxy enforces an idle timeout. Confirm egress to sentinel.wasviking.com:443 and any HTTP/2-aware proxy in the path. |
If the verdict is PASS and the portal still shows the agent as
Pending or Offline, send the support bundle to WASViking
support.
