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

323 lines
10 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.

# Disaster Recovery - Rampart
> Что делать когда что-то пошло не так.
## Схема failover
```
Redis упал:
Edge: продолжает с локальным кэшем
Velocity: продолжает с последним кэшем серверов
Manager: API не работает → рестарт Redis, рестарт Manager
Manager упал:
Edge: продолжает автономно
Velocity: читает Redis напрямую
Dashboard: недоступен → рестарт Manager
Edge нода упала:
Игроки на ней теряют коннект
При реконнекте → BGP/DNS → другая Edge нода
Если Edge одна → все офлайн
Полный сбой дата-центра:
Edge ноды в других ДЦ продолжают работу
Игроки на живых серверах продолжают играть
Новые регистрации/баны не синхронизируются до восстановления
```
Все компоненты кроме Manager продолжают работать в degraded mode.
Manager - единственная single point of failure (без Redis Sentinel).
---
## 1. Redis упал
### Симптомы
- Velocity не видит новые серверы
- Edge не синхронизирует блэклист
- Manager API возвращает 500
### Влияние
- **Edge:** Продолжает работать с локальным кэшем блэклиста. Новые баны не синхронизируются между нодами.
- **Velocity:** Продолжает работать с последним кэшем server registry. Новые серверы недоступны до восстановления Redis.
- **Manager:** API не работает.
### Действия
```bash
# 1. Проверка Redis
redis-cli ping
systemctl status redis
# 2. Если Redis завис - рестарт
systemctl restart redis
# 3. Если Redis навсегда умер - поднять новый
# Убедись что пароль совпадает с конфигами
docker run -d --name rampart-redis \
-p 6379:6379 \
redis:7-alpine redis-server --requirepass "$REDIS_PASSWORD"
# 4. Перезапустить Manager (он переподключится)
systemctl restart rampart-manager
# 5. Edge ноды переподключатся автоматически (retry в драйвере Redis)
# Если не переподключились - рестарт:
systemctl restart rampart-edge
# 6. Velocity переподключится с задержкой до 5 сек
```
### Предотвращение
- Redis Sentinel для HA (3 ноды)
- AOF + RDB persistence включены
- Регулярные бэкапы: `redis-cli SAVE`
---
## 2. Manager упал
### Симптомы
- API не отвечает
- Blacklist изменения не применяются
- Edge heartbeat пропадает
### Влияние
- **Edge:** Продолжает работать автономно. Локальный блэклист активен.
- **Velocity:** Продолжает работать. Server registry из Redis доступен.
- **Dashboard:** Недоступен.
### Действия
```bash
# 1. Проверка
systemctl status rampart-manager
journalctl -u rampart-manager -n 50 --no-pager
# 2. Рестарт
systemctl restart rampart-manager
# 3. Если не стартует - проверить логи
journalctl -u rampart-manager -e | grep ERROR
# 4. Если проблема в конфиге
# Откатить последние изменения конфига
git checkout HEAD~1 -- config/manager.toml
systemctl restart rampart-manager
```
### Предотвращение
- systemd `Restart=always`
- Мониторинг: Prometheus alert `EdgeNodeDown`
- Два Manager в active/passive (v0.6+)
---
## 3. Edge нода упала
### Симптомы
- Игроки на этой ноде теряют соединение
- Prometheus alert: `EdgeNodeDown`
- Метрики перестали приходить
### Влияние
- Игроки, подключённые через эту ноду, дисконнектятся
- При переподключении → попадают на другую edge ноду
- Если edge нода одна → **все игроки офлайн**
### Действия
```bash
# 1. Проверка
systemctl status rampart-edge
journalctl -u rampart-edge -n 50 --no-pager
# 2. Если OOM kill
dmesg | grep -i "oom\|rampart"
# 3. Рестарт
systemctl restart rampart-edge
# 4. Если не стартует - проверить конфиг
rampart doctor
# 5. Если аппаратная проблема - переключить DNS на другую edge ноду
# (при нескольких edge нодах)
```
### Предотвращение
- Минимум 2 edge ноды
- DNS round-robin или BGP Anycast
- systemd `Restart=always`
- `rampart drain` для graceful maintenance
---
## 4. ClickHouse упал
### Симптомы
- Attack log не пишется
- Dashboard по блокировкам пустой
### Влияние
- **Edge / Velocity / Manager:** Продолжают работать. Потеря аналитики.
- Данные не теряются (буферизация в Manager на 1 секунду с батчем до 1000).
### Действия
```bash
# 1. Проверка
systemctl status clickhouse-server
curl http://localhost:8123/ping
# 2. Рестарт
systemctl restart clickhouse-server
# 3. Если долго восстанавливается - проверить диск
df -h /var/lib/clickhouse
# 4. Если диск полон - почистить старые партиции
clickhouse-client --query "ALTER TABLE rampart.blocked DROP PARTITION '2025-01'"
```
### Предотвращение
- TTL на таблицах (90 дней автоочистка)
- ClickHouse Cloud или Cluster (v0.6+)
- Alertmanager при заполнении диска > 80%
---
## 5. Root CA key скомпрометирован
### Симптомы
- Вы знаете что ключ утек
- Подозрительные сертификаты в сети
### Влияние
- **Полная компрометация mTLS:** Атакующий может выпустить сертификаты для любой ноды
### Действия
```bash
# 1. НЕМЕДЛЕННО: Сгенерировать новый Root CA
rampart pki init --root-ca rampart-ca-v2 --force
# 2. Выпустить новые сертификаты для ВСЕХ нод
for node in edge-eu-1 edge-us-1 vel-1 manager; do
rampart pki issue --ca edge-ca --name "$node" \
--ip "$(dig +short $node.rampart.internal)" \
--san "$node.rampart.internal" \
--output "/etc/rampart/pki/$node/"
done
# 3. Разослать новые сертификаты на все ноды
rampart pki sync --all-nodes
# 4. Перезапустить все сервисы (с новыми сертификатами)
rampart restart --all
# 5. Отозвать старый Root CA
rampart pki revoke --ca rampart-ca-v1
# 6. Расследовать утечку
# - Проверить кто имел доступ к ключу
# - Проверить логи доступа
# - Сменить все пароли
```
### Предотвращение
- Root CA ключ хранить **вне серверов** (на YubiKey или в Vault)
- Использовать Intermediate CA для повседневной работы
- Audit лог доступа к CA ключу
---
## 6. Полный сбой инфраструктуры
### Ситуация
Упали нода Manager + Redis + NATS одновременно (например, отключили дата-центр).
### Влияние
- Все edge ноды продолжают работать автономно
- Блэклист не синхронизируется
- Server registry не обновляется
- **Игроки продолжают играть на уже запущенных серверах**
### Восстановление
```bash
# 1. Поднять Manager на новой VDS
docker compose up -d
# 2. Восстановить Redis из бэкапа
redis-cli --pipe < /backup/rampart-redis-$(date +%Y-%m-%d).rdb
# 3. Edge ноды и Velocity переподключатся автоматически
# (они реконнектятся с экспоненциальной задержкой: 1s, 2s, 4s, 8s... max 60s)
# 4. Проверить что всё синхронизировалось
rampart doctor
```
### Предотвращение
- Бэкапы Redis: ежедневно, хранить 30 дней
- Terraform для быстрого поднятия инфраструктуры
- DNS записи с низким TTL (60 сек)
---
## 7. DDoS на Manager/Redis
### Симптомы
- Manager API не отвечает
- Redis latency > 1 секунды
- CPU Manager 100%
### Действия
```bash
# 1. Изолировать Manager - закрыть все порты кроме WireGuard
iptables -P INPUT DROP
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p udp --dport 51820 -j ACCEPT
iptables -A INPUT -j DROP
# 2. Если DDoS идёт на публичный IP - отключить его
# (Оставить только WireGuard туннель)
# 3. Edge ноды переживут без Manager несколько часов
# (они кэшируют блэклист локально)
```
---
## 8. Cheatsheet быстрых команд
```bash
# Рестарт всего
systemctl restart rampart-edge rampart-manager redis clickhouse-server
# Проверка здоровья всей системы
rampart doctor
# Последние 50 строк логов edge
journalctl -u rampart-edge -n 50 -f
# CPU/memory edge
htop -p $(pgrep -d',' rampart-edge)
# Трафик на интерфейсе
iftop -i eth0
# Статистика Redis
redis-cli info stats | grep -E "total_connections|total_commands|rejected"
# Активные соединения
ss -s | grep TCP
```
---
*Версия: 1.0 | Июль 2026*