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

9.2 KiB
Raw Blame History

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 | Обновляется каждый понедельник