Velocity + DDoS-защита: полный гайд по настройке безопасной Minecraft сети

Velocity + DDoS-защита: полный гайд по настройке безопасной Minecraft сети

Зачем вообще нужен Velocity

Если вы строите Minecraft сеть на несколько серверов, вам нужен прокси. BungeeCord долгое время был стандартом, но в 2024-2026 году выбор очевиден: Velocity от PaperMC.

Коротко о том, почему BungeeCord пора на пенсию:

  • Производительность. Velocity написан с нуля на современном Java-стеке. Он потребляет меньше памяти и обрабатывает больше подключений на тех же ресурсах.
  • Безопасность. BungeeCord до сих пор использует устаревший ip-forwarding. Velocity предлагает modern forwarding с HMAC-подписями, что исключает подмену UUID игроков.
  • API. У Velocity чистый event-driven API без легаси-костылей. Плагины работают стабильнее.
  • Поддержка. PaperMC активно развивает Velocity. BungeeCord получает редкие обновления.

Единственный аргумент за BungeeCord - это совместимость со старыми плагинами. Но большинство актуальных плагинов уже портированы на Velocity.

Архитектура: как всё связано

Правильная архитектура Minecraft сети с DDoS-защитой выглядит так:

Игрок → MineGuard (фильтрация) → Velocity (прокси) → Paper серверы (lobby, survival, minigames)

Разберём каждый уровень:

MineGuard принимает входящий трафик на себя. Игроки подключаются к IP-адресу MineGuard, а не к вашему реальному серверу. Вся фильтрация происходит до того, как пакеты попадут на Velocity. Боты, флуд, malformed-пакеты - всё отсеивается на этом этапе.

Velocity получает уже чистый трафик и распределяет игроков по серверам. Он отвечает за маршрутизацию, переключение между серверами (hub → survival → minigames) и пересылку данных игрока.

Paper серверы - конечные точки, где крутится сам геймплей. Каждый сервер знает только о Velocity и не видит внешний мир напрямую.

Ключевой момент: реальный IP вашего сервера с Velocity должен быть скрыт. Если атакующий узнает прямой адрес, он обойдёт MineGuard и ударит напрямую.

Установка и настройка Velocity

Требования

  • Java 17+ (рекомендуется Java 21)
  • Минимум 512 МБ RAM для прокси (на 100-200 игроков)
  • Linux-сервер (Ubuntu 22.04 / Debian 12)

Установка

mkdir -p /opt/velocity && cd /opt/velocity
wget https://api.papermc.io/v2/projects/velocity/versions/3.4.0-SNAPSHOT/builds/latest/downloads/velocity-3.4.0-SNAPSHOT-latest.jar -O velocity.jar
java -Xms512M -Xmx512M -jar velocity.jar

После первого запуска Velocity создаст конфигурационные файлы. Остановите сервер и переходите к настройке.

velocity.toml - основные параметры

bind = "0.0.0.0:25577"

# Меняем на modern - это критически важно
player-info-forwarding-mode = "modern"

show-max-ping = 1000
online-mode = true

[servers]
lobby = "127.0.0.1:25565"
survival = "127.0.0.1:25566"
minigames = "127.0.0.1:25567"

try = ["lobby"]

[forced-hosts]
"survival.example.com" = ["survival"]

[advanced]
connection-timeout = 5000
read-timeout = 30000
haproxy-protocol = false

Параметр bind - адрес и порт, на котором Velocity слушает подключения. Если MineGuard и Velocity на одной машине, ставьте 127.0.0.1:25577. Если на разных - 0.0.0.0:25577, но обязательно закройте порт файрволом от всех, кроме MineGuard.

Modern forwarding

После включения player-info-forwarding-mode = "modern" Velocity сгенерирует файл forwarding.secret. Этот секрет нужно скопировать на каждый Paper-сервер.

На Paper-серверах откройте config/paper-global.yml:

