guard/deploy/test/stress
loki5512344 15f474486a
feat!: universal redesign — drop Minecraft stack, single-crate architecture
- remove Java plugins (velocity/paper), dashboard, all MC-specific code
  (handshake, death_code, varint, hostname-HMAC); available in history pre-v0.2
- merge crates/* into one package with src/bin/{rampart,rampart-manager,rampart-cli}
- ProtocolHandler trait + registry (no implementations yet), universal PoW kept
- XDP: universal L3/L4 filter (xdp/core/) + pluggable hook API (xdp/hooks/),
  fix IPv6 saddr bug; clang build verified
- docs: bilingual knowledge base (docs/kb/: attacks x4, defense-levels,
  practice x3), rewrite README/architecture for universal concept
- TODO.md v4.0: <=300-line module limit, competitor benchmark section (ref/)
- deploy/CI/docs cleanup: no MC references, new binary names

cargo build/clippy(-D warnings)/test green (55 tests)
2026-08-24 01:50:22 +02:00
..
configs feat!: universal redesign — drop Minecraft stack, single-crate architecture 2026-08-24 01:50:22 +02:00
attacker.Dockerfile feat!: universal redesign — drop Minecraft stack, single-crate architecture 2026-08-24 01:50:22 +02:00
edge.Dockerfile feat!: universal redesign — drop Minecraft stack, single-crate architecture 2026-08-24 01:50:22 +02:00
flood.py feat!: universal redesign — drop Minecraft stack, single-crate architecture 2026-08-24 01:50:22 +02:00
legit.py feat!: universal redesign — drop Minecraft stack, single-crate architecture 2026-08-24 01:50:22 +02:00
README.md feat!: universal redesign — drop Minecraft stack, single-crate architecture 2026-08-24 01:50:22 +02:00
run-stress.sh feat!: universal redesign — drop Minecraft stack, single-crate architecture 2026-08-24 01:50:22 +02:00
start.sh feat!: universal redesign — drop Minecraft stack, single-crate architecture 2026-08-24 01:50:22 +02:00

Стресс-тест Rampart на VDS (без Redis/ClickHouse)

Проверяет edge-ноду (слои 1–3) на реальном VDS. Не требует Redis, ClickHouse или внешних сервисов — только бинарь rampart и stub-бэкенд (socat echo) в одном контейнере.

Топология

┌─────────────── host VDS ───────────────┐
│  docker bridge 172.30.0.0/24           │
│                                        │
│  rampart-edge (172.30.0.2)             │
│    ├─ rampart      :25565 (bind 0.0.0.0)│
│    ├─ socat echo   :25566 (127.0.0.1)  │  ← stub бэкенд
│    └─ metrics      :9090               │
│                                        │
│  rampart-attacker (172.30.0.3)         │
│    └─ 100 source IP (172.30.0.101-200) │  ← flood.py / hping3
└────────────────────────────────────────┘
  • Метрики на хосте: curl http://127.0.0.1:9090/metrics
  • Edge слушает на хосте: 127.0.0.1:25565

Быстрый старт

# 1. На VDS: клонировать репозиторий, собрать бинарь
git clone https://github.com/loki5512344/rampart.git && cd rampart
cargo build --release --bin rampart

# 2. Запустить весь цикл (setup + 4 фазы)
#    run-stress.sh сам найдёт бинарь (target/release), а папку — по себе (переменная DIR опциональна)
cd deploy/test/stress
bash run-stress.sh

Для запуска из другого места задай DIR (по умолчанию — папка скрипта).

Фазы

Фаза Конфиг Что делает Проверяет
A edge-high.toml (лимиты 100k) TCP connect flood со 100 IP сырую пропускную способность L4
B edge-defense.toml (дефолтные лимиты) та же атака rate limit + reputation ban, доступность легитимных клиентов
C — SYN flood hping3 (rand-source) поведение без XDP (обрабатывает kernel)
D edge-high.toml 300 keepalive-коннектов удержание активных соединений

Во время фаз A и B параллельно подключается legit.py (generic TCP-клиенты), меряющий RTT — доказывает, что реальные клиенты проходят во время атаки.

Атаки

flood.py открывает чистые TCP-соединения (connect / slowloris / keepalive режимы) со случайных source IP. Никакой протокольной маскировки нет: на уровне L3/L4 флуд неотличим от легитимного трафика. Различие даёт только per-IP rate limit и репутация.

Метрики для сбора

curl -s http://127.0.0.1:9090/metrics | grep -E 'rampart_(connections_total|rate_limit_hits|attack_status)'