Pterohost docs

Защита Minecraft-сервера от DDoS: L4, L7 и прокси

Как защитить Minecraft-сервер от DDoS-атак: L4 UDP/TCP флуд, L7 бот-атаки, EpicGuard, Velocity прокси и выбор хостинга с фильтрацией.

Кратко: Minecraft-серверы атакуют двумя способами - флудом трафика на сетевом уровне (L4) и ботами на уровне приложения (L7). Защита строится на трёх слоях: хостинг с фильтрацией трафика, прокси-сервер Velocity для скрытия реального IP и антибот-плагин EpicGuard на уровне логина.

Защита Minecraft-сервера от DDoS: L4, L7 и прокси

Minecraft-серверы в 2026 году атакуют чаще, чем большинство веб-проектов. Причина проста: низкий порог входа для атакующего, доступность ботнетов в аренду и высокая мотивация у конкурентов или грифёров. Типичный сервер на 50-200 игроков может получить атаку мощностью 5-20 Гбит/с, которая за считанные секунды положит как сам сервер, так и весь узел хостинга, если у провайдера нет фильтрации. Понять, как работают атаки, и выстроить многоуровневую защиту - задача каждого администратора, который хочет держать сервер онлайн.

Pterohost - игровой хостинг с аппаратной DDoS-фильтрацией L4/L7, NVMe-дисками и поддержкой 24/7. Промокод 4START даёт -20% на первый заказ. Заказать Minecraft хостинг

Типы DDoS-атак на Minecraft-серверы

Прежде чем строить защиту, нужно понять, что именно атакуют. Атаки делятся на два принципиально разных класса.

L4 - сетевой уровень (UDP и TCP флуд)

Атаки уровня L4 работают на уровне транспортного протокола и не “понимают” Minecraft. Цель - забить канал или истощить ресурсы сетевого стека сервера.

UDP Flood - самый распространённый тип. Атакующий шлёт миллионы UDP-пакетов на порт 25565 (или любой другой). Minecraft использует TCP, поэтому сами пакеты сервер отбросит, но канал и CPU сетевой карты будут перегружены. Даже 1 Гбит/с UDP-мусора кладёт средний VPS.

TCP SYN Flood - отправка тысяч SYN-пакетов без завершения рукопожатия. Сервер держит half-open соединения в очереди, таблица состояний переполняется, новые игроки не могут подключиться.

Amplification-атаки (усиление) - атакующий использует сторонние серверы (DNS, NTP, Memcached) для усиления трафика. На каждый байт запроса жертва получает 10-100 байт ответа. Такие атаки достигают сотен Гбит/с.

Против L4 атак эффективна только фильтрация на уровне хостинга или upstream-провайдера - клиентский firewall не поможет, когда канал уже забит.

L7 - уровень приложения (бот-атаки на логин)

Атаки L7 работают на уровне протокола Minecraft. Боты подключаются, инициируют handshake и отправляют пакеты логина - имитируя реальных игроков. Это создаёт нагрузку на Java-процесс сервера.

Login flood - сотни ботов одновременно проходят стадию логина. Каждое соединение потребляет поток, память и CPU для шифрования. Онлайн-режим (premium) частично помогает, но авторизация через session.minecraft.net может стать узким местом.

Ping flood - массовые запросы статуса сервера (пакет 0xFE). Лёгкие боты, почти не потребляющие ресурсов у атакующего, но генерирующие нагрузку на стороне сервера.

Join-и-выход циклы - боты подключаются, ждут несколько секунд и отключаются. Постоянные события join/leave вызывают лишние операции с чанками, базами данных плагинов и обработчиками событий.

Признаки атаки в логах и метриках

Умение быстро распознать атаку позволяет оперативно среагировать.

В логах сервера (latest.log):

[12:03:44] [Server thread/WARN]: Can't keep up! Is the server overloaded?
[12:03:45] [Async Chat Thread/INFO]: bot12345[/198.51.100.23:54321] logged in
[12:03:45] [Async Chat Thread/INFO]: bot12346[/198.51.100.24:54321] logged in
[12:03:45] [Async Chat Thread/INFO]: bot12347[/198.51.100.25:54321] logged in

