Graften Docsgraften.io
Docs / Knowledge Base / Site appliance (early access)

Site appliance (early access)

On-Prem Agent

Status: early access. Every collector is built and tested against simulated devices, but the appliance has not yet been run on a real client site, and its image is not yet available to download. Graften provides it to founding partners directly. Until it has run on real sites, treat what it reports as evidence to check, not a result to rely on.

What it is

A small virtual machine you run on a client's network (Proxmox or KVM, Hyper-V, or VMware). It reads security settings from the client's devices and sends Graften the results. Graften's cloud service can't reach a private network; the appliance can.

Use it when a client has servers, a domain, firewalls or switches worth reading from one place. The On-Prem Agent stays the better fit for a small client: it runs on each machine instead.

Rules it follows

Pairing

  1. In the portal, open the client, then Connections and Site appliances, and click Create pairing code. The code is shown once and expires after 24 hours.
  2. Start the appliance and, on its console, choose Pair with Graften. Enter the code, the address ranges it may contact, and the never-touch list.
  3. The appliance appears under Site appliances for that client.
  4. Click Collector settings on it and choose what it collects (see below).

Run the appliance on a host that is always on: a server, NAS or hypervisor that never sleeps. On a laptop or desktop that sleeps, the VM is frozen while the host sleeps, so the appliance stops reporting, and machines it reads can wake with their clocks hours out. On Hyper-V, give the VM fixed memory (2 GB) rather than Dynamic Memory, and bind its virtual switch to a wired adapter rather than Wi-Fi.

There is no SSH or shell login. The console menu covers status, network settings, pairing, the approved ranges and never-touch list, restart and shut down, so whoever can open the VM's console in the hypervisor administers the appliance.

What it read

Click Readings on an appliance to see, for each host, every reading from its latest run exactly as read, or "not measured" with the reason. Use it to check a value against the machine. Under the appliance, Could not measure lists the readings it could not take and why (for example a host that refused the sign-in). Neither counts as passed or failed. When you remove a host or turn a collector off, its readings stop counting straight away.

Collector settings

Choose what an appliance collects in the portal: open the client's Site appliances and click Collector settings. Turn on each collector you want, add its hosts and the read-only account it signs in with, and click Save and send to the appliance. The appliance checks for new settings every two minutes. It checks them before using them, runs every collector once straight away, and the page shows whether the settings are running or why the appliance refused them. Anything it could not collect appears under Could not collect.

What it collects

It reports its own status every hour. Collectors that sign in to the client's systems (Windows, Active Directory, network devices, firewalls, Linux, network services, discovery and the exposure scan) run once a day, backups every 6 hours and hypervisors every 12. Each schedule can be changed per collector.

CollectorReadsHow
WindowsHost security settingsPowerShell over a restricted, read-only endpoint (JEA)
Active DirectoryPassword, lockout and account policyLDAPS, StartTLS, or Kerberos (signed and sealed)
Network devicesDescription, uptime, default SNMP community, SSH and Telnet managementSNMPv3 and checks made before signing in
FirewallsFirmware, management exposure, admin restrictions, logging, any-any rulesThe vendor's API: Fortinet, Sophos, SonicWall, Palo Alto, Juniper, Check Point and Cisco (FMC)
Network servicesTLS versions and certificates, NTP, DNS zone transferProtocol checks
Linux hostsUpdates, firewall, disk encryption, superusers, time, loggingA fixed read-only script over SSH
Log receiverWhich listed devices are sending syslogListens on port 514 and keeps only when each was last heard
BackupJob results, encryption, offsite or immutable copiesVeeam's API
HypervisorsOutstanding updates per hostProxmox VE's API
Discovery (off by default)Which approved addresses answer on common portsPlain connections, nothing sent
Exposure scan (off by default)Hosts accepting connections on clear-text service portsPlain connections, nothing sent

Not yet supported: WatchGuard and Forcepoint firewalls, and macOS hosts.

Domain controllers without a certificate can be read with the Kerberos connection. The account's password is never sent: it is used only to get a Kerberos ticket from the domain controller being read, on TCP port 88 at the same approved address. The domain controller must prove its identity, and everything after sign-in is encrypted; if the domain controller does not offer an encrypted session, the appliance stops rather than read in clear. Only AES is used. Enter the domain controllers' DNS names (such as dc1.corp.example.com), not addresses, and keep the appliance's clock within five minutes of the domain's. Kerberos needs appliance version 0.2.2 or later, and has been tested against Windows Server 2025 and Samba domain controllers.

Domain controllers with a certificate from the domain's own certificate authority (Active Directory Certificate Services) can be read over LDAPS or StartTLS. Export the authority's certificate in Base-64 (PEM) form and paste it under Certificate authority in the Active Directory settings. Only certificates are accepted: Graften refuses a private key, and a domain controller's own certificate. The appliance still checks each domain controller's name against its certificate. This needs appliance version 0.2.5 or later.

Use a read-only account for every device it signs in to. Each collector's setup lists the role to use.

Windows hosts

Each Windows host needs Graften's read-only endpoint (the Windows endpoint package, downloaded from the appliance's Windows hosts settings in the portal; one host at a time with Install-GraftenJea.ps1) and a collection account with no administrator rights. The appliance can run only the one read-only command the endpoint offers.

