Documentazione completa di un progetto reale per trasformare un Raspberry Pi 5 in un server multifunzione: NAS, SIEM, Honeypot, VPN, DNS Sinkhole e molto altro. Scritto da chi ci ha messo le mani, con errori, fix e lezioni imparate sul campo.
Questo repository raccoglie l'intera esperienza - dalla prima accensione al deployment finale - di un Raspberry Pi 5 configurato come infrastruttura di sicurezza domestica. Non e' una raccolta di comandi copiati da StackOverflow: ogni sezione documenta il perche' di ogni scelta, i problemi incontrati e le soluzioni adottate.
Il sistema operativo di base e' OpenMediaVault 7 (Debian-based), scelto per la gestione NAS nativa. Tutti i servizi aggiuntivi (SIEM, VPN, Honeypot, DNS Blocker) girano in container Docker, garantendo isolamento, portabilita' e la possibilita' di distruggere e ricreare un servizio senza toccare il sistema host.
| # | Sezione | Descrizione |
|---|---|---|
| 1 | First Setup | Installazione OS, boot da NVMe, configurazione iniziale SSH e bootloader |
| 2 | NAS (Network Attached Storage) | OpenMediaVault 7, filesystem, condivisioni SMB/NFS, Plex Media Server |
| 3 | Docker & Portainer | Installazione Docker su OMV, Portainer come management plane |
| 4 | Secure your RaspberryPi | Hardening SSH, Fail2ban, UFW, aggiornamenti automatici, Wazuh FIM |
| 5 | VLAN (Virtual LAN) | Segmentazione di rete con IPVLAN e VLAN tagging 802.1Q |
| 6 | VPN (Virtual Private Network) | WireGuard server con wg-easy, DDNS, gestione Double NAT/CGNAT |
| 7 | ADS Blocker | Pi-hole su Docker con rete MacVLAN, configurazione DNS e router |
| 8 | Honeypot | Cowrie SSH/Telnet honeypot con integrazione Wazuh SIEM |
| 9 | SOC Analyst | Ruolo e strumenti dell'analista SOC, con sotto-sezione Wazuh SIEM/XDR |
| 10 | Security Assessment & Hardening | Red teaming del proprio lab: Nmap, Hydra, analisi rischi, firewall tuning |
| Documento | Contenuto |
|---|---|
| Topologia di rete | Diagramma ASCII completo di tutti i componenti, IP, porte e flussi dati |
| Quick Reference Card | Indirizzi, porte, credenziali default, comandi di emergenza |
| Checklist post-installazione | 20+ verifiche con comandi e risultati attesi per ogni componente |
Raspberry Pi 5 (8GB RAM) - Raspberry Pi OS Lite 64-bit (Bookworm)
|
|-- Hardware & Boot
| |-- Boot diretto da NVMe SSD (Patriot P320 256GB PCIe Gen 3x4)
| |-- Bootloader EEPROM aggiornato all'ultima versione stable
| |-- MicroSD mantenuta solo per recovery/emergenza
| +-- Alimentazione: alimentatore ufficiale 27W USB-C (5.1V / 5A)
|
|-- Sistema Base: OpenMediaVault 7
| |-- Gestione storage (NVMe, filesystem EXT4)
| |-- Condivisioni di rete: SMB/CIFS + NFS
| |-- Gestione utenti e permessi ACL
| |-- Monitoraggio SMART dei dischi
| +-- Web UI su porta 80 (IP locale)
|
|-- Container Platform: Docker + Portainer
| |-- Docker Engine (docker.io da repo Debian, non CE)
| |-- Docker Root Directory su NVMe (/var/lib/docker)
| |-- Portainer CE su porta 9443 (HTTPS)
| +-- Reti Docker segmentate:
| |-- bridge (default, per servizi interni)
| |-- macvlan (Pi-hole - IP dedicato su LAN)
| +-- ipvlan_150 (VLAN 150 per isolamento avanzato)
|
|-- Security Stack
| |-- Wazuh SIEM All-in-One (Manager + Indexer + Dashboard)
| |-- Wazuh Agents (self-monitoring + host Windows/Linux)
| +-- Regole custom per Cowrie (rule ID 100010-100013)
|
|-- Network Protection
| |-- WireGuard VPN (wg-easy, porta 51820 UDP)
| |-- Pi-hole DNS Sinkhole (79.000+ domini bloccati)
| +-- UFW Firewall (default deny incoming)
|
|-- Threat Detection
| |-- Cowrie Honeypot (SSH porta 2222, Telnet porta 2223)
| +-- Esposizione Internet (port forward + Ngrok fallback)
|
+-- Network Segmentation
|-- DMZ Network -> servizi esposti
|-- Internal Network -> servizi privati
+-- Management Network -> Portainer, Wazuh Dashboard
| Componente | Dettaglio | Note |
|---|---|---|
| Board | Raspberry Pi 5 (8GB RAM) | I 4GB sono insufficienti per Wazuh Indexer + Dashboard |
| Storage primario | NVMe SSD M.2 2280 PCIe Gen 3x4 | Nel mio caso: Patriot P320 256GB |
| Adattatore NVMe | HAT/adattatore PCIe per RPi5 | Verificare compatibilita' e alimentazione |
| Storage secondario | MicroSD 16GB+ | Solo per recovery; il boot avviene da NVMe |
| Alimentazione | Alimentatore ufficiale RPi5 27W (5.1V/5A) | Con NVMe collegato, un alimentatore sottodimensionato causa instabilita' |
| Rete | Cavo Ethernet Cat5e/Cat6 | Wi-Fi sconsigliato per un server; MacVLAN richiede Ethernet |
| Switch | Switch gestito (managed) | Necessario solo per VLAN tagging 802.1Q |
| Router | Con supporto DDNS e Port Forwarding | Nel mio caso: TP-Link Archer C50 |
OpenMediaVault rimane il sistema operativo principale. Nessun servizio aggiuntivo viene installato direttamente sull'host. Tutto gira in container Docker. Questo garantisce che un servizio malfunzionante non possa corrompere il NAS, e che ogni componente possa essere aggiornato, fermato o eliminato indipendentemente.
Per chi parte da zero, l'ordine consigliato e':
- First Setup - Installare l'OS, configurare boot e NVMe
- NAS - Configurare OpenMediaVault e le condivisioni
- Docker & Portainer - Installare la piattaforma container
- Secure your RaspberryPi - Hardening base prima di esporre servizi
- VPN - Accesso remoto sicuro
- ADS Blocker - Protezione DNS
- VLAN - Segmentazione avanzata (opzionale, richiede switch gestito)
- Honeypot - Deployment della trappola
- SOC Analyst / Wazuh - SIEM per monitoraggio centralizzato
- Security Assessment - Test e validazione dell'intero setup
| Layer | Tecnologia | Versione/Note |
|---|---|---|
| OS | Raspberry Pi OS Lite 64-bit | Bookworm (Debian 12). Trixie non supportata da OMV e Wazuh |
| NAS | OpenMediaVault 7 | Installato via script ufficiale OMV-extras |
| Container Runtime | Docker Engine (docker.io) | Da repository Debian, non Docker CE |
| Container Management | Portainer CE | Web UI su HTTPS:9443 |
| SIEM/XDR | Wazuh 4.9.x | All-in-One (Manager + Indexer + Dashboard) su ARM64 |
| Log Shipper | Filebeat | Trasporta alert dal Manager all'Indexer |
| VPN | WireGuard (wg-easy v13) | Container Docker, Web UI su porta 51821 |
| DNS Sinkhole | Pi-hole | Container Docker, rete MacVLAN |
| Honeypot | Cowrie | Container Docker, SSH porta 2222 |
| Firewall | UFW (Uncomplicated Firewall) | Frontend per iptables/nftables |
| Brute Force Protection | Fail2ban | Integrato con Wazuh per alerting |
Lo script scripts/setup.sh riproduce l'intero lab da zero. Ogni comando e' commentato con la spiegazione di cosa fa e perche'. Supporta l'esecuzione modulare:
# Setup completo (tutti i moduli in ordine)
sudo ./scripts/setup.sh all
# Singolo modulo
sudo ./scripts/setup.sh hardening
sudo ./scripts/setup.sh docker
sudo ./scripts/setup.sh pihole
# Verifica stato di tutti i servizi
sudo ./scripts/setup.sh verifyNota su Wazuh: Il modulo
wazuhnon automatizza l'installazione (ARM64 non supportato ufficialmente, ogni passo richiede verifica manuale). Fornisce le istruzioni passo-passo da seguire.
Questo progetto espone deliberatamente un honeypot su Internet. Le configurazioni documentate includono misure di isolamento (firewall, segmentazione di rete, container sandbox), ma un sistema esposto a Internet richiede manutenzione costante: aggiornamenti, monitoraggio dei log, revisione delle regole firewall.
Non replicare questa configurazione senza comprendere i rischi. Un honeypot mal configurato e' una porta aperta sulla tua rete domestica.
Questo repository e' pubblico a scopo educativo. I comandi e le configurazioni documentati sono specifici per il mio ambiente di rete e potrebbero richiedere adattamenti per funzionare correttamente nel vostro.