Сотни строк логина за несколько секунд с разных IP - явный признак L7 атаки.

Диагностика через командную строку:

# Число TCP-соединений на порт Minecraft
netstat -an | grep :25565 | grep ESTABLISHED | wc -l

# Топ IP по числу соединений
netstat -an | grep :25565 | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head -20

# Трафик в реальном времени
iftop -i eth0 -f "port 25565"

# Загрузка CPU и сети
htop

Что считать нормой: 50-200 игроков создают 50-200 установленных соединений. Если счётчик netstat показывает тысячи - сервер под атакой или в очереди много ботов.

Нагрузка на CPU: при атаке L7 Java-процесс Minecraft может занять 100% одного ядра ещё до того, как упадёт TPS. Мониторьте через top или панель хостинга.

Фильтрация на уровне хостинга - первый рубеж

Ни один плагин не спасёт сервер, если канал уже забит мусорным трафиком. Защита начинается у провайдера.

Что должен делать хостинг:

  • Фильтрация L3/L4 в upstream - отсев UDP-флуда до попадания на ваш сервер
  • Профили для игровых протоколов - фильтры, обученные на трафике Minecraft (TCP 25565), а не только HTTP
  • Scrubbing-центры - специализированные узлы, которые пропускают трафик через фильтрацию и отправляют только “чистый” поток
  • Указанная ёмкость защиты в Гбит/с - чем больше, тем надёжнее при volumetric-атаках

Что спрашивать у хостинга перед покупкой:

  • “Какой тип DDoS-защиты включён в тариф?”
  • “Есть ли фильтрация игровых протоколов (не только HTTP)?”
  • “Что происходит с сервером при атаке 10+ Гбит/с - фильтрация или null-route?”
  • “Есть ли SLA по доступности при атаке?”

Хостинг, который отвечает “null-route” (то есть просто блокирует ваш IP при атаке), не обеспечивает реальной защиты.

Firewall на уровне сервера

Даже если хостинг фильтрует основной мусор, правильный iptables/nftables на самом сервере снижает нагрузку и блокирует часть атак.

Базовые правила iptables для Minecraft:

# Ограничение новых подключений на порт 25565 (не более 10 новых соединений в секунду с одного IP)
iptables -A INPUT -p tcp --dport 25565 -m state --state NEW -m recent --set --name MC_CONN
iptables -A INPUT -p tcp --dport 25565 -m state --state NEW -m recent --update --seconds 1 --hitcount 10 --name MC_CONN -j DROP

# Защита от SYN-флуда
iptables -A INPUT -p tcp --dport 25565 --syn -m limit --limit 25/s --limit-burst 50 -j ACCEPT
iptables -A INPUT -p tcp --dport 25565 --syn -j DROP

# Блокировка невалидных пакетов
iptables -A INPUT -m state --state INVALID -j DROP

# Разрешить установленные соединения
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Тюнинг ядра Linux (sysctl) для защиты от SYN-флуда:

# /etc/sysctl.d/99-minecraft-ddos.conf

# SYN cookies - защита от SYN-флуда без таблицы состояний
net.ipv4.tcp_syncookies = 1

# Размер очереди SYN
net.ipv4.tcp_max_syn_backlog = 4096

# Игнорировать ICMP redirect
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0

# Защита от спуфинга IP
net.ipv4.conf.all.rp_filter = 1

Применить без перезагрузки: sysctl -p /etc/sysctl.d/99-minecraft-ddos.conf

Важно: правила firewall работают только если трафик вообще дошёл до сервера. Против объёмных атак (volumetric flood) это не поможет - нужна фильтрация выше по цепочке.

EpicGuard - антибот-плагин для защиты от L7

EpicGuard - один из самых активно поддерживаемых антибот-плагинов для Paper/Spigot. На 2026 год актуальна версия для Minecraft 1.20+/1.21+.

Установка:

  1. Скачать JAR с GitHub releases EpicGuard
  2. Положить в plugins/
  3. Перезапустить сервер
  4. Отредактировать plugins/EpicGuard/config.yml

Ключевые настройки config.yml:

