Защита 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+.
Установка:
- Скачать JAR с GitHub releases EpicGuard
- Положить в
plugins/ - Перезапустить сервер
- Отредактировать
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:
- Никогда не публиковать реальный IP в открытых источниках. Всегда давать домен.
- При переезде на новый IP сделать паузу 7-14 дней перед публичным анонсом и проверить, что старый IP не индексируется.
- Velocity / BungeeCord держать на отдельном сервере с отдельным IP. Если у хостинга есть возможность выдать “чистый” IP - использовать его для прокси.
- Настроить DNS TTL = 60 секунд - при атаке можно быстро сменить IP в DNS.
- Не использовать реальный 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 хостинг