BLA
BLA는 오픈소스 Blue Defense MCP와 CLI로, 소프트웨어 자산을 자동 AI 리버스 엔지니어링으로부터 보호합니다
오픈소스 자체 호스팅 DMARC 모니터링으로 다수 클라이언트 도메인을 관리하고 스푸핑을 차단하며 시행을 지원합니다
Open-source, self-hosted DMARC monitoring for agencies running many client domains. Catch spoofing and reach enforcement, with no per-domain fees.
보안GitHub @dmarc-analyzer-net온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
저장소 정보는 아직 수집하지 않았습니다.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
Open-source, self-hosted DMARC monitoring for agencies — unlimited domains, automatic report ingestion, no per-domain pricing.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Open-source, self-hosted DMARC monitoring for agencies. Point it at the mailbox
your rua= reports arrive in and it collects, parses and charts them — unlimited
domains, many clients, no per-domain pricing, and the report data never leaves
your infrastructure.
Documentation · Install guide · Configuration · Kubernetes
Built with:
src/api)src/web)Run the analyzer from the published image — no build, no account, your data stays on your machine. Requires Docker.
mkdir dmarc-analyzer && cd dmarc-analyzer
curl -fsSL -o compose.yml https://raw.githubusercontent.com/dmarc-analyzer-net/DmarcAnalyzerApp/main/deploy/compose.yml
# generate the key that encrypts mailbox credentials at rest
echo "DMARC_ENCRYPTION_KEY=$(openssl rand -base64 32)" > .env
docker compose up -d
Then open http://localhost:8080 and create the first admin account (registration is locked after this first-run bootstrap).
What you get: the console on port 8080 and a background loop polling your
mailboxes for DMARC reports, both in one container (APP_MODE=all), plus
PostgreSQL. Two containers.
Two overlays sit next to that file if the defaults do not fit — they need Compose v2.24 or newer:
| Instead of the bundled database or the single container | |
|---|---|
| Use a Postgres you already run | -f compose.yml -f compose.external-db.yml |
| Run the worker separately | -f compose.yml -f compose.split.yml |
| Both | add both -f flags |
Set COMPOSE_FILE=compose.yml:compose.split.yml in .env and day-to-day use
stays docker compose up -d. Every combination reads the same environment
variables.
ghcr.io/dmarc-analyzer-net/dmarc-analyzer, for linux/amd64 +
linux/arm64. Mirrored to Docker Hub as dmarcanalyzernet/dmarc-analyzer;
GHCR is recommended because it has no anonymous pull rate limits.latest is the most recent release (what the compose file uses), or
pin a version such as 0.15.0. edge tracks main and is unreleased —
useful for trying a fix early, not for production.rua= reports arrive in) — see docs/ops/mailbox-sync.md.docker compose pull && docker compose up -d (schema migrations
run automatically on startup via Database__MigrateOnStartup).Coolify and Dokploy both need DMARC_ENCRYPTION_KEY and a Postgres
connection set the same way as the Quick Start above — see
docs/ops/configuration.md for every variable and where it applies.
src/api - backend app (api / worker / all modes via APP_MODE)src/web - frontend appdocs/planning - roadmap, backlog, architecture, API contract, and data modeldocs/planning/adr - architecture decision recordsRun API and frontend directly for fast iteration and hot reload.
Prerequisites:
Terminal 1 - API (hot reload):
APP_MODE=api dotnet watch --project src/api
Terminal 2 - Frontend (hot reload):
cd src/web
npm install
npm run dev
App URLs:
http://localhost:5173http://localhost:5076/api/v1/system/statusVite is configured to proxy /api to the local ASP.NET API in development.
Build and run the single image in two modes (api, worker) plus PostgreSQL:
# once per clone — the key that encrypts mailbox credentials at rest is not in
# the repo, so compose refuses to start until you generate your own
echo "DMARC_ENCRYPTION_KEY=$(openssl rand -base64 32)" > .env
docker compose up -d --build
Keep that key once you have added a report source: changing it makes every stored mailbox password undecryptable.
If the build fails during dotnet restore with NU1004, packages.lock.json
does not match the project's package references. The image build restores in
locked mode deliberately — a stale lockfile should stop the build rather than
silently resolve different transitive versions into the image — so regenerate it
and commit the change:
dotnet restore src/api/DmarcAnalyzer.Api.csproj --force-evaluate
Services:
http://localhost:8080localhost:5432APP_MODE=workerStop:
docker compose down
The same container image (dmarc-analyzer-net:dev) runs in three modes:
APP_MODE=api - serves API + static React build (wwwroot)APP_MODE=worker - runs background worker hostAPP_MODE=all - both in one process; the simplest way to self-host on a
single machineAPP_MODE=migrate - applies pending migrations and exits; for orchestrators
that need the schema settled before any app pod startsAny other value fails startup rather than falling back to api, so a typo
cannot leave you with a container that serves the console and ingests nothing.
From repo root:
dotnet build DmarcAnalyzerApp.slnx
From src/web:
npm run build
Use http/api.http with VS Code REST Client or JetBrains HTTP client to run API requests quickly during development.
http/api.httphttp://localhost:5076Everything lives under /api/v1; full contract in
docs/planning/api-contract.md. A sample to get oriented:
GET /api/v1/system/status — health/versionGET /api/v1/domains, GET /api/v1/clients — the core resourcesGET /api/v1/analytics/summary — dashboard-level pass/fail totalsGET /api/v1/analytics/domains/{domainId}/sources — per-domain sending sourcesGET /api/v1/alerts — configured alert rulesGET /api/v1/mailbox-health, GET /api/v1/mailbox-sync-runs,
POST /api/v1/report-sources/{id}/sync — mailbox ingestion status/triggerTry these against a running instance with http/api.http (see above).
Key operational endpoints:
GET /api/v1/mailbox-healthGET /api/v1/mailbox-sync-runsPOST /api/v1/report-sources/{id}/sync (manual trigger)Ops runbook:
docs/ops/configuration.md — every environment variable, and the same set in
every deployment shape. Kept true by ConfigurationContractTests.docs/ops/migrating-a-running-instance.md — bringing a running instance onto a
newer image, including why a green healthcheck does not prove the schema is current.docs/ops/upgrading-postgresql.md — the PostgreSQL 17 → 18 migration. A major
version cannot upgrade in place; this is the dump-and-restore window.docs/ops/aws-rds-iam.md — Postgres on AWS with no database password: IAM tokens,
which CA to verify against (RDS endpoint vs RDS Proxy), and the Compose and Helm recipe.docs/ops/mailbox-sync.mddocs/ops/oidc-zitadel.md — and the per-provider guides it links, including
docs/ops/oidc-entra.md, which Microsoft Entra ID needs rather than merely benefits from.docs/ops/release.mdStart here before implementation details:
docs/planning/architecture.mddocs/planning/api-contract.mddocs/planning/data-model.mddocs/planning/roadmap.mdPull requests are welcome, and there is no CLA to sign — see
CONTRIBUTING.md for how work gets merged and what review
will ask of you. AGENTS.md is the orientation map for the
codebase itself.
Found a security problem? Do not open a public issue — see
SECURITY.md.