Skip to content
Перейти к содержимому
Вернуться в блог
Minecraft-XDP-eBПФ - защита Java серверов от DDoS атак

Minecraft-XDP-eBПФ - защита Java серверов от DDoS атак

Alexandru Maftei
Alexandru Maftei
@ice
Обновлено
45 просмотров
Быстрый ответ:Minecraft-XDP-eBPF - это XDP-брандмауэр на C, который фильтрует трафик Minecraft прямо на уровне сетевого драйвера и удаляет вредоносные пакеты до того, как они достигают вашего сервера. Инструмент защищает от DDoS-атак 7-го уровня, поддерживает Minecraft 1.8 по 26.1.2 на IPv4 и работает только на Linux с правами root.
TL;DR:Minecraft-XDP-eBПФ - это брандмауэр уровня ядра, защищающий Java серверы от DDoS атак 7-го уровня. Он блокирует вредоносные пакеты на уровне сетевого драйвера до того, как они достигнут вашего серверного ПО. Бесплатно, открытый исходный код, использует eBПФ для защиты нулевого копирования с минимальными накладными расходами.
🐙 Проект с открытым исходным кодом Minecraft

Outfluencer/Minecraft-XDP-eBПФ

Первый и единственный доступный для общего пользования фильтр Minecraft XDP, защищающий ваш сервер от DDoS атак 7-го уровня

⭐ 169 звезд💻 C📄 BSD-3-Clause
Посмотреть на GitHub ↗

Если вы когда-нибудь запускали публичный сервер Minecraft, вы знаете это чувство: кто-то отправляет поток мусорного трафика в вашу сторону, и вдруг все начинают лагировать. DDoS атаки 7-го уровня (прикладного уровня) дешевые, легко запускаются и невероятно раздражают при защите с использованием традиционных брандмауэров. Minecraft-XDP-eBПФ решает эту проблему, удаляя вредоносные пакеты перед тем, как они достигнут вашего серверного ПО, прямо на уровне ядра.

Что делает этот проект

Minecraft-XDP-eBПФ - это XDP (eXpress Data Path) брандмауэр, написанный на C, который использует eBПФ (extended Berkeley Packet Filter) для проверки трафика Minecraft на уровне сетевого драйвера. Если это звучит пугающе, думайте об этом так: вместо того чтобы позволить мусорным пакетам пройти всю дорогу до вашего Java сервера, этот инструмент перехватывает их на сетевой карте и блокирует их до того, как они потребляют какие-либо ресурсы сервера.

Проект работает с тем, что многие не понимают в атаках: вредоносно сформированные пакеты протокола Minecraft. Он анализирует рукопожатия, проверки статуса и запросы входа, а затем удаляет всё, что нарушает спецификацию протокола Minecraft или выглядит подозрительно. Суть в том, что неверные VarInts, бессмысленные последовательности пакетов, неправильно сформированные попытки подключения - всё это уходит.

В настоящее время он поддерживает Minecraft 1.8 по 26.1.2 на IPv4, где порт по умолчанию - 25565 (очевидно). Есть встроенное ограничение SYN частоты подключений, ограничивающее подключения на 10 SYN за 3 секунды на IP адрес по умолчанию. Вся эта фильтрация происходит без того, чтобы ваш серверный код даже знал о существовании пакетов.


Почему вам это нужно

Вам это нужно, если вы запускаете публичный сервер и хотите перестать получать постоянные атаки. DDoS 7-го уровня намного более распространён, чем думают люди, и это то, против чего сложно защищаться только с помощью ISP-а вышестоящего уровня. Они смотрят на пропускную способность; вы смотрите на поддержание отзывчивости вашего сервера.

Представьте это: кто-то (или бот-сеть) узнает IP вашего сервера и начинает отправлять тысячи поддельных попыток входа в Minecraft в секунду. Ваш сервер теперь должен тратить циклы CPU на разбор этих пакетов, их отклонение и очистку. Ваши настоящие игроки лагируют потому что сервер утонул в мусоре. С этим инструментом эти поддельные пакеты никогда не достигают вашего сервера.

Настоящий выигрыш здесь - нулевое копирование при удалении. Вредоносный трафик удаляется на уровне XDP (XDP_DROP) перед тем как ядро даже выделит память для него. Это не просто быстро, это микросекунды.

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


Запуск

Установка имеет несколько компонентов, но это не сложно. Вам понадобится Linux система (инструмент только для Linux) с доступом root.

Сначала установите необходимые компоненты. Если вы используете Ubuntu или Debian:

bash
sudo apt update
sudo apt install -y gcc-multilib wget gnupg software-properties-common git libbpf-dev

Затем получите LLVM/Clang. Проекту нужна свежая версия (CI тестирует с LLVM 21):