proxies:
  velocity:
    enabled: true
    online-mode: true
    secret: "скопируйте_сюда_секрет_из_forwarding.secret"

Modern forwarding подписывает данные игрока (UUID, скин, IP) HMAC-ключом. Если кто-то попытается подключиться к Paper-серверу напрямую, минуя Velocity, сервер отклонит соединение. Это закрывает целый класс атак по подмене UUID.

Firewall: закрываем всё лишнее

Файрвол - не опция, а обязательная часть настройки. Без него ваши Paper-серверы торчат наружу и принимают прямые подключения.

# Разрешаем SSH
sudo ufw allow 22/tcp

# Разрешаем Velocity ТОЛЬКО с IP MineGuard
sudo ufw allow from MINEGUARD_IP to any port 25577 proto tcp

# Запрещаем прямой доступ к Paper-серверам извне
# (они на 127.0.0.1, так что уже недоступны, но на всякий случай)
sudo ufw deny 25565:25570/tcp

# Включаем файрвол
sudo ufw enable

Замените MINEGUARD_IP на IP-адрес вашего MineGuard-фильтра. Если у MineGuard несколько IP - добавьте правило для каждого.

Проверьте, что порты Paper-серверов привязаны к 127.0.0.1, а не к 0.0.0.0. В server.properties каждого сервера:

server-ip=127.0.0.1
server-port=25565

Подключение DDoS-защиты MineGuard

Как MineGuard фильтрует трафик

MineGuard работает как reverse proxy перед Velocity. Весь входящий трафик проходит через фильтр, который анализирует пакеты на нескольких уровнях:

  1. XDP-уровень - самый быстрый. Отсеивает мусорный трафик ещё до того, как он попадёт в сетевой стек ОС.
  2. TCP-уровень - проверяет корректность соединений, отсекает SYN-флуд и аномальные пакеты.
  3. Протокол Minecraft - анализирует содержимое пакетов. Отличает ботов от реальных игроков по поведению при подключении.

Для игрока это прозрачно: он подключается к адресу, видит MOTD, заходит на сервер. Разница в том, что между игроком и Velocity стоит фильтр, который не пропустит атаку.

Настройка в панели MineGuard

  1. Добавьте сеть в панели MineGuard
  2. Укажите backend-адрес - IP и порт вашего Velocity (ваш_сервер:25577)
  3. Выберите режим защиты (рекомендуется "Умный" для начала)
  4. MineGuard выдаст вам защищённый IP - это адрес, который вы дадите игрокам

Proxy Protocol

Когда трафик проходит через MineGuard, Velocity по умолчанию видит IP-адрес MineGuard, а не реальный IP игрока. Для решения этой проблемы используется Proxy Protocol.

В панели MineGuard включите Proxy Protocol для вашей сети.

В velocity.toml включите поддержку:

[advanced]
haproxy-protocol = true

После этого Velocity будет корректно видеть IP-адреса игроков. Это важно для:

  • Бан-листов по IP
  • Геолокации
  • Защиты от мультиаккаунтов
  • Корректной статистики

Важно: после включения haproxy-protocol в Velocity, прямые подключения (минуя MineGuard) перестанут работать. Velocity будет ожидать Proxy Protocol header от каждого соединения. Это ещё один уровень защиты - даже если кто-то найдёт прямой IP, подключиться без Proxy Protocol не получится.

Systemd-сервис для Velocity

Чтобы Velocity автоматически запускался при перезагрузке сервера:

# /etc/systemd/system/velocity.service
[Unit]
Description=Velocity Minecraft Proxy
After=network.target

[Service]
User=minecraft
WorkingDirectory=/opt/velocity
ExecStart=/usr/bin/java -Xms512M -Xmx512M -XX:+UseG1GC -XX:G1HeapRegionSize=4M -XX:+UnlockExperimentalVMOptions -XX:+ParallelRefProcEnabled -jar velocity.jar
Restart=on-failure
RestartSec=10
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable velocity
sudo systemctl start velocity

