guard/TODO.md
loki5512344 cf9608ce5d
Initial commit: Rampart v0.2.0
Multi-layer DDoS protection for Minecraft servers.

- rampart-core: Edge node with XDP/eBPF + Rust L7 filtering
- rampart-manager: REST API with JWT auth, Redis sync
- rampart-cli: CLI tool for operators
- velocity-plugin: Domain check, HMAC verify, server registry, load balancer
- paper-plugin: Auto-registration, heartbeat, HMAC verify
- dashboard: React + Vite web UI for management
2026-07-20 20:53:32 +02:00

254 lines
9.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Rampart — Development TODO & Roadmap
> Живой документ. Философия: **KISS → DRY → SOLID → YAGNI**.
---
## 0. Принципы разработки
### KISS
- Не добавляй абстракцию до третьего повторения.
- Функция ≤ 60 строк, модуль ≤ 500 строк.
- Не используй generics где хватит `&str` и `Vec<u8>`.
### DRY
- Повтор > 2 раз → выноси, но лучше копипаста чем неправильная абстракция.
### SOLID (Rust)
- **S**: один файл = одна ответственность
- **O**: расширяй через трейты
- **L**: `dyn Filter` — любая реализация без side effects
- **I**: маленькие трейты вместо одного `ShieldTrait`
- **D**: core зависит от `trait StateStore`, не от Redis
### YAGNI
- Не пиши io_uring до v0.4, BGP до v0.6, K8s Operator до v0.5
- Не добавляй feature flag если фича не готова
### Rust-специфичные
1. `unwrap()` — только в main() и тестах
2. `unsafe` — только в xdp/, комментарий обязателен
3. `clone()` осознанно, профилируй hot path
4. Блокирующие операции → `spawn_blocking`
5. Логи: `tracing::info!` / `debug!` / `error!`
6. Метрики: register один раз при старте, инкремент в hot path
---
## 1. Этапы разработки
### Этап 0: Bootstrap (неделя 1)
- [ ] Инициализировать Cargo workspace (`crates/*`)
- [ ] GitHub Actions: `cargo check`, `cargo test`, `cargo clippy -- -D warnings`
- [ ] `cargo-deny` (лицензии, CVE, дубликаты)
- [ ] `Makefile` с целями: `build`, `test`, `fmt`, `ebpf`, `docker`
- [ ] `docker-compose.yml` для dev (redis, clickhouse)
- [ ] `.gitignore`, `CONTRIBUTING.md`, `rustfmt.toml`, `clippy.toml`
- [ ] **DoD:** `make test` проходит, CI зелёный, `cargo build --release` собирает
---
### Этап 1: MVP — v0.1 (недели 2–4)
> Edge нода принимает MC соединения, парсит handshake, HMAC, проксирует на Velocity.
#### rampart-core
- [ ] TCP listener с SO_REUSEPORT
- [ ] VarInt парсер с bounds check
- [ ] MC Handshake парсер (packet_id=0x00)
- [ ] HMAC-SHA256 signer
- [ ] Timeout 1.5s на handshake (Slowloris защита)
- [ ] TCP proxy (tokio::io::copy_bidirectional)
- [ ] Config из `config.toml`
- [ ] Логи через `tracing`
#### rampart-cli
- [ ] `rampart pki init` — CA + сертификаты
- [ ] `rampart pki issue --name edge-1 --ip 10.0.100.1`
#### plugins/velocity
- [ ] DomainCheck: whitelist доменов, блок direct IP
- [ ] HmacCheck: verify HMAC, extract real IP
- [ ] Передача real IP в Velocity forwarding
#### plugins/paper
- [ ] ShieldAgent: авто-регистрация в YAML
- [ ] Heartbeat: online/tps в файл каждые 10 сек
#### docs
- [ ] `deployment.md`: как поднять v0.1
- [ ] `configuration.md`: примеры конфигов
#### Тестирование
- [ ] Unit: VarInt парсер (overflow, incomplete, граничные случаи)
- [ ] Unit: HMAC sign/verify (timing, wrong secret)
- [ ] Integration: tcpkali → handshake доходит до Velocity
- [ ] Ручной: реальный Minecraft клиент через edge
- [ ] **DoD v0.1:** Реальный игрок заходит через Edge → Velocity, HMAC работает, direct IP блокируется, `cargo test` проходит
---
### Этап 2: Registry + Redis — v0.2 (недели 5–7)
- [ ] `trait StateStore` + `impl StateStore for Redis`
- [ ] DashMap blacklist cache (TTL 5 мин)
- [ ] Pub/Sub `rampart:blacklist:events`
- [ ] Token bucket rate limiter per IP
- [ ] Graceful shutdown (SIGTERM)
#### rampart-manager
- [ ] Axum REST API: `GET /api/servers`, `POST /api/blacklist`
- [ ] JWT auth (Bearer token)
#### plugins/velocity
- [ ] ServerRegistry: delta-sync из Redis
- [ ] LoadBalancer: round-robin
#### plugins/paper
- [ ] ShieldAgent: писать в Redis (`rampart:servers`)
- [ ] HeartbeatTask: online/tps в Redis
- [ ] OnDisable: удалять себя из Redis
#### dashboard
- [ ] React + Vite
- [ ] Страница Servers (online, tps, статус)
- [ ] Страница Blacklist
- [ ] **DoD v0.2:** Серверы регистрируются автоматически, блэклист синхронизируется, dashboard работает
---
### Этап 3: Observability — v0.3 (недели 8–10)
#### rampart-core
- [ ] Prometheus метрики (порт 9090): connections, active, handshake duration, rate limit hits, blacklist size
- [ ] OpenTelemetry tracing (feature flag)
- [ ] Structured logs (JSON)
#### rampart-manager
- [ ] Prometheus метрики
- [ ] ClickHouse writer (batch, раз в сек, буфер 1000)
- [ ] ClickHouse schema: `rampart.blocked`
#### plugins/velocity
- [ ] Prometheus метрики: online, domain failures, registry size
#### plugins/paper
- [ ] Prometheus метрики: tps, mspt, online
#### dashboard / docs
- [ ] Grafana dashboard JSON
- [ ] Страница Attack Log
- [ ] `observability.md`
- [ ] **DoD v0.3:** Grafana показывает онлайн/TPS/блокировки, ClickHouse хранит логи, алерт на DDoS
---
### Этап 4: XDP + eBPF — v0.4 (недели 11–14)
#### xdp/
- [ ] `xdp_filter.c`: UDP drop, SYN rate limit, blacklist (LPM_TRIE)
- [ ] Ringbuf для событий (баны, rate limit hits)
- [ ] Rust loader (libbpf-rs, attach/detach)
- [ ] Feature flag: `xdp`
#### rampart-core
- [ ] Интеграция XDP loader в startup
- [ ] Чтение ringbuf → DashMap blacklist
- [ ] BPF stats → Prometheus
#### Тестирование
- [ ] `hping3 -S --flood` → XDP дропает, CPU < 30%
- [ ] `iperf3` UDP flood → XDP дропает
- [ ] **DoD v0.4:** SYN flood 1M pps дропается в XDP, CPU < 30%, XDP отключается feature flag
---
### Этап 5: Anti-Bot — v0.5 (недели 15–18)
- [ ] GeoIP lookup (maxminddb)
- [ ] ASN reputation (datacenter строже, mobile мягче)
- [ ] Adaptive rate limiting (EWMA)
- [ ] Bloom filter для whitelist
#### plugins/velocity
- [ ] Интеграция Sonar 3.0
- [ ] Custom challenge API (timing, map CAPTCHA)
- [ ] IP reputation score → Redis
- [ ] **DoD v0.5:** Боты блокируются, GeoIP работает, Sonar интегрирован
---
### Этап 6: Scale + HA — v0.6 (недели 19–24)
- [ ] WireGuard hub-and-spoke (CLI автоконфиг)
- [ ] Rust Load Balancer (SO_REUSEPORT, несколько инстансов)
- [ ] mTLS между всеми компонентами (rustls)
- [ ] QUIC канал Edge ↔ Manager
#### rampart-manager
- [ ] NATS JetStream (blacklist, drain)
- [ ] xDS-like API для динамической конфигурации
- [ ] Auto-discovery edge нод
#### rampart-cli
- [ ] `add-node`, `wg sync`, `drain`
- [ ] **DoD v0.6:** 5+ edge нод, drain без потери соединений, mTLS везде
---
### Этап 7: Polish — v0.7 (недели 25–28)
- [ ] io_uring runtime (feature flag, 5.10+)
- [ ] NUMA-aware allocation (bare metal)
- [ ] Zero-copy splice после handshake
- [ ] SLSA Level 3: signed releases, reproducible builds
- [ ] `cargo-vet`, secret rotation (dual-key HMAC)
- [ ] Docker images, GitHub Releases
- [ ] **DoD v0.7:** io_uring +30% throughput, релизы подписаны, доки позволяют поднять систему за час
---
## 2. Технический долг (Backlog)
- [ ] **Refactor:** Вынести `rampart-store` в отдельный crate
- [ ] **Refactor:** BufferPool на `crossbeam::queue::ArrayQueue`
- [ ] **Perf:** Registered buffers для io_uring
- [ ] **Feat:** Bedrock / RakNet (UDP модуль)
- [ ] **Feat:** Plugin API через WASM
- [ ] **Feat:** BGP Anycast (требует AS + /24)
- [ ] **Feat:** ML anomaly detection (IsolationForest)
- [ ] **Test:** Chaos engineering (random node kills)
- [ ] **Test:** Fuzzing для handshake parser (`cargo-fuzz`)
---
## 3. Definition of Done
```
☐ cargo check / cargo test проходят
☐ cargo clippy -- -D warnings — 0 warnings
☐ cargo fmt --check проходит
☐ Unit тесты покрывают happy path + 2+ error cases
☐ Интеграционный тест проходит
☐ Документация обновлена
☐ CI зелёный
```
---
## 4. Anti-Patterns
```
❌ Тесты после кода. Пиши до (TDD) или вместе.
❌ Коммиты в main напрямую. Только PR.
❌ TODO в коде без issue. TODO = баг.
❌ Оптимизация без профиля.
❌ Зависимость ради 1 функции.
❌ async где хватит sync.
❌ Секреты в репозитории. Используй .env + SOPS.
❌ Игнор compiler warnings.
```
---
*Версия: 1.0 | Обновляется каждый понедельник*