v0.7.1 · aggiornata · GitHub

Tutti i comandi

Questa pagina spiega cosa fa ogni comando, cosa legge o modifica e quale modalità scegliere. Usa caddy-analyze <comando> --help per vedere i flag esatti del binario installato. La sezione completa dei flag distingue opzioni persistenti, modalità solo root e opzioni proprie dei comandi.

Scegli il comando

ObiettivoComandoEffetto
Riassumere uno o più logcaddy-analyze SOURCE...Report in sola lettura
Cercare richieste sospettecaddy-analyze --detect SOURCE...Report delle minacce
Seguire le nuove vocitail o --followFlusso/report in sola lettura
Vedere le classifichetopAggregazione in sola lettura
Confrontare due periodidiffConfronto in sola lettura
Salvare un periodo di riferimentobaseline saveScrive JSON
Bloccare automaticamente gli attaccantiguardPuò modificare il firewall
Bloccare o sbloccare manualmenteblock / unbanModifica il firewall
Gestire i feed di threat intelligenceblocklistScrive cache/config, non il firewall
Gestire le impostazioni predefiniteconfigScrive la configurazione
Proteggere gli IP fidatiwhitelistScrive l'allowlist
Esportare le regole di detectionexport-sigmaScrive YAML o stdout
Installare una releaseupdateSostituisce il binario

Analisi: comando principale

