FortWatch.ai
Server Agent

Your servers, from the outside and the inside

FortWatch’s scanners see your servers the way an attacker does, from the internet. The optional FortWatch Server Agent, a small read-only program on your Linux servers, sees what runs inside them: vulnerable packages, who can log in, which ports listen, their Docker containers, and how much room each disk has left. Every problem becomes an issue beside your outside-scan issues.

Ubuntu · Debian · Alpine · Rocky Linux · AlmaLinux · Red Hat Enterprise Linux

web-01

Ubuntu 24.04 LTS · Production

Online

Problems

5

1 critical

CPU busy

12%

load 0.4 on 4 cores

Memory used

61%

of 8 GB

Fullest disk

84%

/var · 6 GB free

Accounts with no password

no password set for deploy

Critical

openssl: 4 known vulnerabilities fixed by an update

3.0.13-0ubuntu3.1 installed; 3.0.13-0ubuntu3.4 fixes it

High

PostgreSQL listening on every address

PostgreSQL listens on 0.0.0.0:5432, every address of the server; a firewall may still block it

High

SSH allows root to log in with a password

PermitRootLogin yes

High

Reboot pending after updates

updated kernel or libraries wait for a reboot (/run/reboot-required)

Low

Each one is also an issue on the Issues page, with its fix and deadline.

Installed in two commands

Any Linux server on amd64 or arm64 with systemd. The agent reports out over HTTPS and nothing connects to your server, so there is no port to open and no SSH access to give.

1

Add the server

On the Servers page, click Add server, name it and pick its project. FortWatch shows the server's token once.

2

Run the installer

Download the installer and run it as root. It checks the agent against its published SHA-256, creates the agent's own account, asks for the token and starts the service.

3

Read its problems

The first report arrives within a minute. The server's page shows its problems with the fix for each, its health, packages, open ports, containers and accounts.

$ curl -fsSL https://fortwatch.ai/agent/install.sh -o fortwatch-install.sh$ sudo sh fortwatch-install.sh

The installer is a short shell script: read it first if you like. With Ansible, cloud-init or Terraform, pipe the token on standard input instead of typing it. Each server gets its own token.

Health every minute, a full check every hour

The minute reports draw the health graphs for the last hour, day and week. The hourly check reads the server’s packages, open ports, login accounts, SSH settings and Docker containers, and every check below runs on it.

Every minute: health

  • Load and CPU use
  • Memory and swap
  • Every disk's space and inodes
  • The 10 processes using the most memory

Every hour: a full check

  • Installed packages, matched against your distribution's own security advisories
  • Open ports, with the address and user each one listens as
  • Login accounts and their SSH keys
  • SSH settings: root login, passwords, empty passwords
  • Accounts with root's powers, or with no password
  • A pending reboot, and automatic security updates
  • Docker containers, from Docker's own files: privileged, the Docker socket, published ports
  • Whether your release still gets free security updates

Every problem, an issue you can act on

Each problem lands on the Issues page beside the issues from your outside scans, with what the agent saw, the fix in plain words and a deadline, ready to assign. A vulnerable package comes with its CVEs, the version to install and the command that installs it.

  • Vulnerable packages

    An installed version with a known vulnerability an update fixes, with its CVEs, the version to install and the command.

    From the advisory
  • SSH empty passwords

    SSH accepts an empty password.

    Critical
  • Extra root account

    An account other than root holds root's powers.

    Critical
  • Account with no password

    Anyone can log in as it.

    Critical
  • SSH root login

    Root may log in with a password.

    High
  • Database listening on every address

    MySQL, PostgreSQL, Redis, MongoDB, Elasticsearch and others listening beyond the machine and its private network. Critical when your outside scan finds it open, low when a firewall blocks it.

    Critical, high or low
  • Database published by Docker

    A running container publishes a database port on every address, and Docker's rules bypass ufw and firewalld. Rated by the outside scan the same way.

    Critical, high or low
  • Privileged container

    A running container runs privileged, with every device and capability of the server.

    High
  • Docker socket in a container

    A running container mounts the Docker socket, which gives it control of Docker and the server.

    High
  • Release end of life

    The release's free security updates have ended, or end within 90 days. An Ubuntu LTS release on Ubuntu Pro counts as covered.

    High or medium
  • Disk space

    A disk 90% full, high at 95%.

    Medium or high
  • Inodes

    A disk that has used 90% of its inodes, its file slots.

    Medium
  • SSH passwords

    SSH accepts passwords, not keys alone.

    Medium
  • Memory

    Less than 10% of memory available.

    Medium
  • Reboot pending

    An updated kernel or libraries waiting for a restart.

    Low
  • Automatic security updates

    A Debian or Ubuntu server that does not install them.

    Low