Treat the collection account like any other service account, and the same goes for every account the appliance signs in with: keep it under the client's normal password policy rather than exempting it. (Graften flags administrator accounts whose passwords never expire, and the same reasoning applies.) When its password changes, enter the new one in the appliance's settings in Graften; the next collection uses it. Until then the old password is refused, and the appliance tries it at most once a day so it never locks the account out. Readings it cannot take are shown as not assessed, never as passed, and a failure it measured before still counts for up to 8 days.

Use HTTPS on real sites: install with -EnableHttps, which sets WinRM to listen on port 5986 and prints the certificate's SHA-256 fingerprint. In Collector settings, tick Use HTTPS and enter each host with its fingerprint; the appliance then accepts that certificate and no other. Over plain HTTP (port 5985) the sign-in method protects the traffic only with a weak cipher (RC4). Allow the WinRM port from the appliance's address only, and give the appliance a fixed address.

On machines managed by Intune or a security baseline, local accounts are often not allowed to sign in over the network ("Deny access to this computer from the network"). Use a domain account there, or the Graften on-premises agent. Do not loosen the baseline for Graften. Laptops that are rarely on the office network are better covered by Intune through the client's Microsoft 365 connection, which needs nothing installed.

Windows 11 and other client editions are supported, tested on Windows 11 (build 26300) joined to a domain. Client editions block scripts by default; the endpoint allows its own signed-in session to load Graften's module and leaves the computer's execution policy unchanged. Use appliance 0.2.6 or later. A computer without BitLocker installed (most servers) is reported as not measured for disk encryption, never as encrypted.

Setting up every computer in a domain

Deploy-GraftenJea.ps1, in the same package, sets up the endpoint on each computer at startup, from a Group Policy startup script or your RMM tool, so nothing is installed by hand. It is safe to run at every startup: it changes nothing unless the package, the group or the appliance's address changed, and records each run in the Application event log (source Graften: 100 up to date, 101 installed or updated, 900 failed, with the reason). It turns PowerShell remoting on only where it is off, and then switches Windows' own WinRM firewall rules off again, so port 5985 is open to the appliance's address only. It never stores a password.

  1. Download the package from the portal, check its SHA-256 with Get-FileHash, and copy the files in its GraftenJea folder to \\<domain>\NETLOGON\GraftenJea on a domain controller.
  2. Create a group, for example GraftenCollectors, with the collection account as its only member and no other rights.
  3. Create a Group Policy object linked to the OUs that hold the computers. To read domain controllers too, link it to the Domain Controllers OU as well; don't move them out of it.
  4. Under *Computer Configuration → Policies → Windows Settings → Scripts → Startup → Scripts*, add powershell.exe with these parameters: -NoProfile -NonInteractive -ExecutionPolicy Bypass -File \\<domain>\NETLOGON\GraftenJea\Deploy-GraftenJea.ps1 -CollectorGroup "<DOMAIN>\GraftenCollectors" -ApplianceAddress <appliance IP>. Use double quotes in this box: single quotes are passed on as part of the value. The execution policy applies to this one run only.
  5. Each computer sets itself up at its next restart. With an RMM tool, copy the three files to the computer and run the same command as SYSTEM; exit code 0 means done or already up to date.

This sets up HTTP (port 5985). HTTPS needs each computer's certificate fingerprint entered in Graften, so it is not part of the domain-wide setup yet.

Then, in the appliance's Windows hosts settings, tick Read every Windows computer in the domain instead of listing hosts (appliance 0.2.7 or later, with Active Directory set up). Each collection lists the enabled Windows computers that signed in within the stale-account period (90 days unless you change it), up to 2,000 per domain, and reads those inside the approved ranges. Computers outside the ranges are counted and reported, never contacted.

Discovery and the exposure scan

These are the only collectors that contact every address in the approved ranges, which is why both are off until you switch them on. They open plain connections gently (one at a time per address, with pauses) and never test a password or a vulnerability, but some fragile devices still misbehave when contacted on ports they don't expect.

Before switching either on:

If something misbehaves, add the device to the never-touch list on the console (the firewall blocks it as soon as you save), or choose Shut down to stop everything at once. Then tell us at support@graften.io with the device's make and model.

In the portal

Each appliance shows Reporting, Not reporting (nothing for over two hours), Never reported or Revoked, with its version, waiting operating system security updates (or "not reported"), and a Could not collect list naming each device or collector that failed and why.

Revoke stops the appliance sending anything more. What it already sent stays as evidence.

How results are used

Results feed the compliance controls they're mapped to, always as partial coverage. They never overwrite a verdict you or another automation recorded. Backup and hypervisor results join BC/DR and the Patch Dashboard as one more source.

Updates

Under Site appliances, Account update window sets the default for every appliance, and Update window on one appliance overrides it:

Network

Outbound, the appliance reaches the approved ranges and Graften's API over HTTPS. Inbound, it accepts nothing except replies, DHCP, ping and syslog (port 514) from the approved ranges. Collector settings come over the same outbound connection: the appliance asks Graften for them, and Graften never connects to it.

Open in the interactive docs