Velocity + ochrona DDoS: pełny poradnik konfiguracji bezpiecznej sieci Minecraft

Velocity + ochrona DDoS: pełny poradnik konfiguracji bezpiecznej sieci Minecraft

Po co w ogóle Velocity

Jeśli budujesz sieć Minecraft z kilkoma serwerami, potrzebujesz proxy. BungeeCord długo był standardem, ale w 2024-2026 wybór jest oczywisty: Velocity od PaperMC.

Krótko, dlaczego BungeeCord pora na emeryturę:

  • Wydajność. Velocity napisany od zera na nowoczesnym stacku Javy. Zjada mniej pamięci i obsługuje więcej połączeń na tych samych zasobach.
  • Bezpieczeństwo. BungeeCord do dziś używa przestarzałego ip-forwarding. Velocity oferuje modern forwarding z podpisami HMAC, co wyklucza podmianę UUID graczy.
  • API. Velocity ma czyste API event-driven bez legacy kodu. Pluginy działają stabilniej.
  • Wsparcie. PaperMC aktywnie rozwija Velocity. BungeeCord dostaje rzadkie aktualizacje.

Jedyny argument za BungeeCord to zgodność ze starymi pluginami. Ale większość aktualnych pluginów została przeportowana na Velocity.

Architektura: jak wszystko się łączy

Poprawna architektura sieci Minecraft z ochroną DDoS wygląda tak:

Gracz → MineGuard (filtracja) → Velocity (proxy) → serwery Paper (lobby, survival, minigames)

Rozbierzmy każdy poziom:

MineGuard przyjmuje na siebie ruch przychodzący. Gracze łączą się z adresem IP MineGuard, nie z twoim prawdziwym serwerem. Cała filtracja następuje, zanim pakiety trafią do Velocity. Boty, flood, pakiety malformed, wszystko jest odsiewane na tym etapie.

Velocity dostaje już czysty ruch i rozdziela graczy po serwerach. Odpowiada za routing, przełączanie między serwerami (hub -> survival -> minigames) i przesyłanie danych gracza.

Serwery Paper to punkty końcowe, gdzie kręci się sam gameplay. Każdy serwer wie tylko o Velocity i nie widzi świata zewnętrznego bezpośrednio.

Kluczowy moment: prawdziwe IP twojego serwera z Velocity musi być ukryte. Jeśli atakujący pozna bezpośredni adres, obejdzie MineGuard i uderzy wprost.

Instalacja i konfiguracja Velocity

Wymagania

  • Java 17+ (zalecane Java 21)
  • Minimum 512 MB RAM dla proxy (na 100-200 graczy)
  • Serwer Linux (Ubuntu 22.04 / Debian 12)

Instalacja

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

Po pierwszym uruchomieniu Velocity utworzy pliki konfiguracyjne. Zatrzymaj serwer i przechodź do konfiguracji.

velocity.toml - główne parametry

bind = "0.0.0.0:25577"

# Zmieniamy na modern, to krytycznie ważne
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

Parametr bind to adres i port, na którym Velocity nasłuchuje połączeń. Jeśli MineGuard i Velocity są na jednej maszynie, stawiaj 127.0.0.1:25577. Jeśli na różnych, 0.0.0.0:25577, ale obowiązkowo zamknij port firewallem dla wszystkich poza MineGuard.

Modern forwarding

Po włączeniu player-info-forwarding-mode = "modern" Velocity wygeneruje plik forwarding.secret. Ten sekret trzeba skopiować na każdy serwer Paper.

Na serwerach Paper otwórz config/paper-global.yml:

proxies:
  velocity:
    enabled: true
    online-mode: true
    secret: "wklej_tu_sekret_z_forwarding.secret"

Modern forwarding podpisuje dane gracza (UUID, skin, IP) kluczem HMAC. Jeśli ktoś spróbuje połączyć się z serwerem Paper bezpośrednio, omijając Velocity, serwer odrzuci połączenie. To zamyka całą klasę ataków na podmianie UUID.

