v0.7.1 · aggiornata · GitHub

Registro delle modifiche

Tutte le modifiche rilevanti a caddy-analyzer saranno documentate in questo file.

Il formato si basa su Keep a Changelog e questo progetto aderisce al Semantic Versioning.

0.7.2 — 2026-09-05

Corretto

  • Leggibilità dei path sui terminali chiari (#100): i path delle richieste in tail e nello stream live di --watch non usano più il bianco brillante (255), illeggibile su sfondo bianco. Ora usano il colore predefinito del terminale in grassetto, restando leggibili sia sui temi chiari sia su quelli scuri senza flag o configurazioni.
  • Verifica cosign del self-update: caddy-analyze update falliva con --trusted-root only supported with --new-bundle-format perché le release pubblicavano bundle nel vecchio formato. Ora le release pubblicano bundle Sigstore nel nuovo formato e l'updater ripiega sui sidecar legacy (certificato/firma) quando il bundle non è nuovo.

0.7.1 — 2026-09-01

Corretto

  • Barra di avanzamento per analisi grandi: i file locali finiti mostrano nuovamente l'avanzamento deterministico, incluso --detect; le sorgenti streaming mantengono lo spinner animato.
  • Avanzamento durante la detection: lo spinner procede in modo indipendente mentre il rilevamento esegue elaborazioni costose, senza aspettare la prossima entry.

Documentazione

  • Riferimento completo dei comandi: documentati ogni comando, sottocomando, flag globale e specifico, requisito di sicurezza, formato di output e flusso operativo in inglese e italiano.

0.7.0 — 2026-09-01

Aggiunto

  • Pattern di detection personalizzati (#76): carica file JSON validati e ripetibili con sorgenti URI, header, User-Agent e combinazioni.
  • Consegna audit remota (#70, #77): inoltra gli eventi di guard, block e unban a syslog o webhook generic, Slack, Discord e PagerDuty con retry limitati e rate limit per IP.
  • Exporter Elasticsearch/OpenSearch e Loki (#74): pubblica report aggregati via HTTP autenticato con batching, retry e gestione degli errori bulk.
  • Verifica bundle Cosign (#93): le nuove release usano bundle Sigstore e root attendibili, mantenendo la verifica delle release precedenti.
  • Guard in modalità dry-run (#78): esegue soglie, detection, blocklist e regole country senza modificare firewall o stato persistente; emette eventi would_block.
  • Baseline persistenti (#73): salva snapshot JSON versionati e confronta esecuzioni future con --against, soglia configurabile, output strutturato ed exit code per CI.
  • Cache di analisi limitate (#69): sostituisce le cache grep/glob illimitate con cache LRU concorrenti.
  • Worker di parsing paralleli (#75): migliora le prestazioni sui log grandi preservando l'ordine necessario alla detection stateful.

Sicurezza

  • Gli errori delle notifiche remote non bloccano mai le decisioni del firewall e le credenziali webhook non vengono incluse nella diagnostica.

0.6.6 — 2026-09-01

Aggiunto

  • Download automatico GeoIP City: scarica il database GeoLite2 City insieme ai database Country e ASN, salvo --no-auto-download.

0.6.5 — 2026-09-01

Corretto

  • Selezione del checksum cosign per piattaforma: seleziona l'asset cosign scaricato esatto invece della prima voce cosign nel manifest multi-piattaforma.

0.6.4 — 2026-08-31

Corretto

  • Ricerca della release con update --version: mantiene il prefisso v quando interroga GitHub per il tag di una release specifica.

Aggiunto

  • Worker paralleli per l'analisi (#75): --workers N parallelizza il parsing dei log mantenendo l'ordine per rilevamento e aggregazione; 0 usa il numero di CPU disponibili.
  • Enrichment GeoIP per città e heatmap (#71): i database City locali forniscono città e coordinate, con top city, sezioni nei report e heatmap geografica SVG inline.
  • Rilevamento dei bot moderni (#67): GPTBot, ChatGPT-User, ClaudeBot, anthropic-ai, Bytespider, CCBot, Amazonbot, Applebot-Extended, PerplexityBot, meta-externalagent e DataForSeoBot vengono classificati come bot.

0.6.3 — 2026-08-31

Corretto

  • Download automatico di cosign: usa il nome attuale dell'asset cosign_checksums.txt durante il download di cosign per la verifica della firma.

0.6.2 — 2026-08-31

Corretto

  • Defanging selettivo (#63): gli indirizzi IPv4 vengono ora validati prima del defanging, evitando di modificare numeri di versione e sequenze numeriche puntate non valide. PR #85 — @TLNing260310
  • --trust-forwarded ignorato in top e tail: gli IP client inoltrati vengono ora applicati prima dei filtri e dell'enrichment GeoIP in entrambi i sottocomandi. Chiude l'issue #64.

Modificato

  • Refactor della documentazione (#86): il sito della documentazione è stato ricostruito con una struttura a template, pagine in inglese e italiano, navigazione condivisa e riferimenti aggiornati. PR #86 — @lenny-ts

0.6.1 — 2026-08-31

Aggiunto

  • Filtri GeoIP per le entry (#37): --country, --exclude-country, --asn, --exclude-asn filtrano le entry dei log in base ai dati GeoIP. Supporta sia codici ISO (IT, US) sia nomi di paesi (Italy, United States). — @lenny-ts
  • Download automatico di cosign (#62): caddy-analyze update ora scarica automaticamente cosign per la verifica della firma quando non e installato, eliminando il requisito di configurazione manuale. — @lenny-ts

Corretto

  • L'output di guard ora mostra i ban da blocklist/country-block (#83): i ban da blocklist e country-block venivano registrati solo nell'audit, ma non mostrati nell'output del terminale. — @lenny-ts
  • Sblocco idempotente: unban e la scadenza di guard non falliscono piu con "partial unblock failures" quando la regola iptables non esiste in una catena (modalita hybrid). — @lenny-ts

0.6.0 — 2026-08-30

Aggiunto

  • Riprogettazione del backend firewall: supporto multi-backend (iptables, Docker DOCKER-USER, nftables, hybrid) con rilevamento automatico dell'ambiente. Guard ora applica le regole sia alle catene INPUT sia DOCKER-USER quando rileva container Docker, risolvendo il problema per cui gli IP bloccati aggiravano il firewall nelle distribuzioni Caddy containerizzate. — @lenny-ts
  • Comando whitelist: caddy-analyze whitelist --add/--remove/--list/--init gestisce l'elenco never-block. Caricato automaticamente da guard tramite /etc/caddy-analyzer/whitelist.txt. — @lenny-ts
  • Flag di tuning operativo (#56): --geo-cache-ttl, --geo-cache-size, --iptables-timeout sostituiscono le costanti a tempo di compilazione. — @dchaudhari7177

Corretto

  • loadState non ricrea le regole iptables (#79): al riavvio di guard, loadState() ripristinava gli IP nella mappa in memoria ma non chiamava blocker.Block() per ricreare le regole iptables. Gli IP bannati potevano passare finche la finestra scorrevole non si riempiva nuovamente. — @lenny-ts
  • Arresto controllato: guard ora scarica lo stato e sopprime gli errori rumorosi "context canceled" con Ctrl+C. — @lenny-ts
  • Filtri attivi non mostrati nell'intestazione del report (#51): --max-latency, --min-size, --max-size, --level, --ops-only erano omessi dalla riga "Filters:". — @dchaudhari7177
  • Duplicazione di validateIP / validateIPOrCIDR (#49): unificate in un'unica validateIP. — @dchaudhari7177

Modificato

  • Gli UUID delle regole Sigma ora sono RFC 4122 versione 5 (#59): gli identificatori basati su MD5 non erano UUID validi. Ora usa uuidV5 con uno spazio dei nomi derivato, in linea con le convenzioni Sigma. Le regole esportate prima di questa release hanno UUID diversi. — @dchaudhari7177
  • GitHub Actions fissate allo SHA (#55): tutte le action di terze parti sono fissate agli SHA completi dei commit. — @dchaudhari7177

0.5.1 — 2026-08-29

Corretto

  • Il monitoraggio dei log Docker (docker://) non acquisiva le entry (#57): execLines leggeva stdout solo tramite StdoutPipe, ma Caddy scrive su stderr. Sostituito con io.Pipe() che unisce entrambi gli stream.

Modificato

  • Deduplicati yamlEscape/yamlQuote: rimossa la copia esatta yamlQuote; i call site ora chiamano yamlEscape (#48).

Corretto (anche in 0.5.1)

  • Formattazione del delta a durata zero: formatDurationDelta(0) ora restituisce "N/A" tramite output.FormatDuration (#47).

Aggiunto

  • Filtri GeoIP per le entry (--country / --exclude-country / --asn / --exclude-asn) (#21): mantieni o scarta le entry in base a GeoIP. Richiede mmdb.

Corretto

  • Ordine enrich-prima-del-filtro: le entry vengono arricchite con GeoIP prima del filtro quando i filtri geo sono attivi. Le esecuzioni non geo mantengono l'ottimizzazione filtro-prima.

0.5.0 — 2026-08-22

Aggiunto

  • Sottocomando update con verifica cosign (#16): firma keyless fail-closed + SHA256, flag --check, --version, --force, --install-dir, gestione Windows di rinomina a lato.
  • Supporto dei log operativi (non HTTP): conteggi level/logger/msg, mappa Extra, flag --level, --ops-only, ottava scheda in watch.
  • Scheda operativa nella dashboard --watch: tasto 8.
  • Fixture di log di esempio: testdata/sample.log (68 righe) e testdata/large.log (~50K righe) + testdata/generate.py.

Documentazione

  • README: sezione Sample Logs & Test Fixtures.
  • docs/sources.html: sezione 7 sulle fixture.

0.4.1 — 2026-08-18

Corretto

  • Blocco apparente senza sorgente log (#19): ora stampa un errore chiaro invece di bloccarsi su stdin TTY; --watch rifiuta stdin.
  • L'avvio di --watch bloccato dal download GeoIP: ora NewGeoIPAsync viene eseguito in background.
  • Spam dell'usage sugli errori delle sorgenti: SilenceUsage: true su root/tail/top/guard.
  • Percorsi di ricerca GeoIP su Windows: os.UserHomeDir() invece di HOME (#27).
  • Filtri in modalita follow/interval: applicati prima dell'arricchimento (#26).

Modificato

  • Navigazione delle schede TUI: aritmetica modulare (#18).

0.4.0 — 2026-08-17

Aggiunto

  • Sistema di feed blocklist: blocklist refresh/list/config/init con cache trie CIDR di 7 giorni.
  • 8 feed blocklist predefiniti: Spamhaus DROP v4/v6, FireHOL L1/2, CINS, Tor, ET, AbuseIPDB.
  • Integrazione blocklist in guard: blocco immediato tramite trie CIDR; --no-blocklist, --blocklist-refresh 6h.
  • Country-block di guard: --country-block CN,RU,IR con controllo mmdb fail-fast.
  • Arricchimento GeoIP: mmdb DB-IP/MaxMind con download automatico dal mirror P3TERX; --geoip-db, --no-auto-download.
  • top country / top asn: nomi leggibili dalle persone.
  • Scheda GeoIP di --watch: tasto 7 con arricchimento in background.
  • Sito di documentazione: documentazione iniziale in stile glassmorphism con TOC e ottimizzazioni Lighthouse.

Corretto

  • URL di download GeoIP: mirror P3TERX al posto di download.dbip.com non piu attivo.
  • URL CINS Army: corretto.
  • Codici paese mostrati al posto dei nomi: corretto.

Modificato

  • Rimosso l'enricher AbuseIPDB: rimane solo GeoIP mmdb.
  • Riepilogo di avvio di guard: ora stampa le statistiche blocklist + country-block.
  • Go 1.25.13.

0.3.0 — 2026-08-06

Aggiunto

  • 3 nuove categorie di rilevamento (26 totali): jwt_abuse, object_enumeration, beaconing.
  • export-sigma: 23 regole Sigma YAML con tag MITRE e uuidV5.
  • --defang, tail --detect, barra di avanzamento, GeoIP, funzionalita Guard (--subnet-limit, --rps-anomaly, --cred-stuffing-limit, --trust-forwarded), --state-file su block/unban, throughput 2×, istogramma, tag MITRE, filtri (--host, --max-latency, ecc.).

Corretto

  • Race allo spegnimento di guard, dirty-flag, ListBlockedIPs, sincronizzazione dello stato, regole duplicate, codici di uscita, loadState nei test. Timestamp zero nel rilevamento, limite di PathTimestamps, LRU, literal, rotazione UA, audit logger, fan-in reader, TUI, output, parser, leak cmd: consulta il git log.

Modificato

  • Nuove famiglie di pattern, Go 1.24.6, golangci-lint v2, LRU reale, cache 10K, falsi positivi dello scanner ridotti.

0.2.0 — 2026-08-01

Aggiunto

  • Rilevamento multi-categoria (DetectAll), punteggio di confidenza (1–10), audit log (--audit-log), persistenza dello stato (--state-file), allowlist (--never-block*), validazione, versione ldflags, gate CI, SBOM + cosign.

Corretto

  • Duplicati regex, race sulla mappa blocked, indice parseBlockedIPs, errori di ParseDuration ignorati, leak goroutine, perdita alla rotazione, processi zombie, installer, escaper HTML, duplicati scanner, CI Windows.

Modificato

  • Nuove famiglie di pattern, Go 1.24, pin Dockerfile, iptables -S, permessi 0750/0600.

0.1.3 — 2026-07-30

22 categorie, matching URI grezzo, firme ampliate, oltre 55 test, README security-first, docs/security.html.

0.1.2 — 2026-07-29

Filtraggio CIDR su --ip, elenco intelligente dei filtri, filtri tail, visualizzazione dei filtri attivi, colori TUI, dettagli sospetti, API MatchEntry.

0.1.1 — 2026-07-28

Modalita di ispezione --detect, valori predefiniti top, config show/reset, formattazione pulita del terminale, sito della documentazione, diagnostica dei permessi.

0.1.0 — 2026-07-28

Release iniziale: parsing JSON Caddy, classificazione del traffico, P50/P95, larghezza di banda, --detect (8 categorie), guard, block/unban, tail, top, diff, report HTML, TUI a 6 schede, reader multi-sorgente, installer, CI, GoReleaser, GitHub Pages.