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
9.2 KiB
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-специфичные
unwrap()— только в main() и тестахunsafe— только в xdp/, комментарий обязателенclone()осознанно, профилируй hot path- Блокирующие операции →
spawn_blocking - Логи:
tracing::info!/debug!/error! - Метрики: 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,dockerdocker-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.1configuration.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% -
iperf3UDP 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 | Обновляется каждый понедельник