Architettura
Singolo binario, zero CGO, memoria limitata (LRU + istogramma). Per le firme dei pacchetti e gli esempi di importazione, consulta API / Pacchetti. Per aggiungere una funzionalita, consulta Contribuire.
Flusso dei dati
Sources Reader Parser
────────── ────── ──────
file / glob ─┐
stdin - ├─▶ reader.FromSource(follow) ─▶ parser.Parse(line) ─┐
docker:// ───┤ fan-in + rotation │
k8s:// ──────┤ stdout+stderr merge ▼
journalctl ──┘ ┌─────────────────┐
│ analysis.Engine │
│ ├─ MatchEntry() │◀── types.Filters (--from, --ip, --country, --grep, --level…)
│ ├─ Enrich ───────▶ enrich.GeoIP.Lookup(ip) → Country/ASN (LRU 50K, TTL 24h)
│ ├─ Detect ───────▶ analysis.Detector (26 cats, dual-pass, MITRE)
│ └─ Stats (TopN, histogram 1K buckets, human/bot) │
└────────┬────────┘
│
┌────────────────────────┼────────────────────────┐
│ │ │
output.Report tui.Model (watch) guard.Guard
table/json/csv/html 8 tabs, 2s tick ├─ Evaluate(entry) ──▶ blocklist.Manager.Contains(ip) → immediate
├─ enrich.GeoIP ──▶ country-block → immediate
├─ sliding window (per-sec buckets) → Tick()
├─ firewall.Backend (auto → hybrid/iptables/docker/nftables)
└─ audit + state (JSONL + blocked.json)
Pacchetti — dove risiedono i concetti
| Concetto letto altrove | Pacchetto | Collegamento |
|---|---|---|
| “Caddy JSON → LogEntry” | pkg/parser | API → parser |
| “Paese/asn principale, cache GeoIP” | pkg/enrich | API → enrich |
| “26 categorie, MITRE, Sigma” | pkg/analysis | API → analysis, Rilevamento |
| “8 feed, trie CIDR, cache 7g” | pkg/blocklist | API → blocklist |
| “finestra scorrevole, audit, stato” | pkg/guard + guard/firewall | API → guard |
| “file/docker/k8s/journalctl” | pkg/reader | API → reader |
| “table/html/json” | pkg/output | API → output |
| “dashboard live” | pkg/tui | TUI e report |
Limiti di memoria
MaxCardinality 100k per contatore, LRU IP da 100k, istogramma da 1000 bucket (log10, 1µs–10s), LRU GeoIP da 50k. Nessuna mappa senza limiti.
Flusso di configurazione
caddy-analyzer.json (locale → globale) → PersistentPreRunE applyTuning() → override dei flag CLI. Guard aggiunge l'unione di whitelist + --never-block. Consulta Configurazione.
Vedi anche
API / Pacchetti — importazione e uso per pacchetto. Contribuire — dove aggiungere un rilevamento (pkg/analysis/detect.go), un feed (pkg/blocklist) o un backend firewall (pkg/guard/firewall).