caddy-analyze [flags] [source...]
caddy-analyze --detect --format json access.log
caddy-analyze --from 1h --5xx /var/log/caddy/*.log

Senza sottocomando, il tool analizza log JSON di accesso Caddy ed eventi operativi, applica i filtri, calcola le metriche e stampa un report tabellare. Le sorgenti possono essere file o glob locali, - per stdin, docker://container, k8s://pod o journalctl://unit. Se non specifichi una sorgente viene usata quella predefinita configurata.

--detect attiva il motore di sicurezza a doppio passaggio e aggiunge al report IP sospetti, categorie, confidence ed evidenze. Non blocca nulla. Usa --format json per l'automazione, --format csv per i fogli di calcolo e --format html -o report.html per condividere il risultato. I filtri vengono combinati; per esempio --ip, --path, --slow e --5xx devono essere tutti soddisfatti.

# Analizzare stdin con output per macchine
cat access.log | caddy-analyze --detect --format json -

# Solo errori server lenti nelle ultime due ore
caddy-analyze --from 2h --5xx --slow 500ms access.log

# Inviare i documenti a Loki
caddy-analyze --format loki --remote-url https://logs.example/api/prom/push access.log

tail

caddy-analyze tail [source...] [--detect]

Trasmette le voci appena arrivano e colora stato, metodo, percorso, latenza e IP client. È la scelta interattiva per diagnosticare un servizio attivo. --detect evidenzia inline le richieste sospette e non modifica il firewall. I filtri si applicano anche qui.

caddy-analyze tail docker://caddy --detect --5xx
caddy-analyze tail --grep '/admin|wp-login' /var/log/caddy/access.log

top

caddy-analyze top [dimension] [source...] [flags]

Calcola solo una classifica invece del report completo. Le dimensioni sono path, ip, ua, status, method, host, bandwidth, country, city e asn. La dimensione può essere posizionale o passata con --by; il default è path. Usa -t 0 per disabilitare la lista.

caddy-analyze top ip access.log -t 20
caddy-analyze top bandwidth access.log --from 24h
caddy-analyze top --by status --5xx access.log
caddy-analyze top country --geoip-db GeoLite2-Country.mmdb access.log

diff

caddy-analyze diff <baseline_log> <target_log> [flags]

Confronta due file di log locali e mostra le variazioni di richieste al secondo, errori e latenza. Il primo file è il periodo di riferimento, il secondo quello da esaminare. Non crea un baseline salvato; usa --format json o --output per CI e controlli pianificati.

caddy-analyze diff ieri.log oggi.log
caddy-analyze diff prima.log dopo.log --format json -o regressione.json

baseline save

caddy-analyze baseline save <source...> -o baseline.json [--detect]

Analizza una sorgente e salva uno snapshot JSON versionato delle metriche aggregate. È utile per conservare il riferimento di un deployment funzionante. --detect include le statistiche di detection. Salvare un baseline non blocca gli IP.

caddy-analyze baseline save access.log --from 7d -o baseline.json --detect
caddy-analyze --against baseline.json access.log --threshold 15

guard

sudo caddy-analyze guard [source] [flags]

Monitora continuamente una sorgente e blocca automaticamente gli IP che superano le soglie di richieste, autenticazione, 404 o detection. In base a --firewall-backend può modificare iptables, nftables, la catena Docker DOCKER-USER o una combinazione. I blocchi possono essere persistiti e ogni azione può essere registrata.

Sicurezza firewall
Proteggi il tuo IP con --never-block o --never-block-file prima di eseguire il comando su un host remoto. Prova prima --dry-run. La modalità normale richiede root; la simulazione non modifica firewall o stato.
sudo caddy-analyze guard /var/log/caddy/access.log --dry-run
sudo caddy-analyze guard docker://caddy --never-block 203.0.113.10 \
  --firewall-backend hybrid --state-file /var/lib/caddy-analyzer/blocked.json

--country-block blocca subito i paesi indicati quando GeoIP è disponibile. I feed blocklist sono attivi di default e si disabilitano con --no-blocklist. Per tutte le soglie e i sink consulta la pagina dedicata guard.

block e unban

sudo caddy-analyze block <ip> [ip...]
sudo caddy-analyze unban <ip> [ip...] | --all | --list

block aggiunge uno o più indirizzi al firewall e, salvo disabilitazione, aggiorna il file di stato di guard. unban rimuove gli indirizzi scelti; --list mostra soltanto lo stato corrente e --all rimuove tutti i blocchi tracciati.

sudo caddy-analyze block 198.51.100.7
sudo caddy-analyze unban --list
sudo caddy-analyze unban 198.51.100.7

blocklist

caddy-analyze blocklist refresh|list|config|init [flags]

Scarica e analizza i feed di threat intelligence usati da guard. refresh aggiorna la cache, list mostra feed e conteggi, config stampa la configurazione effettiva e init salva le impostazioni. Queste operazioni non installano regole firewall.

caddy-analyze blocklist refresh
caddy-analyze blocklist list -f json
caddy-analyze blocklist --blocklist-config custom.json \
  --no-default-blocklists init

config

caddy-analyze config [show|set|reset|source] [--global]

Imposta la sorgente predefinita usata quando il comando principale non riceve una sorgente posizionale. Senza --global salva in ./caddy-analyzer.json; con il flag salva in ~/.config/caddy-analyzer/config.json. show mostra la scelta attiva e reset rimuove il file selezionato.

caddy-analyze config /var/log/caddy/access.log
caddy-analyze config docker://caddy --global
caddy-analyze config show
caddy-analyze config reset

whitelist

sudo caddy-analyze whitelist [--add IP/CIDR] [--remove IP/CIDR]
caddy-analyze whitelist --list [--file PATH]

Gestisce il file degli IP e CIDR che guard non deve mai bloccare. Il default è /etc/caddy-analyzer/whitelist.txt. --init lo crea con intestazione, --add e --remove accettano valori separati da virgole e --list stampa le voci. Passa lo stesso file a guard con --never-block-file.

export-sigma

caddy-analyze export-sigma [output-file]

Esporta le categorie integrate di detection in YAML Sigma multi-documento. Senza file scrive su stdout, con un file salva l'intero set di regole. Le regole sono indipendenti dal vendor e includono i tag MITRE ATT&CK.

caddy-analyze export-sigma rules.yml
caddy-analyze export-sigma - | sigma check

update

caddy-analyze update [--check|--version TAG|--force]

Controlla e installa una release verificata da GitHub. L'installazione è fail-closed: cosign deve validare il manifest firmato e l'hash dell'archivio deve corrispondere. --check non installa, --version fissa un tag, --force consente reinstallazione o downgrade e --install-dir sceglie la directory. Se la verifica fallisce il binario corrente resta intatto.

caddy-analyze update --check
sudo caddy-analyze update
caddy-analyze update --version v0.7.0 --install-dir ~/.local/bin

completion e versione

caddy-analyze --version
caddy-analyze completion bash > ~/.local/share/bash-completion/completions/caddy-analyze
caddy-analyze completion zsh
caddy-analyze completion fish

--version stampa la versione installata. Il comando nascosto completion genera completamenti per bash, zsh o fish e richiede esattamente uno di questi nomi.

Combinazioni utili

# Indagare uno scan senza intraprendere azioni
caddy-analyze --detect --grep 'wp-login|\.env|/admin' access.log

# Creare un baseline confrontabile e cercare regressioni
caddy-analyze baseline save baseline.log -o baseline.json
caddy-analyze --against baseline.json current.log --threshold 20

# Simulare guard e poi attivare il blocco
sudo caddy-analyze guard access.log --dry-run --never-block-file whitelist.txt
sudo caddy-analyze guard access.log --never-block-file whitelist.txt
Continua
Consulta il Riferimento CLI per la matrice completa dei flag, Sorgenti log per la sintassi delle sorgenti e Security Detection per categorie, confidence ed evidenze.

Flag globali: riferimento completo

La maggior parte dei flag è persistente e viene ereditata dai sottocomandi. Le modalità solo root sono --follow, --interval, --watch, --detect root e --version; tail ha il proprio --detect locale. Un valore omesso lascia attivo il default. Le durate usano la sintassi Go, ad esempio 500ms, 5m o 1h.

FlagDefaultFunzione
--fromnessunoMantiene le voci successive a un istante RFC3339 o a un intervallo relativo come 5m, 1h, 2d.
--tonessunoMantiene le voci precedenti all'istante RFC3339 indicato.
--status, -stuttiSeleziona uno o più codici HTTP, per esempio -s 200,404; si può ripetere.
--2xx, --3xx, --4xx, --5xxfalseScorciatoie per includere una classe di stato.
--errors-only, -efalseLimita ai soli errori server 5xx.
--method, -mnessunoFiltra per metodo HTTP, senza distinzione tra maiuscole e minuscole.
--path, -pnessunoFiltra il percorso con un glob, ad esempio /api/*.
--hostnessunoFiltra per sottostringa dell'host della richiesta.
--ip / --exclude-ipnessunoIncludono o escludono un IP o una rete CIDR.
--country / --exclude-countrynessunoIncludono o escludono paesi con codice ISO o nome; richiedono GeoIP.
--asn / --exclude-asnnessunoIncludono o escludono numeri ASN; richiedono GeoIP.
--slownessunoSeleziona richieste più lente della durata indicata.
--max-latencynessunoSeleziona richieste non più lente della durata indicata.
--min-size / --max-sizenessunoLimitano la dimensione della risposta; accettano byte e suffissi kb, mb, gb.
--grepnessunoCerca un pattern su URI, User-Agent e IP; usa regex valide e ripiega sulla sottostringa se il pattern non è regex.
--no-bots / --bots-onlyfalseEscludono o includono soltanto bot e crawler classificati.
--leveltuttiFiltra gli eventi operativi per error, warn, info o debug; ripetibile.
--ops-onlyfalseMostra solo eventi operativi non HTTP.
--top, -t10Numero di elementi nelle classifiche; 0 disabilita le classifiche.
--format, -ftableOutput table, json, csv, html, elasticsearch, opensearch o loki secondo il comando.
--output, -ostdoutScrive l'output in un file invece che su stdout.
--compact, -cfalseRiduce il layout dei report tabellari.
--defangfalseTrasforma i punti degli IP in [.] per condividere gli indicatori senza renderli cliccabili.
--workersCPU disponibiliNumero di parser paralleli; 0 seleziona automaticamente. La riduzione dei risultati resta ordinata.
--max-cardinality100000Limita le chiavi distinte per contatore per contenere la memoria; 0 significa illimitato.
--trust-forwardedfalseUsa l'ultimo hop pubblico di X-Forwarded-For/X-Real-IP; attivalo solo dietro proxy fidati.
--geoip-dbautoIndica il file mmdb DB-IP o MaxMind. Se vuoto tenta l'auto-discovery.
--no-auto-downloadfalseImpedisce il download automatico del database DB-IP al primo uso GeoIP.
--geo-cache-ttl24hDurata degli elementi nella cache GeoIP; 0 disabilita la cache.
--geo-cache-size50000Numero massimo di lookup GeoIP in cache; 0 disabilita la cache.
--ua-rotation10Numero di User-Agent distinti dallo stesso IP prima dell'euristica di rotazione/scanner.
--custom-patternsnessunoCarica uno o più file JSON di regole custom validati dal motore.
--againstnessunoConfronta l'analisi corrente con un baseline JSON e restituisce errore se supera la soglia.
--threshold20%Soglia percentuale usata dal confronto con baseline.
--namespace, -nnessunoNamespace Kubernetes per sorgenti k8s://.
--follow, -FfalseSegue i nuovi log e produce report periodici; modalità root.
--interval, -inessunoImposta la durata delle finestre aggregate in modalità follow.
--watch, -wfalseApre la dashboard TUI live; richiede un terminale.
--detect, -dfalseAttiva la detection delle minacce nel report root.
--remote-urlnessunoEndpoint HTTP per output Elasticsearch/OpenSearch bulk o Loki; obbligatorio per quei formati.
--remote-indexcaddy-analyzerIndice Elasticsearch/OpenSearch.
--remote-user, --remote-passwordnessunoCredenziali Basic HTTP per l'endpoint remoto.
--remote-tokennessunoBearer token HTTP; non usare insieme alle credenziali Basic salvo necessità dell'endpoint.
--remote-batch-size100Documenti per richiesta remota.
--remote-retries3Nuovi tentativi dopo il primo invio.
--remote-backoff250msAttesa iniziale tra tentativi remoti.
--remote-timeout10sTimeout di ogni richiesta remota.

Flag propri dei sottocomandi

tail

tail --detect abilita l'evidenziazione inline delle richieste sospette. Tutti i filtri globali restano disponibili, ma tail non produce un report aggregato e non blocca IP.

top

top --by DIMENSION è l'alternativa al parametro posizionale. Le dimensioni valide sono path, ip, ua, status, method, host, bandwidth, country, city e asn. country, city e asn richiedono un database GeoIP compatibile.

baseline save

baseline save --detect include le statistiche di sicurezza nel JSON. --output è necessario per conservare il file e il baseline deve essere generato con gli stessi filtri che userai nel confronto.

blocklist

FlagUso
--cache-dirDirectory in cui salvare i file dei feed scaricati.
--no-default-blocklistsDisabilita gli otto feed predefiniti; utile con una configurazione solo custom.
--blocklist-config FILEAggiunge file JSON con sorgenti name, url e, se necessario, format; ripetibile.
--blocklist-remove NAMERimuove sorgenti nominate dalla configurazione; accetta valori separati da virgole.
--format table|jsonFormato di list e config.

Le azioni sono: refresh scarica e aggiorna la cache; list mostra stato, età, errori e conteggi; config stampa la configurazione; init salva le impostazioni correnti per i comandi successivi. Nessuna azione modifica il firewall.

guard

FlagDefaultUso
--limit, -l100Richieste HTTP per IP nella finestra prima del blocco; 0 disabilita.
--window, -w1mFinestra scorrevole, calcolata con bucket per secondo.
--duration, -d10mDurata del blocco; 0 significa permanente.
--auth-limit10Numero di risposte 401/403 prima del blocco; 0 disabilita.
--notfound-limit50Numero di 404 prima del blocco; 0 disabilita.
--detect-confidence8Confidence minima 1-10 per il blocco da pattern; 0 disabilita solo questo percorso.
--firewall-backendautoBackend auto, iptables, docker, nftables o hybrid.
--dry-runfalseValuta e registra i blocchi possibili senza modificare firewall o state file.
--country-blocknessunoBlocca immediatamente i paesi ISO indicati tramite GeoIP.
--no-blocklistfalseDisabilita il controllo degli otto feed.
--blocklist-refresh6hIntervallo di refresh dei feed; minimo 1h, 0 disabilita.
--cache-dircache utenteDirectory dei feed cache.
--never-blocknessunoIP/CIDR da proteggere sempre; ripetibile.
--never-block-filenessunoFile con un IP/CIDR per riga e commenti #.
--state-file/var/lib/caddy-analyzer/blocked.jsonPersistenza e recupero dei blocchi dopo un riavvio; vuoto disabilita.
--iptables-timeout10sTimeout di ogni invocazione firewall.
--subnet-limit0Blocca una rete /24 o /64 quando le richieste distribuite superano la soglia.
--rps-anomaly0Segnala un picco RPS rispetto alla baseline EWMA; è un alert audit, non un blocco.
--cred-stuffing-limit0Segnala IP distinti che falliscono lo stesso percorso; è un alert audit.
--audit-logJSONL in /var/logFile locale degli eventi; vuoto disabilita.
--audit-syslogdisabilitatoDestinazione UDP syslog, ad esempio 127.0.0.1:514.
--webhook-url / --audit-webhookdisabilitatoInvia notifiche a webhook generico, Slack, Discord o PagerDuty.
--webhook-providergenericProvider del webhook.
--pagerduty-routing-keynessunoRouting key richiesta dal provider PagerDuty; non viene scritta nei log.
--audit-timeout / --audit-retries5s / 2Timeout per sink e retry dopo il primo invio; massimo 5 retry.
--audit-rate-limit0Intervallo minimo tra notifiche dello stesso IP; 0 disabilita.

block e unban

Entrambi condividono i flag di audit: --audit-log, --audit-syslog, --webhook-url/--audit-webhook, --webhook-provider, --pagerduty-routing-key, --audit-timeout, --audit-retries e --audit-rate-limit. --state-file sincronizza i blocchi manuali con guard. In aggiunta, unban --list elenca gli IP attivi e unban --all li rimuove tutti; non usare entrambi insieme.

config

--global, -g seleziona il file globale invece di quello locale. Le forme brevi sono config SOURCE o config set SOURCE; config show mostra la configurazione attiva, config reset rimuove il file e config source gestisce la sorgente predefinita.

whitelist

--file sceglie il file, --init lo crea con intestazione, --add inserisce IP/CIDR, --remove li elimina e --list, -l stampa il contenuto. Il file deve poi essere passato a guard con --never-block-file.

update

--check controlla soltanto, --version TAG installa una release precisa, --force consente reinstallazione o downgrade e --install-dir DIR sostituisce il binario in una directory scelta. La verifica cosign e SHA256 è obbligatoria e un errore lascia intatta l'installazione.

export-sigma

Accetta al massimo un file di output. Il valore - o l'assenza del parametro scrive su stdout; un percorso scrive YAML Sigma multi-documento. I flag globali di analisi non cambiano l'insieme delle regole esportate.

help e --help

caddy-analyze help COMANDO mostra l'help di un comando senza eseguirlo; --help è disponibile su ogni comando e sottocomando. L'help generato dal binario è la fonte definitiva per verificare flag e default della versione in uso.