Início Rápido
Docker, build local e configuração básica
Início Rápido
Docker (recomendado para produção)
docker compose -f deploy/docker/docker-compose.yml up -dO compose faz o build da imagem e sobe dois serviços: sentry (daemon +
Postgres configurado via env) e postgres (banco de eventos/incidentes/regras).
Detalhes completos em Deploy com Docker.
Segredos vão em variáveis de ambiente, nunca no config:
export SENTRY_CF_TOKEN=xxx # Cloudflare API token (opcional)
export SENTRY_CF_ZONE=yyy # Cloudflare zone ID (opcional)
export SENTRY_LLM_KEY=zzz # LLM key (opcional; OpenRouter/Ollama/…)
export SENTRY_STORAGE__POSTGRES__URL=postgres://sentry:secret@db/sentryBuild local (desenvolvimento)
cargo build --release
./target/release/sentry config validate
./target/release/sentry runFeatures pesadas são opt-in e não entram no build default:
cargo build --release --features sentry-cli/onnx # IA local (ONNX)
cargo build --release --features sentry-cli/edge-tls # TLS 443 (JA3/JA4)
cargo build --release --features sentry-cli/edge-zstd # compressão zstdConfiguração
Copie config/sentry.example.toml
→ sentry.toml e edite. O binário procura sentry.toml no diretório corrente
ou /etc/sentry/sentry.toml; sobrescreva com --config ou SENTRY_CONFIG.
O overlay de env (SENTRY_<SECTION>__<KEY>) sobrescreve qualquer campo do
TOML — por isso SENTRY_STORAGE__POSTGRES__URL funciona sem tocar no arquivo.
Config mínima funcional (source nginx + Postgres + packs + actions):
[core]
data_dir = "/var/lib/sentry"
[storage.postgres]
url = "postgres://sentry:changeme@localhost:5432/sentry"
[[rules.pack]]
name = "sensitive_paths"
mode = "enforce" # shadow | enforce | off
[[source]]
type = "nginx"
[source.options]
path = "/var/log/nginx/access.log"
format = '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"'
[[action]]
type = "blocklist"
[action.options]
ttl_secs = 86400
[[action]]
type = "log"O mapeamento de veredito é configurável em [policy] (default: Info/Low →
allow, Medium → rate_limit, High → challenge, Critical → block). Referência
completa de todas as seções em Configuração.
Rodando o monitor
sentry run # inicia o daemon (foreground)
sentry config validate # valida a config
sentry tail # live tail de eventos + risk colorido (TUI)
sentry tail --only High,Critical
sentry tail --stream --json # uma linha JSONL por evento (fora de TTY, auto)
sentry serve # dashboard web + JSON API (requer Postgres)
sentry test "<payload>" --path /login --method POST # dry run do pipelineO dashboard (sentry serve) serve a SPA embutida em [server] host/port
(default 127.0.0.1:8080) com feed de eventos, incidentes, IPs bloqueados e
auth opcional Argon2id + RBAC (sentry auth hash-password).
Rules e packs
O rules engine roda antes das heurísticas e da IA (fast path). Ordem de
precedência: Allow (bypass total) > Block/Challenge/RateLimit
(short-circuit) > Log/Tag (anota e continua) > cai para heurísticas + IA.
Packs default (packs.rs):
vpn_proxy, tor, crawlers_bad, crawlers_good, sensitive_paths,
empty_ua, http_anomaly, rate_scan, country_blocklist,
host_allowlist. Cada pack roda em shadow (log only), enforce (age) ou
off — sensitive_paths, crawlers_bad e crawlers_good já vêm em
enforce; os demais em shadow ou off.
Gerencie por cima do engine com sentry rules packs | list | test,
sentry feeds list | refresh | check <ip> e
sentry datasets import | list | enable | disable (listas UA/path/JA3 no
Postgres, hot-reload nos daemons vivos).
Para produção: comece com tudo em
shadowe observe os logs antes de trocar paraenforce.
Próximos passos
- Rules Engine — DSL, packs e datasets.
- Plugins — sources, actions e challenge providers.
- IA — heurísticas, ONNX local, LLM opcional.
- CLI — referência completa de comandos.
- Configuração — referência do
sentry.toml. - Deploy — Docker e Kubernetes.