bash
wget https://apt.llvm.org/llvm.sh
chmod +x llvm.sh
sudo ./llvm.sh 21 all

Вам также потребуется установленная цепочка инструментов Rust. После того как у вас всё есть, клонируйте репозиторий и запустите скрипт сборки:

bash
git clone https://github.com/Outfluencer/Minecraft-XDP-eBПФ.git
cd Minecraft-XDP-eBПФ
./build.sh

После успешной сборки у вас будет бинарник в `target/release/xdp-loader`. Чтобы фактически загрузить брандмауэр на ваш сетевой интерфейс:

bash
sudo ./target/release/xdp-loader eth0

(Замените eth0 на какой-то ваш реальный сетевой интерфейс. Если вы не знаете, `ip link show` вам скажет.)

И это всё. Брандмауэр теперь активен и фильтрует трафик. Хотите мониторить что он делает? Добавьте Prometheus метрики конечную точку:

bash
sudo ./target/release/xdp-loader eth0 --metrics-addr 0.0.0.0:1999

Затем обратитесь к `http://your-server-ip:1999/metrics` чтобы увидеть количество пакетов, удаления и другую интересную статистику.


Функции, которые имеют значение

Глубокая проверка пакетов

Инструмент не просто смотрит на заголовки пакетов, он копается в реальном протоколе Minecraft. Он проверяет кодирование VarInt (что многие инструменты атаки делают неправильно), проверяет структуру пакета и применяет правила последовательности. Пакеты, которые синтаксически неверны для протокола Minecraft, удаляются немедленно.

Дросселирование подключений

По умолчанию он ограничивает новые TCP подключения до 10 SYN за 3 секунды на исходный IP. Вы можете подстроить это в файле `build.rs` если ваш реальный легитимный трафик вдруг скачет (может быть вы мигрируете серверы и у вас скачок), но значение по умолчанию разумно для большинства установок.

Нулевое копирование при удалении

Самая крутая часть, честно говоря. XDP работает на уровне драйвера до того как нормальный сетевой стек ядра даже включится. Вредоносные пакеты удаляются без того чтобы когда-либо копироваться в память ядра. Ваш сервер не просыпается из-за этого. Это реальное улучшение производительности, не просто теоретическое.


Подводные камни и как их избежать

Вам нужно запустить это от root или с соответствующими разрешениями eBПФ. Если вы получаете ошибки разрешения, проверьте что вы используете `sudo`. Никакого сюрприза, но это самая частая проблема.

Если вы подстраиваете конфигурацию в `build.rs` (меняете порты, скорости дросселирования и т. д.), помните что вам нужно пересобрать после редактирования. Не просто заново запускайте бинарник и не ожидайте что он подхватит ваши изменения. Не будет. Я сделал эту ошибку однажды и потратил десять минут, гадая почему моя конфигурация портов не имела эффекта (вообще-то это был не я, просто, гипотетически говоря).

Другой подводный камень: если конфигурация вашей карты меняется - скажем вы включаете Per-CPU карты или возитесь со структурой размеров данных - иногда файловая система BПФ путается при перезагрузке. Исправление ядерное но работает:

bash
sudo rm -r /sys/fs/bpf

Это стирает файловую систему BПФ. Когда вы заново запустите загрузчик, она создаст свежие карты. Делайте это только если вы получаете ошибки о создании карты, это не то что вам нужно делать регулярно.

Также помните что пользовательская программа должна продолжать работать чтобы управлять BПФ картами. Если вы убьёте процесс загрузчика, брандмауэр сразу же выгружается. Вы вероятно захотите запустить его под systemd или под каким-то другим надзирателем, чтобы он перезагружался если он упадёт.


А что с альтернативами?

Нет много инструментов делающих ровно то же самое. Большинство людей либо полагаются на защиту от DDoS своего ISP-а, либо используют коммерческий сервис как Cloudflare, либо просто принимают что их иногда будут бить.

Cloudflare имеет сервис для Minecraft который проксирует ваш трафик, но вы за это платите и IP вашего сервера скрыт позади прокси. Этот инструмент самостоятельный и бесплатный (BSD лицензирован, значит открытый исходный код). Разные компромиссы.

Некоторые люди используют базовое ограничение частоты в их серверном ПО или брандмауэре, но это происходит после того как пакеты достигнут вашего сервера. Этот инструмент их останавливает на уровне драйвера, что быстрее и эффективнее.

Если вы только начинаете с хостинга сервера, сначала проверьте встроенную защиту от DDoS вашего хоста. Но если вы запускаете на голом металле или вам нужно больше контроля, Minecraft-XDP-eBПФ действительно уникален в том что он предлагает.


Перед развёртыванием

