Bans at the firewall
Attackers are dropped by nftables before they reach SSH, your web server, or PHP. Warden keeps its rules in its own table and never touches yours.
Witen Warden for Linux
Warden reads your SSH and web server logs and bans attackers with nftables. Three failed SSH logins in five minutes earns a one-hour ban, and every ban comes with its reason. Free, with no account.
curl -fLO https://www.witenlabs.com/api/releases/warden/artifacts/witen-warden_0.1.48-1_amd64.deb
sha256sum witen-warden_*.deb # compare with https://www.witenlabs.com/docs/warden#choose-build
sudo apt install ./witen-warden_*.deb
sudo warden discover
sudo sed -i 's/^backend = "nft"$/backend = "null"/' /etc/witen/warden.toml # observation mode
sudo warden validate --config /etc/witen/warden.toml
sudo systemctl enable --now witen-warden
sudo warden tuiStart in observation mode: Warden logs what it would ban without touching your firewall.

Version 0.1.48 · Debian, Ubuntu, RHEL-family, and Alpine packages, plus portable glibc and musl builds · Free. No account needed to download.
Coming from another tool? Compare it with Fail2Ban or CrowdSec.
Run warden tui on the server to watch attacks arrive, see which addresses are close to a ban, and read the exact rule and score behind every ban. It runs over SSH, with no browser and no account.




Screens show a demonstration host with synthetic attack traffic from documentation address ranges.
You're putting a closed-source binary on your server, so here is exactly what it can touch.
Attackers are dropped by nftables before they reach SSH, your web server, or PHP. Warden keeps its rules in its own table and never touches yours.
If a banned address keeps hammering, its ban doubles each time, up to a week. Returning attackers trip the wire sooner.
Every ban expires on schedule and survives restarts, so your firewall never fills with stale entries.
warden blocked shows each banned address, what it did, and which rule caught it. One command lifts a mistaken ban.
Witen's WordPress and Matomo plugins report to Warden over a local socket, turning application-level attacks into firewall bans.
Optional TLS ClientHello capture records a JA4 fingerprint with each event, so you can see which requests came from the same kind of client.
Reads OpenSSH through journald, and nginx, Apache, Caddy, Cockpit, and container logs. Local detection and bans need no account; connect one to add shared blocklists.
Start Warden in observation mode with backend = "null" in the [jail] section. It detects and logs exactly what it would ban, without touching the firewall. When the results look right, switch to nftables.
never_block.warden validate --config /etc/witen/warden.toml.