guard/docs/runbook.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

8.8 KiB
Raw Blame History

Runbook - Rampart

Пошаговые инструкции для админа в критических ситуациях.


1. DDoS атака - пошагово (3 ночи, вы сонный)

# ── ШАГ 1: Подтвердить атаку ──

# Открыть Grafana → посмотреть алерты
# Или в CLI:
curl -s http://localhost:9090/api/v1/alerts | jq '.data.alerts[] | select(.state=="firing")'

# Проверить метрики edge ноды
curl -s http://EDGE_IP:9090/metrics | grep -E "rampart_(connections|rate_limit|blocked)"

# ── ШАГ 2: Определить тип атаки ──

# Если CPU < 50% и много DROP → XDP работает, атака L3/L4
# Если CPU > 80% → атака L7 (handshake flood)

# Проверка XDP счётчиков
cat /sys/kernel/debug/tracing/trace_pipe | head -20

# ── ШАГ 3: Действия ──

# A) SYN flood (XDP справляется)
#   → просто наблюдаем, XDP дропает на уровне ядра
#   → проверить CPU: должен быть < 30%
echo "Наблюдаем, XDP работает"

# B) Handshake flood (L7)
#   → Ужесточить rate limit на лету
rampart config set rate_limit_login_pps 2
rampart config set rate_limit_burst 5

#   → Включить emergency mode (только whitelist)
rampart emergency --enable
#   Это блокирует все IP кроме whitelist (доверенные ASN, verified players)

# C) Атака с датацентров
#   → Заблокировать ASN
rampart blacklist add asn 16276  # OVH
rampart blacklist add asn 24940  # Hetzner

#   → Включить GeoIP фильтр (блокировать страну)
rampart geoip block CN RU

# D) Атака на конкретный протокол
#   → Временно заблокировать статус пинги
rampart config set rate_limit_status_pps 0.1

#   → Заблокировать старые версии протокола
rampart config set min_protocol_version 765

# ── ШАГ 4: Если не помогает ──

# Включить challenge для ВСЕХ новых подключений
rampart challenge --mode all --type timing

# В крайнем случае - отключить все не-WG порты на edge
systemctl stop rampart-edge
iptables -A INPUT -p tcp --dport 25565 -j DROP
# Игроки не заходят, но серверы в безопасности
# Проверить через провайдера: возможно у них есть tools для фильтрации

# ── ШАГ 5: После атаки ──

# Выключить emergency mode
rampart emergency --disable

# Проверить логи в ClickHouse
clickhouse-client --query "
  SELECT src_country, count() as attacks
  FROM rampart.blocked
  WHERE ts > now() - INTERVAL 1 HOUR
  GROUP BY src_country
  ORDER BY attacks DESC
  LIMIT 10
"

# Написать post-mortem

2. Edge нода не стартует

# 1. Проверить статус
systemctl status rampart-edge

# 2. Логи
journalctl -u rampart-edge -n 50 --no-pager

# 3. Типичные причины:

#   A) Порт занят
ss -tlnp | grep 25565
#   Решение: сменить порт в /etc/rampart/config.toml

#   B) Конфиг не валидный
rampart config validate /etc/rampart/config.toml

#   C) libbpf не найден (если собрано с XDP)
ldd /usr/local/bin/rampart-core | grep bpf
#   Решение: apt-get install libbpf-dev

#   D) Нет прав на BPF
#   Решение: sudo setcap cap_bpf+ep /usr/local/bin/rampart-core

# 4. Запуск вручную (для диагностики)
/usr/local/bin/rampart-core --config /etc/rampart/config.toml --verbose

3. XDP не загружается

# 1. Проверить виртуализацию
systemd-detect-virt
# openvz/lxc → XDP не работает. Сменить провайдера.

# 2. Проверить версию ядра
uname -r
# < 5.10 → обновить ядро

# 3. Проверить драйвер
ethtool -i eth0 | grep driver
# virtio → только generic mode
# i40e/mlx5 → native mode

