Active Defense

Cut off attackers in a second. Never a customer.

Demerzel already reads your web and SSH logs to explain incidents. Active Defense acts on them: a scanner looking for your .env is blocked about a second after asking — with guardrails you can verify, one rule at a time.

~1 sfrom a /.env probe to a block, measured end to end
763,000real requests replayed over two months to calibrate the rules
82 / 0attackers that would have been banned / legitimate visitors
107the server load that started it all — on 8 vCPU

Why it exists

One scanner, 26 sites, a server on its knees.

It took one automated scanner sweeping every site on a shared server to push its load from 1 to 107. Every request was a PHP render the cache could not help with. Demerzel rebuilt the whole incident from the logs — cause, impact, timeline — without anyone opening a log file. Active Defense is what makes the next one a non-event.

app.demerzel.cloud

The rules

Six rules, each one explainable.

No black box and no scoring model: every block names the rule that fired and the requests that fired it.

RuleDoesWhen an address…
S1-secret-probeBanAsks, even once, for a secret no site ever serves: .env, .git/, cloud credentials, a config backup, phpunit’s eval-stdin.
S2-cms-probeBanFails three times to find software the server does not run: WordPress login or admin on a non-WordPress site, phpinfo, xmlrpc, actuator. What the server serves never counts.
spread-vhostsBanHits more than 8 of the server’s sites within 10 minutes. A real visitor stays on one.
rate-dynamicThrottleSends over 300 dynamic requests in 2 minutes across your sites. Static assets do not count.
error-ratioThrottleGets a 4xx on more than 60% of at least 50 requests in 10 minutes: the shape of a fuzzer.
ssh-bruteforceBanFails 10 SSH logins within 10 minutes.

Bans climb a ladder: a first offence is short, a repeat is longer. Throttles slow an address down instead of shutting it out.

Guardrails

Built by people afraid of blocking their own customers.

Shadow by default

A fresh install blocks nothing. Every decision is checked and recorded, so you see what would have happened first.

Replay before you enforce

Run a rule against your own logs — at least a day and a thousand requests. It is enforced only if it would not have touched a legitimate visitor, and only in the exact version you replayed.

You are never blocked

Addresses logged in over SSH are protected automatically, and an allow list with notes covers the rest: your office, your monitoring, your partners.

Hard caps

At most 30 new blocks a minute, a bounded set size, a maximum ban length — and no address carrying over 10% of the hour’s traffic, however it behaves.

A rule that errs demotes itself

If a rule starts blocking what it shouldn’t, it falls back to shadow on its own until a new replay clears it.

One-command kill switch

demerzel-warden kill-switch on stops everything at once. And if blocks ever pile up past the caps, the warden freezes itself rather than keep going.

How it runs

The agent decides. The warden acts. Root sets the limits.

  • The agent reads the logs and writes its decisions to a local spool. It still opens no port and changes nothing.
  • The warden — separate binary, no network, standard library only — checks each decision against the policy and applies it to its own nftables table.
  • The policy is a file only root can write. The warden refuses anything outside it, and says why.
  • Demerzel shows every block in the address’s dossier, next to the evidence — and lets you lift it everywhere in one click.

FAQ

The questions a careful sysadmin asks.

Does the agent get root, or a way to run commands?

No. The agent stays read-only and outbound-only. Blocking is done by the warden — a separate, small program with no network access, which reads a policy only root can write and whose only tool is nft, on its own table. You can audit it in one sitting.

Do I need nftables?

The warden needs the nft command. Debian and Ubuntu servers running iptables-nft already have the kernel side; if only the command is missing, the installer adds it. It never enables the nftables service or touches your existing rules.

What about fail2ban?

Keep it. If you grant it, Demerzel reads fail2ban’s bans as evidence too, so an address’s dossier shows everything that was done about it, whoever did it.

What are fleet decisions?

Early access. When a server bans an attacker, your other servers can ban it too — and an unban from the dossier lifts it everywhere. Each decision is signed with your organization’s key, and a warden applies only what is signed by a key root explicitly trusted on that host.

Let it watch in shadow for a week.

Install the agent, add the warden, and read what it would have blocked. Enforce when you are convinced — not before.

14-day free trial · No credit card required