NuajProtect · Linux

NuajProtect on Linux servers

The NuajProtect Linux agent is a single static binary, run by systemd, that blocks malicious traffic in the kernel of the server it protects. It carries the same detection and intelligence engine as the NuajBridge appliance — the live global threat-intelligence feed, flood detection measured against the link's own baseline, port-scanner detection and repeat-offender escalation — and enforces the result through the fastest path the kernel offers: XDP/eBPF where it exists, nftables or iptables with ipset where it does not. There is no proxy and no extra hop: accepted traffic is forwarded by the kernel rather than reassembled by something in front of it.

In one sentence

One binary, one unit file,
drops in the kernel.

The NuajProtect Linux agent at a glance
What it is The NuajProtect Linux agent — a host-based edge filter with a global threat-intelligence feed behind it
Form One static binary, no runtime dependencies, run by systemd as an unprivileged system user
Architectures x86_64 and aarch64
Distributions Any Linux with systemd — Debian, Ubuntu, RHEL, Rocky, Alma, Fedora and derivatives
Enforcement XDP/eBPF where the kernel offers it; otherwise nftables, or iptables with ipset. Chosen by the agent at start-up, not configured
Placement Sentry — protects the host it runs on. Relay — protects what is behind it, directly or over GRE, WireGuard or IPsec
Addressing IPv4 and IPv6, both enforced
Paths /opt/nuajprotect for the binary and its configuration, /var/log/nuajprotect for logs
Service nuajprotect-agent under systemd; CLI on your PATH as nuajprotect
Local interface A break-glass console and API bound to 127.0.0.1, reachable when the control plane is not
Control plane Managed SaaS over mutual TLS, or a self-hosted control plane you run yourself
Price Free through the beta and for a full year after general availability

Enforcement

It takes the fastest path
your kernel actually has.

Three enforcement backends, one decision, made by the agent when it starts. You are not asked to know which one your kernel supports, and an older box is not left with nothing.

First choice

XDP / eBPF

The earliest point in the kernel a packet can be dropped — before it is allocated a socket buffer, before the network stack has spent anything on it. Where a driver supports XDP natively the drop happens in the driver itself.

Where BPF is unavailable

nftables

Sets and rules maintained by the agent, matched by the kernel. Later in the path than XDP, and still a kernel drop — what the rules match is dropped before your application is reached, and nothing is proxied on the way.

Older kernels

iptables + ipset

The long-term-kernel path. A 5.4-series kernel cannot do XDP, and that is not a failure to report — it is the case this backend exists for. The same lists, enforced by the tooling that box has.

What the backend does not change is the decision. The blocklist, the flood thresholds derived from your own link's baseline, the scanner strikes and the repeat-offender escalation are computed the same way wherever the agent runs; only the instruction handed to the kernel differs. A fleet with three kernel generations in it therefore enforces one policy, and the dashboard shows you which backend each endpoint chose.

Placement

Protect the host,
or what is behind it.

Sentry

The protection runs on the machine it defends. Traffic to and from that host is filtered in its own kernel, and software on the host can hand the agent an attacker it spotted at the application layer. This is the default for a public-facing server or VM, and the fastest thing to try: one install, no change to how anything is routed.

Relay

A forwarding gateway cleans traffic on its way to services that never see the raw internet. They can sit directly behind it or at the far end of a tunnel — GRE, WireGuard or IPsec — so the protected addresses need not be exposed at all. One relay covers appliances, embedded systems and anything else that cannot run an agent of its own.

Both are the same binary and the same account. An endpoint's type and its placement are two separate settings, and the combinations that are not possible are listed as unavailable rather than offered and then rejected at setup. Where a whole network needs covering with nothing installed on any of it, that is the NuajBridge appliance instead.

Install

What it puts on your server,
and nothing else.

The installer is a shell script, served over TLS, and your account gives you the exact command for the endpoint you are adding. Download it, read it, then run it — piping a script straight into a shell means running something you have not seen, and this one needs root.

# fetch, read, then run — never pipe a script you have not seen into a shell
curl -fsSL <the installer URL from your account> -o nuajprotect-install.sh
less nuajprotect-install.sh
sudo bash nuajprotect-install.sh

What it leaves behind

  • /opt/nuajprotect/bin — the agent binary, fetched over TLS and checked against the SHA-256 published beside it.
  • /opt/nuajprotect/config — the agent's configuration and the credentials it presents to the control plane.
  • /var/log/nuajprotect — logs, alongside the journal.
  • A system user named nuajprotect, with no home directory and no shell.
  • A systemd unit, nuajprotect-agent, running as that user with a fixed capability set rather than as root — CAP_NET_ADMIN, CAP_NET_RAW, CAP_BPF and CAP_SYS_ADMIN, the last of which the kernel still requires for some BPF map operations.
  • The CLI on your PATH as nuajprotect, with shell completion.