Firewall: zamykamy wszystko zbędne

Firewall to nie opcja, tylko obowiązkowa część konfiguracji. Bez niego twoje serwery Paper sterczą na zewnątrz i przyjmują bezpośrednie połączenia.

# Zezwalamy na SSH
sudo ufw allow 22/tcp

# Zezwalamy na Velocity TYLKO z IP MineGuard
sudo ufw allow from MINEGUARD_IP to any port 25577 proto tcp

# Zakazujemy bezpośredniego dostępu do serwerów Paper z zewnątrz
# (są na 127.0.0.1, więc już niedostępne, ale na wszelki wypadek)
sudo ufw deny 25565:25570/tcp

# Włączamy firewall
sudo ufw enable

Zamień MINEGUARD_IP na adres IP twojego filtra MineGuard. Jeśli MineGuard ma kilka IP, dodaj regułę dla każdego.

Sprawdź, że porty serwerów Paper są przywiązane do 127.0.0.1, a nie do 0.0.0.0. W server.properties każdego serwera:

server-ip=127.0.0.1
server-port=25565

Podłączenie ochrony DDoS MineGuard

Jak MineGuard filtruje ruch

MineGuard działa jako reverse proxy przed Velocity. Cały ruch przychodzący idzie przez filtr, który analizuje pakiety na kilku poziomach:

  1. Poziom XDP - najszybszy. Odsiewa śmieciowy ruch jeszcze zanim trafi do stosu sieciowego OS.
  2. Poziom TCP - sprawdza poprawność połączeń, odcina SYN flood i anomalne pakiety.
  3. Protokół Minecraft - analizuje zawartość pakietów. Odróżnia boty od prawdziwych graczy po zachowaniu podczas łączenia.

Dla gracza jest to przezroczyste: łączy się z adresem, widzi MOTD, wchodzi na serwer. Różnica jest taka, że między graczem a Velocity stoi filtr, który nie przepuści ataku.

Konfiguracja w panelu MineGuard

  1. Dodaj sieć w panelu MineGuard
  2. Podaj adres backend, IP i port twojego Velocity (twoj_serwer:25577)
  3. Wybierz tryb ochrony (zalecany 'Smart' na początek)
  4. MineGuard wyda ci chronione IP, to jest adres, który dasz graczom

Proxy Protocol

Gdy ruch idzie przez MineGuard, Velocity domyślnie widzi adres IP MineGuard, nie prawdziwe IP gracza. Do rozwiązania tego problemu używa się Proxy Protocol.

W panelu MineGuard włącz Proxy Protocol dla swojej sieci.

W velocity.toml włącz wsparcie:

[advanced]
haproxy-protocol = true

Po tym Velocity będzie poprawnie widział adresy IP graczy. To ważne dla:

  • Ban list po IP
  • Geolokacji
  • Ochrony przed multikontami
  • Poprawnej statystyki

Ważne: po włączeniu haproxy-protocol w Velocity bezpośrednie połączenia (omijające MineGuard) przestaną działać. Velocity będzie oczekiwał Proxy Protocol header od każdego połączenia. To kolejny poziom ochrony, nawet jeśli ktoś znajdzie bezpośrednie IP, nie połączy się bez Proxy Protocol.

Serwis systemd dla Velocity

Żeby Velocity automatycznie startował przy restarcie serwera:

# /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

Testowanie

Zanim dasz adres graczom, sprawdź wszystko po checkliście:

1. Sprawdzenie połączenia przez MineGuard:

Połącz się z chronionym IP z klienta Minecraft. Powinieneś trafić na serwer lobby.

2. Sprawdzenie modern forwarding:

Wejdź na serwer i wykonaj /velocity dump. Upewnij się, że forwarding mode to 'modern'. Na serwerze Paper sprawdź, czy twój UUID jest poprawny (zgodny z UUID Mojanga).