# Максимум подключений с одного IP в секунду
connection-throttle:
  enabled: true
  # Подключений в секунду с одного IP
  connections-per-second: 3
  # Время бана при превышении (секунды)
  ban-time: 120

# Проверка через капчу при подозрении
captcha:
  enabled: true
  # Тип капчи: MAP (карта в игре) или CHAT (в чате)
  type: MAP

# Геоблокировка - блокировать страны, не типичные для вашей аудитории
geo-blocker:
  enabled: true
  # Режим: BLACKLIST (блокировать перечисленные) или WHITELIST (разрешать только перечисленные)
  mode: BLACKLIST
  countries:
    - CN
    - RU  # раскомментировать только если ваша аудитория не из России
    # Добавляйте коды стран по ситуации

# Проверка VPN/прокси (требует API-ключ)
vpn-blocker:
  enabled: false  # включить при наличии ключа от ip-api.com или аналога

# Лимит на количество аккаунтов с одного IP
accounts-per-ip:
  enabled: true
  limit: 3

# Whitelist для известных игроков
whitelist:
  enabled: true

Команды EpicGuard в игре:

/epicguard status       - текущая статистика (заблокировано/разрешено)
/epicguard whitelist add <ник>   - добавить игрока в whitelist
/epicguard blacklist add <IP>    - заблокировать IP вручную
/epicguard reload       - перезагрузить конфиг без рестарта

EpicGuard не останавливает атаку полностью - он не позволяет ботам загружать сервер, отфильтровывая их до входа в игровой мир. Это критично при L7 атаках, когда канал чист, но CPU перегружен обработкой псевдо-логинов.

Velocity - прокси для скрытия реального IP

Velocity - современный прокси-сервер для Minecraft, разработанный командой PaperMC. Его главная роль в защите - скрыть реальный IP игрового сервера и принять первый удар на себя.

Архитектура с Velocity:

Игрок -> [IP прокси: 25565] -> Velocity -> [внутренний IP бэкенда: 25566]

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

Установка Velocity:

# Скачать актуальный JAR
wget https://api.papermc.io/v2/projects/velocity/versions/3.4.0-SNAPSHOT/builds/latest/downloads/velocity-3.4.0-SNAPSHOT.jar -O velocity.jar

# Запустить для генерации конфига
java -Xms512M -Xmx512M -jar velocity.jar

Основной конфиг velocity.toml:

# Порт, на котором слушает прокси (публичный)
bind = "0.0.0.0:25565"

# Имя сервера в мотд
motd = "&aMой сервер"

# Максимум игроков
show-max-players = 100

# Forwarding: modern - единственный безопасный режим
player-info-forwarding-mode = "MODERN"

# Защита от атак
[advanced]
# Тайм-аут подключения (мс) - убрать зависшие соединения
connection-timeout = 5000
# Читать тайм-аут (мс)
read-timeout = 30000
# Балансировка нагрузки (если несколько бэкендов)
# ...

[servers]
# Список бэкенд-серверов (внутренние адреса)
lobby = "127.0.0.1:25566"

[forced-hosts]
# Принудительный роут по имени хоста
"play.myserver.ru" = ["lobby"]

Настройка Paper-бэкенда для работы с Velocity:

В paper-global.yml (или config/paper-global.yml):

proxies:
  velocity:
    enabled: true
    online-mode: true
    # Ключ из velocity.toml -> forwarding-secret
    secret: "ВАШ_СЕКРЕТНЫЙ_КЛЮЧ_ИЗ_VELOCITY"

В server.properties:

online-mode=false
server-ip=127.0.0.1
server-port=25566

Важно: бэкенд должен быть доступен только через Velocity. Закройте порт 25566 в firewall для всех, кроме IP Velocity (или 127.0.0.1 при локальной установке).

# Закрыть прямой доступ к бэкенду
iptables -A INPUT -p tcp --dport 25566 ! -s 127.0.0.1 -j DROP

Скрытие реального IP - почему это критично

Даже идеальная защита на уровне плагинов бесполезна, если атакующий знает реальный IP сервера и бьёт напрямую, минуя прокси.

