refactor: distribute Acaua as a Docker image instead of a desktop app
Release / Plan (reuse the published image?) (push) Successful in 3s
CI / Docker image (build and smoke test) (push) Skipped
CI / Format and clippy (push) Successful in 4m32s
CI / Dependency audit (push) Successful in 11s
CI / Tests (Linux) (push) Successful in 9m15s
Release / ci (push) Successful in 9m18s
Release / Build image (arm64) (push) Failing after 7m7s
Release / Build image (amd64) (push) Failing after 13m53s
Release / Publish tags (push) Skipped
Release / Gitea release (push) Skipped
Release / Plan (reuse the published image?) (push) Successful in 3s
CI / Docker image (build and smoke test) (push) Skipped
CI / Format and clippy (push) Successful in 4m32s
CI / Dependency audit (push) Successful in 11s
CI / Tests (Linux) (push) Successful in 9m15s
Release / ci (push) Successful in 9m18s
Release / Build image (arm64) (push) Failing after 7m7s
Release / Build image (amd64) (push) Failing after 13m53s
Release / Publish tags (push) Skipped
Release / Gitea release (push) Skipped
Acaua is a collective SOC daemon consuming only Zeek log files, not a single-user tool needing local hardware like its siblings. Drop the Tauri desktop shell, installers and self-update entirely; the server and its web dashboard ship as a container, updated by pulling a new image tag. Link against the official prebuilt libduckdb instead of compiling it from source via the bundled feature, cutting image build time from 15+ minutes to about 3. Fix a real bug found along the way: as PID 1 in a container, the daemon ignored SIGTERM and was always killed after the stop timeout; it now shuts down gracefully. Also corrects the Pillar 1 beaconing score: the period estimate had a harmonic alias (a perfectly periodic 4h series resolved to 600s), and the old score formula flagged pure random traffic as suspicious (p95 = 0.839 on Poisson noise). The new formula was validated against 300 samples per scenario. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VAyr8d7HuAdUGB6aA5xmDD
This commit is contained in:
1 parent
1b974bb90d
commit
8a80504c45
72 files changed
+2524
-6384
No files matched your search
+34
-29
@@ -27,9 +27,8 @@ produziram esta pontuação".
|
||||
protocolo necessários para identidade e movimento lateral. NetFlow/IPFIX é um
|
||||
modo degradado documentado, nunca apresentado como equivalente. Suricata EVE
|
||||
JSON é uma entrada secundária opcional.
|
||||
- **Daemon e desktop:** `acaua serve` roda ingestão contínua, agendador, API e a
|
||||
UI embutida; o app Tauri abre um dataset local ou conversa com um `serve`
|
||||
remoto.
|
||||
- **Daemon servidor e dashboard web:** `acaua serve` roda ingestão contínua,
|
||||
agendador, API e o dashboard web embutido, distribuído 100% via Docker.
|
||||
- **Pesquisa fora do produto:** `research/` é um espaço Python isolado para
|
||||
validação científica e fixtures. Ele nunca é compilado, empacotado ou
|
||||
distribuído.
|
||||
@@ -40,11 +39,12 @@ produziram esta pontuação".
|
||||
|---|---|
|
||||
| Workspace Rust e stubs da CLI | ✅ compila |
|
||||
| API Axum com rotas de health, status, alertas e análise | ✅ stub |
|
||||
| Shell desktop e UI vanilla | ✅ shell, sem screenshots reais |
|
||||
| Dashboard web embutido | ✅ shell da UI, servido pelo daemon |
|
||||
| Documentação e workflows de CI/release | ✅ |
|
||||
| Imagem Docker multi-arch e deployment com Compose | ✅ |
|
||||
| Armazenamento analítico DuckDB | ✅ biblioteca oficial pré-compilada linkada |
|
||||
| Quatro pilares de detecção | 🚧 em desenvolvimento |
|
||||
| Parser de logs Zeek | 🚧 stub |
|
||||
| Armazenamento DuckDB/Parquet e TTL de 7 dias | 🚧 reservado, feature desligada por padrão |
|
||||
| Evidência e pontuação de alertas | 🚧 stub |
|
||||
| Releases publicadas | ❌ nenhuma ainda |
|
||||
|
||||
@@ -72,20 +72,34 @@ autorização explícita para monitorar. Capturar ou analisar tráfego de tercei
|
||||
sem permissão pode ser ilegal. O operador é responsável por escopo, privacidade e
|
||||
retenção.
|
||||
|
||||
O daemon escuta em `127.0.0.1` por padrão. A implantação opcional com Docker é
|
||||
documentada para laboratório e pesquisa.
|
||||
O daemon escuta em `127.0.0.1` por padrão. A implantação via Docker Compose
|
||||
isola o daemon em um container não privilegiado, somente leitura e sem capabilities.
|
||||
|
||||
## Instalação
|
||||
|
||||
Ainda não há releases publicadas. Compile do código:
|
||||
Executar via Docker Compose (recomendado para operadores):
|
||||
|
||||
```bash
|
||||
cp .env.example .env
|
||||
docker compose pull && docker compose up -d
|
||||
```
|
||||
|
||||
Ou compilar e rodar localmente com Docker:
|
||||
|
||||
```bash
|
||||
docker compose up -d --build
|
||||
```
|
||||
|
||||
Para compilar do código nativamente (requer Rust 1.88+):
|
||||
|
||||
```bash
|
||||
scripts/fetch-libduckdb.sh ~/.cache/acaua/duckdb
|
||||
export DUCKDB_LIB_DIR=~/.cache/acaua/duckdb LD_LIBRARY_PATH=~/.cache/acaua/duckdb
|
||||
cargo build --release -p acaua-cli
|
||||
./target/release/acaua --help
|
||||
```
|
||||
|
||||
É preciso Rust 1.80+. O app desktop precisa das dependências de sistema do Tauri
|
||||
para a sua plataforma.
|
||||
Matriz de plataformas suportadas para as imagens publicadas: `linux/amd64` e `linux/arm64`.
|
||||
|
||||
## Começando
|
||||
|
||||
@@ -97,39 +111,30 @@ acaua update
|
||||
```
|
||||
|
||||
O `analyze` hoje valida o diretório e devolve um relatório de esqueleto; ele
|
||||
ainda não lê logs Zeek. O `serve` expõe a API stub e a UI embutida. O `update`
|
||||
usa o mesmo modelo de Gitea Releases + SHA-256 do Guará e do Sabiá.
|
||||
|
||||
## App desktop
|
||||
|
||||
O app Tauri é um shell para a mesma UI usada pelo `serve`. Ele tem um painel dos
|
||||
quatro pilares, um campo de caminho de dataset, um painel de alertas e
|
||||
configurações de idioma e tema. Ele **ainda não** renderiza resultados de
|
||||
detecção. Veja **[docs/pt-BR/interface.md](docs/pt-BR/interface.md)**.
|
||||
ainda não lê logs Zeek. O `serve` expõe a API stub e o dashboard web embutido.
|
||||
O `update` checa por versões novas e orienta a atualização da imagem do container.
|
||||
|
||||
## Desenvolvimento
|
||||
|
||||
```bash
|
||||
scripts/fetch-libduckdb.sh ~/.cache/acaua/duckdb
|
||||
export DUCKDB_LIB_DIR=~/.cache/acaua/duckdb LD_LIBRARY_PATH=~/.cache/acaua/duckdb
|
||||
cargo test --workspace
|
||||
cargo clippy --workspace --all-targets
|
||||
node scripts/check-ui-i18n.mjs
|
||||
scripts/check.sh
|
||||
scripts/check.sh --full
|
||||
```
|
||||
|
||||
O backend DuckDB opcional é compilado com `--features duckdb`; ele fica desligado
|
||||
por padrão para o esqueleto continuar rápido de verificar. Veja
|
||||
**[CONTRIBUTING.pt-BR.md](CONTRIBUTING.pt-BR.md)** e
|
||||
Veja **[CONTRIBUTING.pt-BR.md](CONTRIBUTING.pt-BR.md)** e
|
||||
**[docs/pt-BR/arquitetura.md](docs/pt-BR/arquitetura.md)**.
|
||||
|
||||
## Limites conhecidos
|
||||
|
||||
- O motor de detecção, o parser Zeek e a camada de armazenamento são stubs.
|
||||
- Não há binário, instalador ou asset de release publicado.
|
||||
- A GUI não tem screenshots reais porque ainda não há nada para renderizar.
|
||||
- Não há imagem de release publicada ainda.
|
||||
- NetFlow/IPFIX é um modo degradado por projeto; ele não substitui os logs de
|
||||
protocolo do Zeek em todos os pilares.
|
||||
- O projeto mira Linux para o daemon e para o pipeline de release do CI. O app
|
||||
desktop segue a mesma matriz Tauri dos projetos irmãos.
|
||||
- O projeto mira ambientes de container Linux (`linux/amd64`, `linux/arm64`).
|
||||
|
||||
## Para onde vai
|
||||
|
||||
@@ -137,9 +142,9 @@ Resumo do [ROADMAP](ROADMAP.pt-BR.md):
|
||||
|
||||
| | |
|
||||
|---|---|
|
||||
| **Feito** | Workspace, stubs de CLI/API, shell da GUI, documentação, workflows de CI/release |
|
||||
| **Feito** | Workspace, stubs de CLI/API, dashboard web, containerização Docker, workflows de CI/release |
|
||||
| **Próximo** | Implementação dos pilares 1 e 2 com fixtures determinísticas; parser Zeek real |
|
||||
| **Depois** | Armazenamento DuckDB/Parquet, TTL, pilares 3 e 4, fusão de evidências, visão de dataset no desktop |
|
||||
| **Depois** | Particionamento Parquet completo, limpeza por TTL, pilares 3 e 4, fusão de evidências |
|
||||
| **Fora de plano** | Pontuação por IA opaca, serviço de nuvem obrigatório, Python no runtime distribuído |
|
||||
|
||||
## Licença
|
||||
|
||||
Reference in new issue
Block a user