Тестирование

Перед тем как давать адрес игрокам, проверьте всё по чек-листу:

1. Проверка подключения через MineGuard:

Подключитесь к защищённому IP из Minecraft клиента. Вы должны попасть на lobby-сервер.

2. Проверка modern forwarding:

Зайдите на сервер и выполните /velocity dump. Убедитесь, что forwarding mode стоит "modern". На Paper-сервере проверьте, что ваш UUID корректный (совпадает с Mojang UUID).

3. Проверка Proxy Protocol:

На Paper-сервере выполните команду, которая показывает ваш IP (например, через EssentialsX: /whois ваш_ник). IP должен быть вашим реальным, а не адресом MineGuard.

4. Проверка файрвола:

Попробуйте подключиться напрямую к IP сервера на порт 25577, минуя MineGuard. Соединение должно быть отклонено файрволом.

# С внешней машины
nc -zv ваш_сервер 25577
# Должен быть таймаут или отказ

5. Проверка прямого доступа к Paper:

Попробуйте подключиться Minecraft-клиентом напрямую к адресу Paper-сервера. Соединение должно быть отклонено (modern forwarding не пропустит).

Мониторинг

Настроенная сеть требует мониторинга. Вот что стоит отслеживать:

В панели MineGuard

  • График трафика - резкие скачки означают атаку
  • Заблокированные соединения - покажут интенсивность атак
  • Латентность - время между MineGuard и вашим Velocity

На сервере

# Количество активных соединений к Velocity
ss -tn state established '( dport = :25577 )' | wc -l

# Потребление ресурсов
journalctl -u velocity -f

# Сетевой трафик
vnstat -l -i eth0

Логи Velocity

В velocity.toml можно настроить уровень логирования. Для продакшена оставьте стандартный уровень, но при диагностике проблем переключайте на debug.

Полезно настроить алерты: если количество соединений резко падает или растёт - что-то не так. Простейший вариант - cron-скрипт, который проверяет доступность Velocity и шлёт уведомление в Telegram/Discord.

Частые ошибки

"Соединение с сервером потеряно" при подключении. Обычно проблема с modern forwarding. Проверьте, что секрет в paper-global.yml совпадает с forwarding.secret и что режим стоит "modern" на обеих сторонах.

IP игроков отображается как IP MineGuard. Не включен Proxy Protocol. Включите в панели MineGuard и в velocity.toml.

Velocity не стартует с haproxy-protocol = true. Это нормально, если вы подключаетесь напрямую. С включённым Proxy Protocol соединения без PROXYv2-заголовка отклоняются. Подключайтесь только через MineGuard.

Игроки попадают на сервер, но не могут переключаться между серверами. Проверьте, что все серверы в [servers] доступны с машины Velocity. Используйте ping и nc для диагностики.

Итого

Связка MineGuard + Velocity - это продакшен-решение для Minecraft сети любого масштаба. MineGuard берёт на себя фильтрацию DDoS-атак на сетевом уровне, Velocity занимается маршрутизацией игроков, Paper-серверы отвечают за геймплей.

Ключевые моменты:

  • Используйте modern forwarding, не legacy
  • Закройте файрволом все порты, кроме необходимых
  • Включите Proxy Protocol для корректной передачи IP
  • Скройте реальный IP сервера - он не должен быть в DNS или публичном доступе
  • Мониторьте трафик и соединения

Эта архитектура выдерживает серьёзные DDoS-атаки и при этом не добавляет заметной задержки для игроков. Фильтрация на уровне XDP работает быстрее, чем любое программное решение в user space, а Velocity обеспечивает минимальный overhead при проксировании.


Proteja Seu Servidor de Ataques DDoS

Proteção gratuita com configuração em 5 minutos. 1 TB de tráfego incluso.

Experimentar Grátis


Artigos Relacionados