3. Sprawdzenie Proxy Protocol:

Na serwerze Paper wykonaj komendę pokazującą twoje IP (na przykład przez EssentialsX: /whois twoj_nick). IP powinno być twoje prawdziwe, nie adres MineGuard.

4. Sprawdzenie firewalla:

Spróbuj połączyć się bezpośrednio z IP serwera na port 25577, omijając MineGuard. Połączenie powinno być odrzucone przez firewall.

# Z zewnętrznej maszyny
nc -zv twoj_serwer 25577
# Powinien być timeout albo odmowa

5. Sprawdzenie bezpośredniego dostępu do Paper:

Spróbuj połączyć się klientem Minecraft bezpośrednio z adresem serwera Paper. Połączenie powinno być odrzucone (modern forwarding nie przepuści).

Monitoring

Skonfigurowana sieć wymaga monitoringu. Oto co warto śledzić:

W panelu MineGuard

  • Wykres ruchu - ostre skoki oznaczają atak
  • Zablokowane połączenia - pokażą intensywność ataków
  • Latencja - czas między MineGuard a twoim Velocity

Na serwerze

# Liczba aktywnych połączeń do Velocity
ss -tn state established '( dport = :25577 )' | wc -l

# Zużycie zasobów
journalctl -u velocity -f

# Ruch sieciowy
vnstat -l -i eth0

Logi Velocity

W velocity.toml można skonfigurować poziom logowania. Na produkcji zostaw standardowy poziom, ale przy diagnozie problemów przełącz na debug.

Przydatne jest skonfigurowanie alertów: jeśli liczba połączeń nagle spada albo rośnie, coś jest nie tak. Najprostszy wariant to skrypt cron sprawdzający dostępność Velocity i wysyłający powiadomienie na Telegram/Discord.

Częste błędy

'Utracono połączenie z serwerem' przy łączeniu. Zwykle problem z modern forwarding. Sprawdź, czy sekret w paper-global.yml jest zgodny z forwarding.secret i czy tryb stoi na 'modern' po obu stronach.

IP graczy wyświetla się jako IP MineGuard. Nie włączony Proxy Protocol. Włącz w panelu MineGuard i w velocity.toml.

Velocity nie startuje z haproxy-protocol = true. To normalne, jeśli łączysz się bezpośrednio. Z włączonym Proxy Protocol połączenia bez nagłówka PROXYv2 są odrzucane. Łącz się tylko przez MineGuard.

Gracze trafiają na serwer, ale nie mogą przełączać się między serwerami. Sprawdź, czy wszystkie serwery w [servers] są dostępne z maszyny Velocity. Użyj ping i nc do diagnostyki.

Podsumowanie

Duet MineGuard + Velocity to produkcyjne rozwiązanie dla sieci Minecraft każdej skali. MineGuard bierze na siebie filtrację ataków DDoS na poziomie sieciowym, Velocity zajmuje się routingiem graczy, serwery Paper odpowiadają za gameplay.

Kluczowe punkty:

  • Używaj modern forwarding, nie legacy
  • Zamknij firewallem wszystkie porty poza potrzebnymi
  • Włącz Proxy Protocol dla poprawnego przekazywania IP
  • Ukryj prawdziwe IP serwera, nie powinno być w DNS ani publicznym dostępie
  • Monitoruj ruch i połączenia

Ta architektura wytrzymuje poważne ataki DDoS i przy tym nie dodaje zauważalnego opóźnienia dla graczy. Filtracja na poziomie XDP działa szybciej niż jakiekolwiek rozwiązanie programowe w user space, a Velocity zapewnia minimalny overhead przy proxowaniu.


Chroń swój serwer przed atakami DDoS

Darmowa ochrona z konfiguracją w 5 minut. 1 TB ruchu w zestawie.

Wypróbuj za darmo


Powiązane artykuły