# 4. Проверить XDP поддержку
sudo ip link set dev eth0 xdp off 2>&1
# "Operation not supported" → XDP не поддерживается

# 5. Решение: отключить XDP в config.toml
# [xdp]
# enabled = false
# И перезапустить edge
systemctl restart rampart-edge

4. Игроки не могут зайти

# 1. Проверить edge ноду
curl -s http://EDGE_IP:9090/metrics | grep rampart_connections
# Если 0 → edge не принимает соединения

# 2. Проверить что порт открыт
nc -zv EDGE_IP 25565

# 3. Проверить HMAC
# На velocity: /logs/rampart-hmac.log
# "HMAC mismatch" → не совпадает secret
# "Direct IP blocked" → игрок подключился не через edge

# 4. Проверить firewall
iptables -L INPUT -n -v | grep 25565

# 5. Проверить DNS
dig +short play.example.com
# Должен показывать IP edge ноды

# 6. Проверить rate limit
# Если игроков много с одного IP (NAT) - превышают лимит
rampart config set max_connections_per_ip 50  # увеличить

5. Высокая нагрузка на edge

# 1. Определить bottleneck

# CPU
htop -p $(pgrep -d',' rampart-core)

# Память
ps aux | grep rampart-core

# I/O (если много логов)
iotop

# Сеть (pps, bandwidth)
iftop -i eth0

# 2. Типичные причины:

#   A) Не хватает воркеров
#   → Увеличить workers = vCPU
rampart config set workers_count $(nproc)
systemctl restart rampart-edge

#   B) CPU > 80% от L7 парсинга
#   → Включить XDP чтобы разгрузить userspace
#   → Уменьшить rate_limit до разумных пределов
#   → Проверить что нет SQL injection или других атак (парсинг hostname!)

#   C) Утечка памяти
#   → Проверить RSS за последние часы
#   → Если растёт - включить профилирование
rampart debug pprof

# 3. Временное решение
rampart config set max_connections 50000  # ограничить

# 4. Постоянное решение
# Добавить ещё одну edge ноду
rampart add-node --role edge --name edge-eu-2 --ip 45.200.10.2

6. ClickHouse переполнен

# 1. Проверить дисковое пространство
df -h /var/lib/clickhouse

# 2. Очистить старые партиции (> 90 дней)
clickhouse-client --query "
  SELECT partition, formatReadableSize(bytes_on_disk)
  FROM system.parts
  WHERE table = 'blocked'
  ORDER BY partition
"

# Удалить старые
clickhouse-client --query "
  ALTER TABLE rampart.blocked DROP PARTITION '2025-01'
"

# 3. Настроить TTL если не сделано
clickhouse-client --query "
  ALTER TABLE rampart.blocked
  MODIFY TTL ts + INTERVAL 90 DAY
"

# 4. Отключить логирование на время (если совсем плохо)
rampart config set clickhouse_enabled false
# Данные складываются в буфер, не теряются

7. Краткий справочник команд

rampart status                    # Общее состояние системы
rampart doctor                    # Полная диагностика

rampart config get workers.count  # Получить параметр
rampart config set workers.count 4  # Установить параметр (hot reload)

rampart blacklist add 1.2.3.4     # Забанить IP
rampart blacklist add asn 24940   # Забанить ASN
rampart blacklist list            # Список забаненных
rampart blacklist remove 1.2.3.4  # Разбанить

rampart whitelist add 10.0.0.0/16  # Добавить в whitelist
rampart emergency --enable        # Включить emergency mode
rampart emergency --disable       # Выключить

rampart drain edge-eu-1           # Плавно вывести ноду
rampart reload backend            # Перезагрузить список бэкендов
rampart pki rotate --role edge    # Ротация сертификатов
rampart wg sync                   # Синхронизация WireGuard

rampart debug pprof               # CPU профиль
rampart debug heap                # Heap профиль
rampart debug metrics             # Prometheus метрики в CLI

Версия: 1.0 | Июль 2026