Keelix vs Lynis
Short answer: run both. Lynis is a battle-tested Linux host auditor with hundreds of individual tests and nearly two decades of community hardening knowledge. Keelix starts where Lynis ends — it grades the running containers, the internet-facing exposure, and the AI agents on the same box, rolling everything into one 0–100 posture score. Different surfaces. Different questions. No overlap.
Different tools, different questions
Lynis answers: “Is this Linux host hardened?” It runs on the host itself, performs hundreds of individual tests across SSH configuration, kernel parameters, package management, authentication controls, file permissions, and logging — and outputs a prose log of warnings and suggestions alongside a hardening index. It is GPL-3.0, free, and has been the go-to host auditor since 2007. It belongs in your toolkit.
Keelix answers: “Is this deployed box fit to ship — host, containers, exposure, and AI agents included?” It scans from outside the box in, checks which ports are actually reachable from the internet (accounting for Docker's iptables rules that silently bypass UFW), inspects running containers, and grades every AI agent and MCP server on the machine for auto-approval, plaintext secrets, and the lethal trifecta. The result is a 0–100 posture score mapped to CIS Docker Benchmark, SOC 2, and ISO 27001 — exportable as audit evidence.
Where Lynis is deep on the host layer, Keelix is wide across the whole deployed stack. Neither does the other's job. A Lynis scan tells you nothing about whether your Redis container is reachable from the open internet, whether a running MCP server auto-approves all tool calls, or whether a plaintext Anthropic API key is sitting in a .mcp.json config file. A Keelix scan does not replace Lynis's SSH hardening depth or its extensive host checks.
Where Lynis ends, Keelix begins
After a Lynis scan completes, you know the state of your Linux host — SSH, kernel, packages, auth. What you still do not know:
- Whether Docker's iptables rules have bypassed your firewall and exposed a container port to the open internet — Lynis does not perform outside-in network checks.
- Whether a running MCP server on the box auto-approves every tool call — turning any prompt injection into a full agent takeover without requiring a vulnerability.
- Whether your Claude Code, Cursor, or Windsurf config has a plaintext API key or database password stored in a plaintext MCP config file.
- Whether a deployed AI agent has all three legs of the lethal trifecta simultaneously active.
These are not host-layer issues. They emerge at the intersection of the container runtime, the network, and the AI agent configuration — the surface that appeared in deployed stacks only after 2024. Lynis predates it. Keelix was built for it.
Side by side
| Keelix | Lynis | |
|---|---|---|
| Primary scope | Whole deployed box: host config, containers, outside-in exposure, AI-agent/MCP posture | Linux/Unix host only — no container inspection, no network exposure checks |
| AI-agent / MCP posture | ✓ Auto-approval, plaintext secrets, unvetted MCP servers, lethal trifecta | ✗ No MCP or AI-agent checks |
| Docker container checks | ✓ Running containers, bind-mount risks, Docker socket exposure | ✗ Limited — can detect a running Docker daemon but does not inspect containers |
| Outside-in exposure | ✓ Shows what is actually reachable from the internet (0.0.0.0 bindings, open ports) | ✗ Not scanned — host-based only |
| Host config checks | ✓ 93 deterministic CIS/SOC 2/ISO 27001-mapped checks | ✓ Hundreds of individual security tests across SSH, packages, authentication, kernel, etc. |
| Score / output | 0–100 posture score + per-finding report, JSON/HTML/scan record | Numeric hardening index + prose warnings/suggestions log file |
| Compliance evidence | ✓ SOC 2, ISO 27001, CIS Docker Benchmark — shareable, audit-ready records | ✗ No structured compliance mapping or exportable evidence bundle |
| CI gate mechanism | Exit code on posture threshold (e.g. score ≥ 80); GitHub Action available | Exit code available (--warning-count) but not natively suited to CI posture gates |
| Local-first / zero telemetry | ✓ Nothing leaves your box; secrets redacted at scan boundary | ✓ Runs entirely on-host; no network calls |
| License | Apache-2.0 | GPL-3.0 |
| Price | CLI free forever; Keelix Cloud (history, alerts, teams) — see /pricing | Free; Lynis Enterprise (CISOfy) adds central management + extra plugins |
Hardening index vs posture score
Both Lynis and Keelix distill their findings into a single numeric score — but they measure different things and serve different audiences.
Lynis's hardening index is an indicator of the hardening measures Lynis detected on the host. The Lynis documentation is explicit: it is “just an indicator on taken measures — one should not confuse it with a percentage of how safe a system might be.” It is generated from the warnings and suggestions in the prose report, and it lives in the scan log. There is no structured export, no compliance mapping, and no persistent history without running your own tooling.
Keelix's posture score is computed from 93 deterministic checks, each explicitly mapped to a CIS, SOC 2, or ISO 27001 control. The score is designed to gate CI — a deployment below a threshold fails the pipeline. It also generates a structured evidence bundle you can attach to an audit rather than a log file you must interpret manually.
Neither score is a definitive “safe” signal in isolation. Used together, they cover more ground: Lynis's host depth + Keelix's container, exposure, and AI/MCP width.
Recommended setup: run both in sequence
A practical hardening workflow for a self-hosted Docker server looks like this: run Lynis periodically (weekly cron or on OS-change events) for deep host-layer auditing — SSH, kernel, packages, auth. Integrate Keelix into your CI/CD deploy pipeline as a posture gate before every production promotion, catching container, exposure, and AI/MCP findings that only appear at deployment time.
# Weekly host hardening audit (cron or CI on OS change)
lynis audit system --cronjob
# Pre-deploy posture gate in GitHub Actions
- name: Keelix posture gate
uses: jakelamon/keelix@v0.1.0
with:
threshold: 80
fail-on: mcp-auto-approval,mcp-secrets,docker-exposedLynis hardens the host layer. Keelix gates the deployment. Neither replaces the other.
Frequently asked
- What does Lynis not cover that Keelix does?
- Lynis audits the Linux/Unix host — SSH config, kernel parameters, package state, authentication controls. It does not inspect running Docker containers, check what ports are reachable from the internet, or grade AI agents and MCP servers for auto-approval or plaintext secrets. Keelix covers all four of those surfaces together.
- Does Lynis scan Docker containers?
- Lynis can detect that Docker is installed and running, and it will flag some Docker-daemon-level settings. It does not inspect individual running containers, bind-mount configurations, or Docker socket exposure. Keelix's container checks cover the Docker daemon, running containers, and the outside-in network exposure that Docker's iptables rules create. [Lynis — CISOfy ↗]
- Can I use Lynis and Keelix together?
- Yes — and that is the recommended approach. Lynis gives you depth on the Linux host layer: SSH hardening, authentication policy, package audits, and hundreds of individual tests built up over nearly two decades. Keelix adds the container, exposure, and AI/MCP layer that Lynis does not touch. Together they cover the whole deployed box.
- What is the Lynis hardening index?
- The Lynis hardening index is a number shown at the end of each scan. It is an indicator of the hardening measures detected, not a precise risk percentage — the Lynis documentation explicitly cautions that a higher number only reflects measures taken, not absolute safety. Keelix's 0–100 posture score is a comparable single-number summary, but it maps each check to CIS, SOC 2, and ISO 27001 controls and exports audit-ready evidence. [Lynis Hardening Index — Linux Audit ↗]
- Is Keelix a Lynis replacement?
- No. If you are hardening a Linux host, Lynis's hundreds of host-layer checks and its years of community tests are valuable — especially for SSH configuration, kernel hardening, and authentication audits. Keelix's host checks focus on the 93 controls that map to CIS Docker Benchmark, SOC 2, and ISO 27001 — they complement rather than duplicate Lynis. The right framing is: run Lynis for host hardening depth, run Keelix to grade the whole deployed box including containers and AI agents.
Related
Add the container, exposure, and AI/MCP layer Lynis cannot reach.
Free, local-first, Apache-2.0. Run it alongside Lynis — not instead of it.