v0.8.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.8.1 — 2026-10-19

Corretto

  • Immagine Docker mancante (#120): pubblicazione su ghcr.io/lenny-ts/caddy-analyzer dopo i rilasci riusciti per Linux amd64 e arm64, con tag di versione con e senza v. Solo le release stabili aggiornano latest. Il workflow verifica la versione dell'immagine pubblicata.

Modificato

  • Build Docker: cross-compilazione Go sulla piattaforma di build e cache dei layer su GitHub Actions, evitando la compilazione emulata ARM64.
  • Documentazione del rilascio: aggiunti pull Docker con versione, build locali e verifica iniziale della visibilità pubblica del package; chart Helm aggiornato all'app 0.8.1.

0.8.0 — 2026-10-13

Aggiunto

  • Protezione automatica dall'auto-ban in guard: rileva per default gli IP delle interfacce e di uscita pubblica, li aggiorna ogni 30 secondi e prima dei nuovi ban e protegge gli indirizzi dinamici da soglie, pattern, feed, regole geografiche e subnet che li contengono. --protect-self=false disabilita il rilevamento.

Modificato

  • Requisiti di rete di guard: rilevamento HTTPS diretto e specifico per famiglia tramite ipify, con icanhazip come alternativa. Un errore all'avvio impedisce a guard di partire; durante l'esecuzione sospende i nuovi ban e indica di riavviare con --protect-self=false. Le whitelist esplicite restano disponibili.
  • Indicazioni per l'aggiornamento di guard: il rilevamento ignora il proxy HTTP, verifica ogni famiglia richiesta e aggiunge latenza sincrona prima dei ban (4 secondi per richiesta, 10 complessivi). I servizi nelle reti limitate possono aggiungere --protect-self=false agli argomenti di avvio; gli IP amministratore remoti richiedono ancora voci whitelist separate.
  • Documentazione del rilascio: aggiornate le pagine inglesi e italiane di guard, CLI, configurazione, risoluzione problemi, FAQ, architettura e API, con esempi per amministratori remoti e reti limitate.

Corretto

  • Ban salvati su IP protetti: non ricrea i ban sugli IP del server o autorizzati; rimuove regole firewall e stato corrispondenti, riprovando le rimozioni fallite.
  • Scadenze obsolete: le scadenze lasciate dopo la pulizia non rimuovono ban più recenti e non producono eventi di sblocco duplicati.
  • Segnalazione dei ban immediati: blocklist e regole geografiche segnalano un ban solo quando il blocco è stato applicato o simulato con successo.

0.7.5 — 2026-10-10

Modificato

  • Date negli elenchi dei log (#115): tail e gli elenchi filtrati mostrano ora YYYY-MM-DD HH:MM:SS per richieste HTTP ed eventi operativi, permettendo di distinguere i giorni nei log storici.
  • Dipendenze delle action di rilascio (#114): aggiornate le revisioni fissate di anchore/sbom-action alla v0.24.3 e sigstore/cosign-installer alla v4.1.2 (Cosign v3.0.6).

Corretto

  • Compatibilità del rilascio con Cosign 3: conservati i file di firma e certificato insieme al bundle Sigstore disabilitando il percorso signing-config, per mantenere la verifica con gli updater precedenti.

0.7.4 — 2026-09-28

Corretto

  • Righe grandi nei log di accesso Caddy: accetta record fino a 16 MiB invece di fermarsi al limite di 1 MiB di bufio.Scanner, permettendo a --detect di analizzare entry con header o URI molto grandi.

0.7.3 — 2026-09-12

Aggiunto

  • Domini principali nella dashboard live (#104): --watch include una nona scheda dedicata (tasto 6) con i primi 20 host per numero di richieste. User agent, Geo e Operativo passano rispettivamente ai tasti 7, 8 e 9.

Modificato

  • Dipendenze GitHub Actions (#103): aggiornate alle revisioni correnti e fissate le action per checkout, lint, Pages, SBOM, GoReleaser, Cosign e pubblicazione release.

Corretto

  • Toolchain CI di Govulncheck (#104): la scansione puo scaricare la toolchain Go richiesta dall'ultima versione di govulncheck, mentre il progetto resta su Go 1.25.

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.