FortWatch also watches what changes

These come from what FortWatch keeps between reports: when the last one arrived, the readings of the last six hours, and every port, account and key it has seen. A high one alerts at once.

  • Server silent

    No report for five minutes: the server, its network or its agent is down. Closes with the first report back.

    High
  • Disk filling

    A disk that has grown steadily for two hours and fills within a day at that rate. A one-off copy does not count.

    High or medium
  • New login account

    An account that can log in, first seen in the last day.

    High
  • New SSH key

    A key added to an account's authorized_keys in the last day.

    High
  • New open port

    A port open beyond the machine itself, first seen in the last day.

    Medium
  • Memory growth

    A process whose memory has risen in a straight line for three hours, by a quarter and 256 MB at least, and still rises.

    Medium

Alerts where you work

A critical or high problem alerts in the app and by mail, like any issue. Connect Slack or a webhook for alerts, and Jira, Linear, Notion or WebWork for tickets, with the rules you set.

New advisories every hour

FortWatch reads the distributions' new advisories every hour and matches every server on a changed release again at once, without waiting for its next report.

Closes when it's fixed

Update the package or turn off root login, and the next full check sees it pass. The issue closes by itself within about two hours, and reopens if the problem returns.

See which ports the internet really reaches

FortWatch’s port scan sees which ports answer from the internet. The agent sees which programs listen on the server, and on which addresses. Link the server to its IP or domain assets, which FortWatch proposes from the server’s own addresses, and every listening port says whether the internet reaches it.

Open, blocked or local

Open: the outside port scan found it. Blocked: a scan of every TCP port did not, so a firewall stops it. No: it listens only on the machine or its private network.

Severity that follows the internet

A database on every address is critical when the outside scan finds it open and low when a firewall blocks it. A database a container publishes is rated the same way.

The outside issue, explained

An open-port issue from the outside scan names what holds the port on each linked server, the program and its user, with the fix for that program. A port open with nothing listening names the Docker container that publishes it.

web-01 · Open ports

Linked to 203.0.113.10 · full port scan today

From the internet
22/tcp

sshd

root · 0.0.0.0

Open
443/tcp

nginx

root · 0.0.0.0

Open
5432/tcp

postgres

postgres · 0.0.0.0

Blocked
6379/tcp

redis-server

redis · 127.0.0.1

No
8125/udp

statsd

statsd · 0.0.0.0

Not checked

Open outside, with nothing listening here

8080/tcp  published by container shop-web-1

image acme/shop:2.4 · Compose service web

Built so a break-in at FortWatch can’t command the agent

An agent on your server must never become a way in. This one sends reports and reads nothing back but a status code, so FortWatch, hacked or not, cannot make it do anything but read and report.

It only reads

The agent changes nothing on your server. It reads the files its checks need and sends a report. That is all it can do.

It takes no orders

It sends reports and reads nothing back but the status code. FortWatch cannot make it run a command, read another file, change a setting or update itself.

Your settings, your file

How often it reports and which checks it skips live in a file on your server, /etc/fortwatch-agent/agent.conf. FortWatch cannot change it.

See what is sent

sudo fortwatch-agent -print collects a full report and prints it on your screen. It sends nothing.

Results, not files

/etc/shadow and your SSH settings are read on the server and only each check's result leaves. An SSH key travels as its fingerprint, the machine id as a hash.

Least privilege

It runs as its own user with one power, reading files. systemd locks the rest: the machine read-only to it, no new privileges, 128 MB of memory and 10% of one CPU at most.

Updates you control

The agent never updates itself. Running the installer again is the update, when you choose, and it installs the agent only when the download matches its published SHA-256.

Gone in one command

sudo sh fortwatch-install.sh --uninstall removes the service, the program, its settings, its token and its account. Then remove the server in FortWatch.