Тестируйте его в среде промежуточного хостинга если можете. Запустите его на непроизводственном сервере или тестовом VPS чтобы убедиться что он случайно не фильтрует легитимный трафик (не должен, но ошибки конфигурации случаются). Также проверьте что он работает с вашей конкретной версией Minecraft сервера перед тем как включить его для реальных игроков.

Если вы защищаете сервер выживания, это низкий риск. Если вы запускаете конкурентный PvP или фракционный сервер где легитимные игроки уже раздражены, неправильная конфигурация которая блокирует их пакеты входа может быть катастрофой.

Проект имеет 169 звёзд на GitHub и активно поддерживается. Последний релиз улучшил метод чтения varint, что ровно тот род скучного но критичного stuff который вы хотите видеть в инструменте безопасности. Это солидная работа.

Установите этот Prometheus экспорт метрик. Мониторьте его. Следите за вашей скоростью удаления пакетов - если что-то выглядит странно, вы это рано заметите. И если вы действительно беспокоитесь о DDoS и запускаете легитимный публичный сервер, этот инструмент стоит вашего времени.

Источник: Открыть страницу-источник.

Об авторе
Alexandru Maftei
Alexandru MafteiВедущий автор

Lead writer at minecraft.how. Long-time Minecraft player running a small SMP server, testing every build, mod, and seed before writing about it.

Поделитесь с друзьями!

Часто задаваемые вопросы

От каких атак защищает Minecraft-XDP-eBPF?
От DDoS-атак 7-го уровня, то есть атак на прикладном уровне. Инструмент проверяет кодирование VarInt, структуру пакетов и их последовательность. Всё, что нарушает спецификацию протокола Minecraft или выглядит подозрительно, удаляется немедленно.
Какие версии Minecraft поддерживает этот фильтр?
Minecraft 1.8 по 26.1.2 на IPv4. Порт по умолчанию 25565.
Как установить и запустить Minecraft-XDP-eBPF?
Нужна Linux-система с root-доступом. Установите зависимости (gcc-multilib, libbpf-dev и другие), получите LLVM/Clang (проект тестируется с LLVM 21) и цепочку инструментов Rust, склонируйте репозиторий и запустите ./build.sh. После сборки загрузите брандмауэр командой sudo ./target/release/xdp-loader eth0, где eth0 это ваш реальный сетевой интерфейс.
Что значит нулевое копирование при удалении?
XDP работает на уровне драйвера, до того как обычный сетевой стек ядра вообще включается. Вредоносные пакеты удаляются через XDP_DROP без копирования в память ядра, то есть сервер не тратит на них ни CPU, ни память.
Как следить за тем, что фильтрует брандмауэр?
Добавьте флаг - metrics-addr 0.0.0.0:1999 при запуске. Тогда Prometheus-метрики будут доступны по адресу http://your-server-ip:1999/metrics, где видно количество пакетов, удалений и другую статистику.
Как изменить лимит новых подключений?
По умолчанию разрешено не более 10 SYN-пакетов за 3 секунды с одного IP-адреса. Это значение можно изменить в файле build.rs, но после каждого редактирования нужно пересобирать проект.

Комментарии

Пока нет комментариев. Станьте первым, кто поделится своим мнением!

Похожие статьи

FerrumC: Высокопроизводительные серверы Minecraft на Rust

FerrumC: Высокопроизводительные серверы Minecraft на Rust

FerrumC - высокопроизводительный сервер Minecraft, написанный на Rust, который обрабатывает больше игроков на меньшем оборудовании благодаря многопоточности и эффективному использованию памяти. Совместим с клиентами ваниллы и поддерживает импорт существующих миров, идеально подходит для сообщественных серверов, требующих стабильности TPS.

25.04.2026
Polymer: Альтернативный C++ Клиент для Minecraft

Polymer: Альтернативный C++ Клиент для Minecraft

Polymer - это C++ клиент Minecraft с рендерингом через Vulkan, предназначенный для офлайн серверов, с оптимизированной загрузкой чанков и камерой для зрителей. Узнайте, как собрать, установить и использовать этот экспериментальный просмотрщик в своих мирах.

13.07.2026
Custom-Nameplates: Как стилизовать теги игроков в Minecraft

Custom-Nameplates: Как стилизовать теги игроков в Minecraft

Custom-Nameplates - плагин для серверов Minecraft, превращающий плоские теги игроков в стилизованные, цветные дисплеи. Поддерживает градиенты, анимации, ресурс-паки и модификаторы атрибутов, позволяя брендировать сервер индивидуальной эстетикой тегов. Идеально подходит для серверов survival, roleplay и creative.

30.04.2026

We use cookies to improve your experience. By continuing to use this site, you agree to our use of cookies. Read our Privacy Policy