v0.7.1 · aggiornata · GitHub

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 altrovePacchettoCollegamento
“Caddy JSON → LogEntry”pkg/parserAPI → parser
“Paese/asn principale, cache GeoIP”pkg/enrichAPI → enrich
“26 categorie, MITRE, Sigma”pkg/analysisAPI → analysis, Rilevamento
“8 feed, trie CIDR, cache 7g”pkg/blocklistAPI → blocklist
“finestra scorrevole, audit, stato”pkg/guard + guard/firewallAPI → guard
“file/docker/k8s/journalctl”pkg/readerAPI → reader
“table/html/json”pkg/outputAPI → output
“dashboard live”pkg/tuiTUI 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).