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
| Flag | Breve | Predefinito | Descrizione |
|---|---|---|---|
--limit | -l | 100 | Massime richieste HTTP per IP nella finestra prima del blocco |
--window | -w | 1m | Finestra scorrevole (bucket al secondo) |
--duration | -d | 10m | Durata del ban (0 = permanente) |
--auth-limit | 10 | 401/403 prima del blocco | |
--notfound-limit | 50 | 404 prima del blocco | |
--detect-confidence | 8 | Confidenza minima 1-10 per blocchi da pattern (0 disabilita solo questo percorso; non è un dry run) | |
--firewall-backend | auto | auto|iptables|docker|nftables|hybrid | |
--dry-run | false | Mostra i blocchi previsti ed emette eventi audit would_block senza modificare firewall o stato | |
--iptables-timeout | 10s | Timeout iptables per invocazione | |
--country-block | Codici ISO da bloccare subito (ad es. CN,RU) | ||
--no-blocklist | false | Disabilita gli 8 feed blocklist | |
--blocklist-refresh | 6h | Intervallo di aggiornamento (min 1h, 0 disattivato) | |
--cache-dir | ~/.cache/…/blocklists | Directory cache blocklist | |
--geoip-db | Percorso mmdb GeoIP (rilevamento automatico) | ||
--no-auto-download | false | Disabilita il download automatico di GeoIP | |
--never-block | CIDR/IP da non bloccare mai (proteggi il tuo IP!) | ||
--never-block-file | File con CIDR (uno per riga, commento #) | ||
--audit-log | /var/log/…-audit.jsonl | Audit JSON Lines (0600) | |
--state-file | /var/lib/…/blocked.json | Conserva i blocchi tra i riavvii | |
--subnet-limit | 0 | Soglia di scansione distribuita /24 o /64 | |
--rps-anomaly | 0 | Fattore di picco RPS EWMA (solo alert audit; richiede --audit-log) | |
--cred-stuffing-limit | 0 | IP distinti che falliscono sullo stesso percorso (solo alert audit; richiede --audit-log) | |
--ua-rotation | 10 | Soglia di rotazione UA | |
--trust-forwarded | false | Usa 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.