v0.7.1 · aggiornata · GitHub

guard

Segue una sorgente di log e blocca automaticamente gli IP che superano le soglie. Le esecuzioni normali modificano il firewall; usa --dry-run per eseguire il rilevamento senza modificare firewall o file di stato.

Richiede root
Le esecuzioni normali di guard richiedono sudo; --dry-run no. Prova con --never-block YOUR_IP oppure esegui prima blocklist refresh.

Sintassi

caddy-analyze guard [source] [flags]
# source: file, docker://name, k8s://pod -n ns, journalctl://unit, or via caddy-analyzer.json
# see Log Sources for syntax — this page covers guard flags only

Flag

FlagBrevePredefinitoDescrizione
--limit-l100Massime richieste HTTP per IP nella finestra prima del blocco
--window-w1mFinestra scorrevole (bucket al secondo)
--duration-d10mDurata del ban (0 = permanente)
--auth-limit10401/403 prima del blocco
--notfound-limit50404 prima del blocco
--detect-confidence8Confidenza minima 1-10 per blocchi da pattern (0 disabilita solo questo percorso; non è un dry run)
--firewall-backendautoauto|iptables|docker|nftables|hybrid
--dry-runfalseMostra i blocchi previsti ed emette eventi audit would_block senza modificare firewall o stato
--iptables-timeout10sTimeout iptables per invocazione
--country-blockCodici ISO da bloccare subito (ad es. CN,RU)
--no-blocklistfalseDisabilita gli 8 feed blocklist
--blocklist-refresh6hIntervallo di aggiornamento (min 1h, 0 disattivato)
--cache-dir~/.cache/…/blocklistsDirectory cache blocklist
--geoip-dbPercorso mmdb GeoIP (rilevamento automatico)
--no-auto-downloadfalseDisabilita il download automatico di GeoIP
--never-blockCIDR/IP da non bloccare mai (proteggi il tuo IP!)
--never-block-fileFile con CIDR (uno per riga, commento #)
--audit-log/var/log/…-audit.jsonlAudit JSON Lines (0600)
--state-file/var/lib/…/blocked.jsonConserva i blocchi tra i riavvii
--subnet-limit0Soglia di scansione distribuita /24 o /64
--rps-anomaly0Fattore di picco RPS EWMA (solo alert audit; richiede --audit-log)
--cred-stuffing-limit0IP distinti che falliscono sullo stesso percorso (solo alert audit; richiede --audit-log)
--ua-rotation10Soglia di rotazione UA
--trust-forwardedfalseUsa l'ultimo hop XFF pubblico

Esempio minimo

modifica il firewall — blocca IP reali. Consenti prima il tuo IP se usi un host remoto.

# allowlist yourself, then run guard on auto-discovered source
MY_IP=$(curl -s ifconfig.me)
sudo caddy-analyze guard --never-block $MY_IP --limit 50 --window 1m /var/log/caddy/access.log

Esempio avanzato

modifica il firewall — backend ibrido + paese + stato persistente. Per un'anteprima sicura della stessa logica aggiungi --dry-run: il terminale mostra i blocchi previsti e il sink audit riceve eventi would_block.

# hybrid = INPUT + DOCKER-USER; blocks survive restart; full audit
sudo caddy-analyze guard docker://caddy \
  --firewall-backend hybrid \
  --country-block CN,RU,IR \
  --never-block 10.0.0.0/8,192.168.1.50 \
  --never-block-file /etc/caddy-analyzer/whitelist.txt \
  --audit-log /var/log/caddy-analyzer-audit.jsonl \
  --state-file /var/lib/caddy-analyzer/blocked.json \
  --blocklist-refresh 6h \
  --detect-confidence 8
# verify what was blocked:
sudo caddy-analyze unban --list
cat /var/log/caddy-analyzer-audit.jsonl | tail
Non bloccarti fuori
Su una VM remota, passa sempre --never-block $(curl -s ifconfig.me) oppure il CIDR del tuo ufficio. Usa --dry-run per un'anteprima: legge lo stato esistente ma non ripristina regole e non scrive modifiche.