guard/deploy/test/README.md
loki5512344 269daa071f
v0.3: 6-layer architecture complete
Layers:
  Layer 1: XDP/eBPF — TCP state machine, SYN throttle, blacklist, ringbuf
  Layer 2: PoW Challenge — SHA-256 hashcash, dynamic difficulty, constant-time verify
  Layer 3: Rust Core — HMAC handshake, rate limit, death code (existing)
  Layer 4: Velocity — Physics check, CAPTCHA, protocol verification
  Layer 5: Paper — Heartbeat, auto-registration (existing)
  Layer 6: Traffic Intel — EWMA, 168h profiling, reputation, alerts

Infra: XDP→Prometheus metrics, ClickHouse + Grafana dashboard, Docker Compose
Testing: 100-IP DDoS simulation, MHDDoS ref analysis, load test report
Fixes: VarInt sign extension UB, pure ACK deadlock, RST/FIN cleanup
Ref: MHDDoS, Sonar, LimboFilter, AtomGuard, Infrarust, MC-XDP-eBPF, PowGo
2026-07-21 15:47:36 +02:00

120 lines
4.1 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
Запускаем всё в Docker на одной машине, без выхода в интернет.
## Сеть
Все контейнеры в одной bridge-сети `rampart-test`:
```
attacker ──┐
├── rampart-edge ── backend
│ (XDP отключён в тестах,
│ используется userspace-only режим)
│
mclient ───┘ (Minecraft клиент для теста легитимных коннектов)
```
## Быстрый старт
```bash
# 1. Сеть
docker network create rampart-test
# 2. Backend (Minecraft сервер или заглушка)
docker run -d --name backend --network rampart-test itzg/minecraft-server
# 3. Rampart edge
docker run -d --name rampart --network rampart-test \
-e RAMPART_CONFIG=/etc/rampart/config.toml \
-v ./config.test.toml:/etc/rampart/config.toml \
rampart-core
# 4. Аттакер (MHDDoS)
docker run -d --name attacker --network rampart-test \
--cap-add=NET_RAW --cap-add=NET_ADMIN \
python:3.11 bash -c "while true; do sleep 10; done"
# 5. Легитимный клиент (mclient.py)
docker run -d --name mclient --network rampart-test \
python:3.11 python mclient.py --target rampart:25565
```
## Сценарии тестирования
### 1. SYN flood
```bash
docker exec attacker python3 /ref/MHDDoS/start.py SYN 172.x.x.x:25565 60 100
```
Ожидание: Rampart XDP дропает SYN-пакеты после превышения throttle.
Метрика: `rampart_xdp_syn_throttle` растёт, CPU < 30%.
### 2. TCP connection flood (CPS)
```bash
docker exec attacker python3 /ref/MHDDoS/start.py CPS 172.x.x.x:25565 60 100
```
Ожидание: Rampart rate-limiter блокирует >50 conn/s с одного IP.
Метрика: `rampart_rate_limit_hits` растёт.
### 3. Minecraft handshake flood
```bash
docker exec attacker python3 /ref/MHDDoS/start.py MINECRAFT 172.x.x.x:25565 60 100
```
Ожидание: Layer 2 PoW требует решения хэш-задачи.
Метрика: `rampart_pow_challenges_total{result="failed"}` растёт.
### 4. Сложный ботнет (MHDDoS MCBOT)
```bash
docker exec attacker python3 /ref/MHDDoS/start.py MCBOT 172.x.x.x:25565 60 50
```
Ожидание: Physics check детектирует неестественное движение.
Требует: PhysicsCheckListener активен.
### 5. DNS amplification
```bash
docker exec attacker python3 /ref/MHDDoS/start.py DNS 172.x.x.x:53 60 100
```
Ожидание: XDP дропает UDP не на порты 25565-25575.
Метрика: `rampart_xdp_dropped` растёт.
### 6. Slowloris (L7)
```bash
docker exec attacker python3 /ref/MHDDoS/start.py SLOW http://172.x.x.x:9090 60 100
```
Ожидание: Таймаут чтения закрывает соединение.
Метрика: `rampart_connections_total{result="blocked"}` растёт.
### 7. HTTP flood через cloudscraper (имитация CFB)
```bash
docker exec attacker python3 /ref/MHDDoS/start.py CFB http://172.x.x.x:9090 60 100
```
Ожидание: L7 rate-limiter блокирует >100 req/s с одного IP.
Метрика: `rampart_rate_limit_hits` растёт.
## Легитимный тест (mclient.py)
Тест должен проходить: Rampart пропускает нормальный Minecraft handshake.
```bash
python3 deploy/test/mclient.py --target rampart:25565 --username test_player
```
Ожидание: HMAC verified, соединение проксируется на backend.
## Метрики
Все метрики на http://localhost:9090/metrics:
```
rampart_xdp_total
rampart_xdp_passed
rampart_xdp_dropped
rampart_xdp_syn_throttle
rampart_xdp_verified
rampart_connections_total{result="allowed|blocked"}
rampart_rate_limit_hits{action="hit"}
rampart_pow_challenges_total{result="passed|failed|skipped"}
rampart_pow_current_difficulty
```
Grafana: http://localhost:3000 (admin/admin)
ClickHouse: http://localhost:8123 (для долгосрочных метрик)