Files
EvoFirewall/docs/architecture.md
T
DenozordecandCursor 0bed4367c7
Build and Push EvoFirewall Docker Image / build-and-push (push) Successful in 1m44s
Build and Push EvoFirewall Docker Image / create-release (push) Skipped
feat(policy): именованные наборы правил с DNS и M:N привязкой к агентам
Правила живут в policy_sets; evaluate мержит назначенные наборы; источник list|CIDR|hostname с кэшем DNS.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-20 22:11:03 +07:00

37 lines
1.8 KiB
Markdown

# Архитектура EvoFirewall
Централизованный control plane для firewall-агентов (Linux nft/ipset, MikroTik address-list).
## Компоненты
| Компонент | Путь | Роль |
|-----------|------|------|
| Web SPA | `apps/web` | ReUI Frame, TanStack Router/Query |
| API | `apps/api` | Fastify 5, JWT + agent tokens |
| DB | `packages/db` | Drizzle + SQLite WAL |
| Shared | `packages/shared` | Zod-контракты, RBAC helpers |
| UI | `packages/ui` | shadcn primitives `@evofw/ui` |
| Agents | `apps/api/src/agent-scripts` | install.sh, sync, MikroTik RSC |
## Потоки
1. **Enroll**`POST /v1/agent/enroll` + `X-EvoFW-Seed` → pending agent
2. **Approve** — UI/API → status approved
3. **Policy**`GET /v1/agent/policy` → deny/allow CIDRs + mode + hash
4. **Apply** — agent пишет kernel rules, `POST /v1/agent/apply-report` + stats sample
5. **Lists refresh** — cron каждые 5 мин (json_url / domains / evobgp_community)
## Политика
- Именованные **наборы правил** (`policy_sets`); агенту назначается **M:N** через `agent_policy_sets`
- Правило в наборе: ровно один источник — IP-список (`list_id`), CIDR или DNS-имя (`hostname` → A/AAAA, кэш в `policy_rule_resolved`)
- Evaluate: правила всех назначенных enabled-наборов (sort + priority) + `ip_overrides`
- `blacklist` — default accept, apply deny set
- `whitelist` — default drop, apply allow set (+ lo/established на Linux)
- Overrides, смена наборов и refresh DNS/lists бампят `policy_generation`
## Auth
- Portal SSO app id **`fw`**, permissions `fw:*`
- Agent bearer token (sha256 hash в БД)