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

287 lines
7.8 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.

# Migration - Rampart
> Как обновляться между версиями без даунтайма.
---
## Общие принципы
1. **Читай CHANGELOG** перед обновлением
2. **Бэкап** перед любой миграцией: Redis RDB, конфиги, сертификаты
3. **Одна нода** сначала - тестируй на одной edge, потом на всех
4. **Откат** - всегда сохраняй предыдущую версию бинарника
---
## v0.1 → v0.2 (Redis + Registry)
### Изменения
- Edge нода начинает использовать Redis для синхронизации блэклиста
- Paper плагин пишет в Redis вместо локального YAML
- Velocity получает server registry из Redis
### Шаги
```bash
# 1. Поднять Redis (если ещё нет)
docker compose up -d redis
# 2. Настроить Redis пароль
echo "requirepass НОВЫЙ_ПАРОЛЬ" >> /etc/redis/redis.conf
systemctl restart redis
# 3. Обновить конфиг edge ноды
cat >> /etc/rampart/config.toml << 'EOF'
[store]
redis_url = "redis://:НОВЫЙ_ПАРОЛЬ@10.0.0.1:6379/0"
blacklist_cache_ttl_secs = 300
EOF
# 4. Обновить Paper плагин (перейти с file → redis)
sed -i 's/registration_mode: "file"/registration_mode: "redis"/' paper-global.yml
sed -i 's|# redis_url:|redis_url: "redis://:НОВЫЙ_ПАРОЛЬ@10.0.0.1:6379/0"|' paper-global.yml
# 5. Обновить Velocity плагин
# Добавить redis_url в velocity.toml
# 6. Рестарт по очереди (no downtime)
systemctl restart rampart-edge # по одной edge ноде
systemctl restart velocity # по одной velocity
# Paper плагины - reload через /reload команду
```
### Откат
```bash
# Если что-то пошло не так:
# 1. Вернуть registration_mode: "file" в paper-global.yml
# 2. Убрать redis_url из всех конфигов
# 3. Рестартнуть всё в обратном порядке
```
---
## v0.2 → v0.3 (Observability)
### Изменения
- Добавляются Prometheus метрики на всех компонентах
- ClickHouse для хранения attack log
- Grafana дашборды
### Шаги
```bash
# 1. Поднять стек мониторинга
docker compose up -d clickhouse prometheus grafana
# 2. Создать таблицы ClickHouse
clickhouse-client --query "
CREATE DATABASE IF NOT EXISTS rampart;
CREATE TABLE IF NOT EXISTS rampart.blocked (
ts DateTime CODEC(Delta, ZSTD),
edge LowCardinality(String),
src_ip IPv4,
src_asn UInt32,
src_country LowCardinality(FixedString(2)),
reason LowCardinality(String),
proto_ver Int32,
hostname String CODEC(ZSTD)
) ENGINE = MergeTree()
PARTITION BY toYYYYMM(ts)
ORDER BY (ts, edge, src_ip)
TTL ts + INTERVAL 90 DAY;
"
# 3. Настроить scrape targets в prometheus.yml
# 4. Импортировать Grafana dashboard
# 5. Ничего рестартить не нужно - метрики уже встроены
```
### Проверка
```bash
curl -s http://EDGE_IP:9090/metrics | grep rampart
```
---
## v0.3 → v0.4 (XDP)
### Изменения
- XDP программа на C
- libbpf-rs для загрузки в ядро
- Feature flag: `xdp`
### Шаги
```bash
# 1. Проверить совместимость
systemd-detect-virt # нужно kvm или none
uname -r # нужно 5.10+
ethtool -i eth0 # драйвер
# 2. Установить зависимости
sudo apt-get install -y libbpf-dev clang llvm linux-headers-$(uname -r)
# 3. Собрать с XDP
cargo build --release --features xdp
# 4. Обновить бинарник
cp /usr/local/bin/rampart-core /usr/local/bin/rampart-core.backup
cp target/release/rampart-core /usr/local/bin/
# 5. Включить XDP в конфиге
cat >> /etc/rampart/config.toml << 'EOF'
[xdp]
enabled = true
interface = "eth0"
EOF
# 6. Рестарт
systemctl restart rampart-edge
# 7. Проверить
journalctl -u rampart-edge | grep XDP
ip link show | grep xdp
```
### Откат
```bash
# Отключить XDP
rampart config set xdp_enabled false
systemctl restart rampart-edge
# Вернуть старый бинарник
cp /usr/local/bin/rampart-core.backup /usr/local/bin/rampart-core
```
---
## v0.4 → v0.5 (Anti-Bot)
### Изменения
- GeoIP (MaxMind GeoLite2)
- Sonar 3.0 интеграция
- Challenge API
### Шаги
```bash
# 1. Зарегистрироваться на maxmind.com, скачать GeoLite2-ASN
# 2. Разместить базу на Manager
mkdir -p /var/lib/rampart/geoip
cp GeoLite2-ASN.mmdb /var/lib/rampart/geoip/
# 3. Обновить конфиг edge
cat >> /etc/rampart/config.toml << 'EOF'
[geoip]
db_path = "/var/lib/rampart/geoip/GeoLite2-ASN.mmdb"
# ASN с повышенным скорингом
vpn_asns = [16276, 24940, 20473]
datacenter_asns = [16509, 14618, 8075]
EOF
# 4. Обновить Velocity плагин (с поддержкой Sonar)
cp plugins/velocity/target/rampart-velocity-*.jar /opt/velocity/plugins/
systemctl restart velocity
# 5. Проверить
rampart geoip lookup 1.2.3.4
```
---
## v0.5 → v0.6 (Scale + HA)
### Изменения
- Rust LB вместо HAProxy
- mTLS между всеми компонентами
- QUIC канал Edge ↔ Manager
- NATS JetStream
### Шаги
```bash
# 1. Развернуть NATS
docker compose up -d nats
# 2. Обновить конфиг Manager
cat >> /etc/rampart/manager.toml << 'EOF'
[nats]
urls = ["nats://127.0.0.1:4222"]
[quic]
bind = "0.0.0.0:7777"
EOF
# 3. Сгенерировать PKI
rampart pki init --root-ca rampart-ca
rampart pki issue --ca edge-ca --name edge-eu-1 --ip 10.0.100.1
rampart pki issue --ca infra-ca --name manager --ip 10.0.0.1
# 4. Развернуть сертификаты на все ноды
# 5. Включить mTLS в конфигах
# 6. Постепенно перевести трафик с HAProxy на Rust LB
```
### Миграция с HAProxy
```bash
# Фаза 1: Запустить Rust LB рядом с HAProxy
# (разные порты: HAProxy :25565, Rust LB :25566)
# Фаза 2: Переключить edge ноды на Rust LB
# (изменить backend.address в config.toml)
# Фаза 3: Остановить HAProxy
# (когда все edge переключены)
```
---
## v0.6 → v0.7 (Polish)
### Изменения
- io_uring runtime (feature flag)
- Zero-copy splice
- SLSA Level 3
### Шаги
```bash
# 1. Проверить io_uring доступность
cat /proc/sys/kernel/io_uring_disabled # 0 = OK
# 2. Собрать с io_uring
cargo build --release --features io-uring
# 3. Заменить бинарник
cp /usr/local/bin/rampart-core /usr/local/bin/rampart-core.epoll.backup
cp target/release/rampart-core /usr/local/bin/
systemctl restart rampart-edge
# 4. Проверить
journalctl -u rampart-edge | grep "io_uring"
# 5. Бенчмарк: сравнить производительность
tcpkali --connections 1000 --connect-rate 5000 --duration 30s EDGE_IP:25565
```
---
## Чеклист перед любой миграцией
```
☐ Прочитал CHANGELOG
☐ Сделал бэкап Redis: redis-cli SAVE
☐ Сделал бэкап конфигов: tar czf /backup/rampart-configs-$(date +%Y%m%d).tar.gz /etc/rampart/
☐ Сохранил старые бинарники
☐ Есть доступ к серверу через OOB/IPMI (на случай если сеть отвалится)
☐ Есть откат-план
☐ Предупредил команду в Discord
```
---
*Версия: 1.0 | Июль 2026*