1. Goal and high-level design
I wanted a small SIEM stack I could break and fix without touching production. The goal was:
- Run the Wazuh manager on a Raspberry Pi.
- Forward logs from a few lab systems (Linux + Windows).
- Create at least one meaningful alert that would matter in a real SOC.
- Raspberry Pi → Wazuh manager + API + dashboard
- Lab endpoints → Wazuh agents sending OS, auth, and security logs
2. Installation notes (Pi)
I followed Wazuh's official install docs, but a few Pi-specific things mattered:
- Hardware: Raspberry Pi 4 Model B.
- OS: Ubuntu Server LTS for Raspberry Pi.
- Made sure the Pi had enough resources (at least 4 GB RAM recommended for small labs).
- Kept the OS fully updated before installing Wazuh.
- Used the Wazuh all-in-one install for a simple manager + dashboard setup.
# OS update first
sudo apt update && sudo apt full-upgrade -y
# (Pseudo) Wazuh install command
# Actual command depends on the current Wazuh docs / repo
curl -sO https://packages.wazuh.com/4.x/install.sh
sudo bash install.sh
3. Adding agents and log sources
Once the manager was up, I added real endpoints I actually use day-to-day:
- My MacBook (for auth, sudo, and system events).
- My Windows laptop (for logon events and basic security logs).
From the Wazuh UI, I generated agent install commands for each host and verified they were checking in:
# Example (Linux agent)
sudo wazuh-agent-4.x.deb
sudo systemctl enable --now wazuh-agent
4. Example detection: suspicious SSH brute-force
To prove the stack was actually useful, I simulated a noisy SSH brute-force attempt against a lab box and watched how Wazuh handled it.
- Generated multiple failed SSH logins from a single source IP.
- Verified the events landed in Wazuh as auth failure logs.
- Tuned the rule threshold so a burst of failures would trigger an alert.
# Simple brute-force simulation from another host
for i in {1..20}; do
ssh invaliduser@lab-host "exit" || true
done
In the Wazuh dashboard I looked for an alert similar to:
Rule: 5710 (level 10) - Multiple SSH authentication failures.
SrcIP: 192.168.x.x
User: invaliduser
Location: /var/log/auth.log
5. What I’d do next
- Add file integrity monitoring (FIM) rules for sensitive directories.
- Ingest logs from a small web app (e.g., Nginx + app logs) and build HTTP-focused rules.
- Pair Wazuh data with a real incident response scenario (e.g., phishing → initial access → privilege escalation) and write that up end-to-end.
The point of this project isn’t that Wazuh on a Pi is production-ready — it’s that I can practice the full flow: collect logs, tune rules, and interpret alerts like a SOC analyst.