What leaves your server

  • Host: hostname, a hash of the machine id, OS, kernel, architecture, uptime, a pending reboot, and the machine's own IP addresses
  • Health: CPU, load, memory and swap, each disk's mount, sizes and inodes, and the 10 processes using the most memory, by name and user
  • Inventory: packages and their versions; listening ports with their address, user and, when readable, program; the accounts that can log in, have uid 0 or hold SSH keys, with their shell and key fingerprints
  • Docker containers: id, name, image, Compose project and service, state, user, privileged, host network or processes, added capabilities, the Docker socket mounted, published ports
  • Each check's result: pass or fail, its severity and one line of evidence
  • The name of any reader that failed, with its error, such as shadow: permission denied

What never does

  • File contents
  • Password hashes
  • Keys
  • Command lines
  • Environment variables
  • Process memory
  • Logs
  • Network traffic

Anything not on the first list never leaves. The reports travel over HTTPS, and your server’s token works only for that one server.

Only want the outside view? The server hardening audit and the rest of FortWatch’s 13 scanners need nothing installed. The agent adds the inside of the servers you choose.

Frequently asked questions

Answers to the most common questions about the FortWatch Server Agent.

What is the FortWatch Server Agent?+

A small read-only program for Linux servers. It reports the server's health every minute and a full check every hour: installed packages with known vulnerabilities, open ports, login accounts and SSH keys, SSH settings, Docker containers, disk and memory. FortWatch also says when the server's release stops getting free security updates, and turns every problem into an issue beside the issues from its outside scans.

Do I need the agent to use FortWatch?+

No. FortWatch's 13 scanners work from the outside and need nothing installed. The agent is optional: add it to the Linux servers where you also want the inside view. A team that runs only on Vercel or Cloudflare has no server to install it on and keeps the outside scans.

Can FortWatch run commands on my server through the agent?+

No. The agent only sends reports. It reads nothing from FortWatch's answer but the status code, follows no redirect, and cannot be told to run a command, read a file its checks do not need, change a setting or update itself. Someone who broke into FortWatch could read the reports already sent, but could not make an agent do anything.

What data leaves my server?+

Host facts (hostname, a hash of the machine id, OS, kernel, uptime and the machine's IP addresses), health readings, the package list, listening ports, the accounts that can log in with their SSH key fingerprints, each Docker container's name, image, Compose service, state, user, privileges and published ports, each check's result with one line of evidence, and the name of any reader that failed. Never file contents, password hashes, keys, command lines, environment variables, logs or network traffic. Run sudo fortwatch-agent -print to see a full report on your screen.

Does it show which ports the internet can reach?+

Yes, once the server is linked to its IP or domain assets in FortWatch; FortWatch proposes the assets at the server's own addresses and you confirm each link. Each listening port then shows Open when the outside port scan found it, Blocked when a scan of every TCP port did not, No when it listens only on the machine or a private network, and Not checked when no scan decides it. Ports open from outside with nothing listening on the server are listed too, with the Docker container that publishes each.

Will FortWatch tell me when a server goes down?+

Yes. A server with no report for five minutes becomes a high problem and alerts like any issue; the first report back closes it. FortWatch also alerts when a disk will fill within a day at its current rate, when a process's memory keeps growing, and when a new open port, login account or SSH key appears.

Which Linux distributions does it support?+

Any Linux on amd64 or arm64; it reads packages from dpkg, rpm or apk. Vulnerable packages are matched against the distribution's own security advisories for Ubuntu, Debian, Alpine, Rocky Linux, AlmaLinux and Red Hat Enterprise Linux, and the same six get the end-of-life notice. On other distributions every other check runs. The installer starts the agent as a systemd service; on a machine without systemd, install it with --no-start and run it under your own supervisor.

How much does it use on the server?+

Under 7 MB on disk. The systemd service is capped at 128 MB of memory and 10% of one CPU, and runs at low priority. It needs outbound HTTPS on port 443, to fortwatch.ai for the download and api.fortwatch.ai for the reports, and nothing connects to your server.

How do I update or remove it?+

Run the installer again to update: it replaces the program and keeps your settings and token. Then run sudo systemctl restart fortwatch-agent to start the new version. The agent never updates itself. To remove it, run sudo sh fortwatch-install.sh --uninstall, which removes the service, the program, its settings, its token and its account; then remove the server in FortWatch.

Ready to secure your stack?

Secure your entire stack today

Start scanning in under 5 minutes. No credit card required. 7-day free trial included.