Как атакующие узнают IP:

  • Исторические DNS-записи (проверьте через SecurityTrails или аналоги)
  • Сниффинг трафика - если IP когда-либо светился в публичных запросах
  • Социальная инженерия - старые скрины, логи чатов с IP
  • Базы данных утечек

Меры по защите IP:

  1. Никогда не публиковать реальный IP в открытых источниках. Всегда давать домен.
  2. При переезде на новый IP сделать паузу 7-14 дней перед публичным анонсом и проверить, что старый IP не индексируется.
  3. Velocity / BungeeCord держать на отдельном сервере с отдельным IP. Если у хостинга есть возможность выдать “чистый” IP - использовать его для прокси.
  4. Настроить DNS TTL = 60 секунд - при атаке можно быстро сменить IP в DNS.
  5. Не использовать реальный IP сервера для SSH или панели управления - отдельный management-порт или VPN.

Дополнительные меры защиты на уровне плагинов

Кроме EpicGuard, есть ряд настроек и инструментов, усиливающих защиту.

Настройки server.properties против спама:

# Минимальная задержка между сообщениями в чате (мс) - снижает флуд
rate-limit=0

# Уменьшить тайм-аут для неактивных соединений
# (в Paper настраивается отдельно)

Paper: настройки против атак (paper-global.yml):

# Тайм-аут подключения
packet-limiter:
  all-packets:
    action: DROP
    interval: 7.0
    max-packet-rate: 500.0
  overrides:
    ServerboundPlaceRecipePacket:
      action: DROP
      interval: 4.0
      max-packet-rate: 5.0

Мониторинг через Spark (плагин профилировщик):

/spark tps          - показывает TPS (20 = норма, < 15 = проблема)
/spark health       - общая информация о нагрузке
/spark profiler     - профилировщик CPU для выявления узких мест

Spark помогает понять, что именно грузит сервер во время атаки - конкретный плагин или обработка сетевых пакетов.

Выбор хостинга с DDoS-защитой для Minecraft

Выбирая хостинг, смотрите не только на “есть DDoS-защита” в описании, но и на детали.

ПараметрНа что смотреть
Тип фильтрацииL3/L4 и L7 - оба уровня
Ёмкость защитыЧем больше Гбит/с, тем лучше (10+ Гбит/с - минимум)
Игровые профилиСпецифическая фильтрация для Minecraft TCP
Поведение при атакеФильтрация, а не null-route
Время реакцииАвтоматическая фильтрация без участия человека
СетьСобственная AS или аренда у крупного провайдера

Сигналы тревоги при выборе хостинга:

  • “Защита до 1 Гбит/с” - недостаточно для серьёзных атак
  • “При атаке IP блокируется на 30 минут” - это null-route, не защита
  • Нет информации о типе фильтрации

Связанные материалы

Подробнее о принципах работы DDoS-фильтрации на уровне провайдера читайте в статье Защита от DDoS-атак. Специфику фильтрации volumetric-атак на сетевом уровне разбираем в DDoS L4 защита: как работает фильтрация. После настройки защиты рекомендуем оптимизировать сам сервер - материал Оптимизация Minecraft-сервера поможет снизить нагрузку в штатном режиме.

Заключение

Защита Minecraft-сервера от DDoS строится на трёх уровнях: фильтрация трафика хостингом, прокси-сервер Velocity для скрытия реального IP и антибот-плагин EpicGuard против L7 атак. Ни один из этих уровней не работает в одиночку - только вместе они дают надёжную защиту. Настройте firewall с лимитами соединений, включите sysctl-защиту от SYN-флуда и следите за логами сервера - ранняя диагностика атаки позволяет реагировать до того, как сервер упадёт. Регулярно проверяйте, что реальный IP бэкенда нигде не засветился, и обновляйте плагины - атаки эволюционируют, и актуальные версии EpicGuard и Velocity закрывают новые векторы.

Pterohost - хостинг Minecraft с аппаратной DDoS-фильтрацией, быстрым NVMe-хранилищем и живой поддержкой в любое время суток. Промокод 4START даёт -20% на первый заказ. Заказать Minecraft хостинг