⚠️ This product is in Beta — not production ready. Looking for testers — please apply →  ·  🐞 Report a bug →
Beta security — implemented, awaiting independent review

Security you can verify.

A hosting panel controls root, so we treat it like it. Below is what the panel actually implements today in v1.5.45 — shipped mechanisms, not roadmap items. What it is not: an independent review. No external review has happened yet — that testing is exactly what this beta is for, and experienced testers are invited to try to break every item below.

Security code scanned by Semgrep · findings triaged internally, independent review pending GitHub — StuBlueUK/karnakpanel

🔏Updates designed to be verifiable

The update channel is the highest-value target on the box. Ours is built to be checkable.

  • Cryptographically signed self-updates: the build host signs SHA256SUMS with an Ed25519 key whose private half never leaves development. The updater verifies against an install-time trust anchor, checks every file hash, and refuses downgrades, replays and unsigned tarballs.
  • Every update takes a snapshot first and rolls back automatically on failed health checks — and you can roll back to any kept release by hand.
  • Update-available banners on the dashboard and Update page (persistent until installed, red for security releases) with a daily probe, so a known-vulnerable panel never sits quietly out of date.
  • Daily file-integrity watch (tripwire-lite) over panel code, scripts and control configs, with notifications and one-click re-baseline. Updates and SSL/mail scripts re-baseline themselves, so legitimate changes don't cry wolf.
  • Installer verifies each release against a signature from the KarnakPanel build host before anything runs, and the admin console on :7080 is closed by default (SSH tunnel, or one allowed address).
  • OS-level safety: release upgrades pinned off, apt-sources integrity-watched, a dist-upgrade warning on the Update page — and release upgrades (22.04 → 24.04) are console migrations with a full backup, never a panel button.

🔑Logins that resist people, not just bots

Stolen passwords are the most common breach. The panel assumes yours will leak.

  • TOTP 2FA with enforcement for admin + reseller logins — staff get herded to setup until enabled, with a persistent nudge and a scannable QR. End users are never forced.
  • Breached-password check on every password set, using HaveIBeenPwned k-anonymity — known-leaked passwords are rejected without ever sending the password anywhere.
  • Fail2ban panel-login jail plus a login-flood jail with port-scoped bans, brute-force throttling with attempt logging, and new-IP login alerts (first login silent, hourly dedup).
  • Session manager (view + kill), fully logged login-as support sessions, role-scoped hashed API tokens with optional IP pinning — and the token API is unaffected by 2FA enforcement, so automation doesn't break.
  • SSH keys-only toggle with lockout guard, keypair generator, live status, and SSH-key-first hardening that never strands you without root access.

🧱Tenants isolated by design

Shared hosting means tenants who share one server. These mechanisms aim to keep them apart — all awaiting hostile testing.

  • Per-user PHP-FPM pools with open_basedir confinement and a disable_functions shell lockdown in every pool — with an admin status page, one-click re-apply, and a weekly re-apply cron so drift gets corrected.
  • Customer PHP runs in a systemd sandbox. The system is read-only to PHP except the folders sites write to; a PHP worker sees only its own account's processes; PHP gets its own /dev/shm, no longer shared with cron jobs, apps or the host (sites on the same PHP version still share one); and setuid file creation plus low-level calls — mount, ptrace, raw I/O, kernel modules — are blocked. mail() keeps working. Applied automatically on update, with a PHP version that won't start put back without the sandbox, and fpm-sandbox.sh off to turn it off as root.
  • Private /tmp per account: cron jobs and supervised apps get their own /tmp and /var/tmp that other accounts can't see (plus a private /dev/shm), and website PHP uses the account's own temp folder instead of the shared /tmp. DNS zone edits and file-manager zip downloads no longer use the shared /tmp either.
  • The panel runs as its own system user (karnak-panel), not the web server's user, switched over automatically on update with a check before and an automatic switch-back if it fails. The panel may run only the server scripts its own code names; any other script is refused.
  • The web server reads only website folders. Everything else in a home — mail, backups, logs, cron output — is readable by the account and the panel only.
  • pcntl fork functions blocked in pools, a 5-minute per-request CPU cutoff, and MySQL query caps on all app-installer databases — one runaway script can't eat the box.
  • Over-quota sites go offline in an orderly way (pool suspend + FTP lock) and self-heal when usage drops — quota enforcement that actually enforces.
  • Chrooted, shell-less FTP users, per-user database grants, memory-capped + niced pools, and bcrypt storage everywhere (nothing sensitive in plaintext).

🛡️Active defences, on by default

Security that ships switched on beats security you have to discover.

  • Per-domain bot shield — default on, toggleable — plus OpenLiteSpeed per-IP request-rate caps against floods.
  • Upload webshell block with upload-time antivirus: hostile files never land on disk, and email attachments face ClamAV malware rejection.
  • Fail2ban jails across SSH, web, mail, FTP and the panel itself, a UFW firewall manager with SSH guard, and daemon/cron denylists against known-abusive patterns.
  • Egress canary: sampled alerting on each new (user, destination) outbound connection, so a compromised site phoning home gets noticed. Inbound traffic never alerts.
  • Panel security headers on all responses, CSRF on every state-changing route (completed by internal review), and no shell interpolation — allow-listed commands with escaped arguments.

🔍Self-reviewed, and we show our work

Internal sweeps are a start, not proof. No independent review yet.

  • Internal sweep in v1.4.0 across all 132 POST routes, queries, views and shell handling — no issues found by us. Independent review pending; testers are explicitly invited to prove us wrong.
  • CSRF coverage completed across email/FTP/database creates by internal review; ShellCheck + PHP lint in CI; domain → vhost → SSL → backup smoke tests.
  • Templates diffed against Ubuntu defaults, least-privilege scoped sudo per service, and prepared statements throughout.

✉️Mail & DNS safety specifics

The boring details that decide whether your mail arrives.

  • SPF hard-fail option, DKIM wizard, deliverability scoring out of 100, per-mailbox + global SMTP rate limits — with malware rejects, rate caps and relay policy always applying even when weekend scan-skip is on.
  • DNSSEC with one click, CAA/SRV/SSHFP records under strict validation, and zone validation before every reload with automatic rollback on BIND rejection.
Honest limits

What we won't pretend.

Honest limits (v1.5.45): single-server only (no clustering — transfer tools ship, true multi-server doesn't) · no built-in billing (WHMCS provisioning hooks provided, or the HostBMS module — early development) · Ubuntu 24.04 LTS / Debian 13 only · OpenLiteSpeed only (no Apache/nginx) · beta, so expect glitches and report them · no independent security review yet — that testing is the ask.

🔍 Verify it yourself

  • ✔ Idempotent installer for fresh Ubuntu 24.04 LTS / Debian 13, re-runnable, with per-run log rotation
  • ✔ Source-available code you can read on your own server — no obfuscation, no license server
  • ✔ Code scanned with Semgrep in CI — findings triaged by internal review, verifiable on GitHub
  • ✔ Read-only code for testers pre-launch
  • ✔ No independent review yet — breaking these mechanisms is the most useful test you can run
Report a security issue Join beta →

💰 And it stays free

Security features are not a premium tier. Signed updates, 2FA enforcement, integrity watches — all of it ships in the free product, because a panel that charges extra for safety is a panel that leaves someone's server exposed.

See how it compares →
🐞 Report a bug