Skip to main content

Security Shallots

A lightweight, self-hosted SIEM that runs on anything — from a Raspberry Pi to a full server.

No Splunk. No Elastic. No Docker required. Just Python and SQLite.

pip install .
shallot run

Open http://localhost:8844 and you're monitoring.

What it does

Security Shallots collects security alerts from your network, deduplicates and enriches them, detects attack patterns, and gives you a single dashboard to review everything.

Sources it can ingest:

  • Suricata IDS (EVE JSON logs)
  • Syslog (routers, firewalls, anything that speaks syslog)
  • pfSense (firewall logs + DHCP via API)
  • Wazuh (HIDS/EDR alerts)
  • CrowdSec (behavioral blocks)
  • Pi-hole (DNS query logs)
  • Argus endpoint agents (Windows EDR)
  • Web application logs

What it does with them:

  • Normalizes alerts into a common format
  • Deduplicates repeated noise
  • Auto-classifies severity and suppresses known false positives
  • Correlates patterns (port scans, brute force, lateral movement)
  • Groups related alerts into incidents with response runbooks
  • Optional AI triage via API (OpenAI/Anthropic) — no local GPU needed
  • Web dashboard with real-time WebSocket feed

Hardware auto-detection

Shallots detects your hardware on startup and adjusts automatically:

System RAM CPU What runs
Raspberry Pi 2 GB 1 core Suricata + syslog, basic correlations
Old laptop 4 GB 2 cores + CrowdSec, incidents, AI via API
Desktop 8 GB 4 cores + Wazuh, agents, full analytics
Server 16+ GB 8+ cores Full threat engine (baselines, graph, ML, kill chain)

On a 4 GB machine, Shallots uses ~200-400 MB RAM with the threat engine disabled. Storage: 30 days of alerts from a home network uses ~200-500 MB of SQLite.

Quick start

Option A: One-line installer (recommended)

Installs everything — Python, Suricata, Shallots — detects your hardware, and starts monitoring:

curl -fsSL https://raw.githubusercontent.com/benolenick/security-shallots/main/setup/shallot-setup | sudo bash

The installer walks you through profile selection, network config, and component choices. At the end you get a running dashboard and agent deploy commands.

Option B: Manual install

# Requires Python 3.10+ and Suricata
pip install git+https://github.com/benolenick/security-shallots.git
shallot setup                    # auto-detect network, generate config
shallot setup --install-service  # also install systemd service
shallot run                      # start (foreground)

Key settings:

  • network.home_cidr — your LAN range (e.g. 192.168.1.0/24)
  • suricata.eve_path — path to Suricata's eve.json
  • web.username / web.password — dashboard login (recommended)
  • profile — auto (default), or force lite / micro / standard / full

3. Run

# Foreground (for testing)
shallot run

# As a background service (if you used --install-service)
sudo systemctl enable --now shallotd

4. Dashboard

Open http://your-ip:8844.

5. Deploy agents (optional)

Install agents on your machines to monitor logins, file changes, processes, and more. The dashboard has a guided setup (click Setup in the header), or use the command line:

# Linux — installs Wazuh agent + clove-watchdog (~15 MB, runs as systemd service)
curl -fsSL https://raw.githubusercontent.com/benolenick/security-shallots/main/setup/endpoint/clove \
  | sudo bash -s -- --manager YOUR_SERVER_IP

# Windows — installs Argus sentinel (auto-installs Python if needed, runs as scheduled task)
irm https://raw.githubusercontent.com/benolenick/security-shallots/main/setup/endpoint/clove.ps1 | iex

Agents auto-register and start sending alerts within minutes. Uninstall with --uninstall (Linux) or -Uninstall (Windows).

Note: Linux agents require Wazuh Manager on the server (enabled in standard and full profiles). On lite/micro profiles, use syslog forwarding instead — the dashboard Setup tab shows how.

Profiles