Then it is a normal service

systemctl status nuajprotect-agent
journalctl -u nuajprotect-agent -f
nuajprotect status

The agent authenticates to the control plane with mutual TLS, so an endpoint is a certificate rather than a shared secret in a config file, and enrolment is done from your NuajProtect account. Run it watching before you run it blocking: monitor mode, the allowlist and the per-endpoint activity view exist because any filter can misjudge unusual but legitimate traffic, and the time to find that out is before it is dropping it.

Application reporting

Your software sees what
a packet filter cannot.

Credential stuffing inside valid sessions. A scraper that behaves until it doesn't. An API key being walked one identifier at a time. None of it looks wrong on the wire — and all of it is obvious to the application it is happening to.

Because the agent runs on the host, your own software can hand it an address it has judged hostile, over a local interface bound to 127.0.0.1 that nothing off the machine can reach. The agent enforces it in the kernel immediately. The report also travels: what one protected edge works out, the account's other edges enforce, and — where the evidence is strong enough — the global intelligence feed carries it to everyone else.

That same local interface is the break-glass path. If the control plane is unreachable, the agent keeps enforcing what it already knows and you can still see and change what it is doing, from the console on the loopback address. A protected server does not stop being protected because a network between it and us is having a bad day.

Upgrades

A build it will not run
is a build it does not install.

The agent upgrades itself when the control plane offers a newer build, and every release is signed. The signature is verified before anything is replaced; if it does not check out, the upgrade is refused and the running build stays. A self-upgrading fleet is only as trustworthy as the answer to "what exactly is it allowed to install", and that is the answer.

Upgrades are also held back while a configuration change is still settling, so no box restarts into a new build and a new policy in the same moment — the two events are separated deliberately, because a fleet that changes both at once cannot tell you which one caused what.

Questions

Before you install it.

Which Linux distributions does NuajProtect support?
The agent is a single static binary with no runtime dependencies, so it runs on any distribution using systemd — Debian, Ubuntu, RHEL, Rocky, Alma, Fedora and their derivatives are the ones we install on daily. Architectures are x86-64 and arm64. What differs between distributions is not whether it runs but which enforcement path it finds: the agent detects that at start-up rather than being told.
Does NuajProtect need a kernel that supports XDP?
No. XDP/eBPF is the fastest path and the agent takes it when the kernel offers it. Where it does not — an older long-term kernel, a container host that does not expose the BPF filesystem — the agent enforces through nftables, or iptables with ipset, and keeps working. That is the designed fallback rather than a degraded install: the drops still happen in the kernel, just further along the packet's path.
How much CPU does the NuajProtect Linux agent use?
The agent is not in the data path. Accepted traffic is forwarded by the kernel rather than reassembled by a proxy, and what the agent itself does is maintain the tables the kernel matches against — syncing the blocklist, evaluating detections, reporting what it blocked. That work is periodic rather than per-packet, which is the property to reason about: it is a background service on the box, and how much it costs depends on your traffic and your hardware, so measure it on yours.
What does the installer put on the server?
One directory, /opt/nuajprotect, holding the binary and its configuration; a log directory at /var/log/nuajprotect; a system user with no home directory and no shell; a systemd unit named nuajprotect-agent that runs as that user with a fixed capability set rather than as root (CAP_NET_ADMIN, CAP_NET_RAW, CAP_BPF and CAP_SYS_ADMIN, which the kernel still requires for some BPF map operations); and the CLI on your PATH as nuajprotect. Nothing is written outside those paths.
Can an application on the server report an attacker to NuajProtect?
Yes, and it is one of the reasons to run the agent on the host rather than only in front of it. Your own software sees abuse a packet filter cannot — credential stuffing, a scraper inside a valid session, an API key being walked. It hands the local agent the address, the agent enforces it, and the account's other protected edges learn from it.
How does the agent upgrade itself?
It fetches a new build only when the control plane offers one, verifies the release signature before anything is replaced, and refuses the upgrade if the signature does not check out. An upgrade is also held back while a configuration change is still settling, so a box is never restarting into a new build and a new policy at the same moment.

Running MikroTik at the edge as well? The same account manages NuajProtect on RouterOS, and every deployment — agent, router or appliance — is a sensor as much as an enforcement point.

Get started

Protect a server
in minutes.

The service is free through the beta and for a full year after general availability. Start with one exposed box; everything you protect lives in the same account.