Set profile: auto (the default) and Shallots picks the right mode:

Profile RAM Components Threat engine
lite < 2 GB Suricata + syslog Off
micro 2-4 GB + CrowdSec Off
standard 4-8 GB + Wazuh, VictoriaLogs, Grafana Tuned down
full 8+ GB Everything including Argus agents Full

Override: profile: lite in config.yaml.

AI triage

Works without AI — you can manually review alerts. Add an API key for automatic classification:

ai:
  tier: remote_api
  anthropic_api_key: "sk-ant-..."   # or openai_api_key

Cost: a few cents per day for a typical home network. No GPU needed.

For local AI (if you have the hardware):

ai:
  tier: local
  ollama_url: "http://localhost:11434"
  ollama_model: "qwen3:14b"

pfSense integration

Configure pfSense to send syslog to your Shallots host:

  • Status > System Logs > Settings > Remote Logging > add your Shallots IP
  • Enable syslog in config.yaml with matching port

Optional API integration pulls DHCP leases for IP-to-hostname mapping.

CLI

shallot run                              # Start daemon (foreground)
shallot status                           # Component health + alert stats
shallot query "show SSH attacks today"   # AI natural language query
shallot health                           # Detailed health check

Architecture

[Suricata] ──┐
[Syslog]   ──┤
[pfSense]  ──┼──> Queue ──> Pipeline ──> SQLite ──> REST API ──> Dashboard
[Wazuh]    ──┤              (normalize,            (aiohttp)     (vanilla JS)
[CrowdSec] ──┘               dedup,
                              enrich,
                              classify)
                                |
                          Correlator ──> Incidents
                          (port scan,    (grouped alerts
                           brute force,   with runbooks)
                           lateral mvmt)
  • Python asyncio — single process, cooperative multitasking
  • SQLite + FTS5 — full-text search, no external database
  • 5 pip dependencies — aiohttp, aiosqlite, pyyaml, maxminddb, aiofiles
  • Vanilla JS frontend — no React, no build tools, no node_modules

Project structure

shallots/
  daemon.py          # Main orchestrator — starts all workers
  config.py          # YAML config + hardware auto-detection
  cli.py             # CLI entry point
  ingest/            # Data source ingestors (suricata, syslog, etc.)
  pipeline/          # normalize -> dedup -> enrich -> classify
  ai/                # Triage, correlator, incidents, autopilot
  store/             # SQLite database layer
  web/
    api/             # REST API endpoints (split by domain)
    app.py           # aiohttp app factory
    static/          # Dashboard (vanilla JS SPA)

Development

python -m venv .venv
source .venv/bin/activate  # or .venv\Scripts\activate on Windows
pip install -e ".[dev]"
python -m shallots run --debug

License

MIT

Metadata

Release files for security-shallots 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for security-shallots 0.2.0
File Size Uploaded
security_shallots-0.2.0.tar.gz 500.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for security-shallots 0.2.0
File Interpreter ABI Platform
security_shallots-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 892.4 kB

Release files / security_shallots-0.2.0.tar.gz

Download URL security_shallots-0.2.0.tar.gz
Size 500.0 kB
Tags Source
SHA-256 checksum
How to use checksums
89d52f0e554dc07c16c3483d2b4d1b74a0e787715b7e81467ac463b08cf9d82e
BLAKE2b-256 checksum
How to use checksums
c6b0801f86f497301d8733b38f677e86a7090228532310dfdd367ae7db3eeb9e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / security_shallots-0.2.0-py3-none-any.whl

Download URL security_shallots-0.2.0-py3-none-any.whl
Size 392.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
1d144626ecfb0510c13db6dda1da656fff08afcc78ac48c795bb7e1aa81e238b
BLAKE2b-256 checksum
How to use checksums
0ff1cc36fcdad5b1406043a7b50a96fcb0a27e7a66375c1f8e8de0578a69dced
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page