└── README.md /README.md: -------------------------------------------------------------------------------- 1 | # Konfiguracja Serwera Proxy 2 | **Poradnik ten został napisany pod najnowsze wersje silników Paper oraz Velocity i jest aktywnie rozwijany. Jeśli korzystasz ze starszych wersji któregoś z tych silników, konfiguracja może się różnić.** 3 | 4 | # 0. Dlaczego Velocity? 5 | Kiedyś znajdowało się tu wyjaśnienie przewag Velocity nad BungeeCordem, ale jako że BungeeCord już umarł, uważam iż jest ono zbędne. Według statystyk bStats, na ten moment Velocity jest dwukrotnie popularniejszy niż BungeeCord i wszystkie silniki na nim bazujące razem wzięte. 6 | 7 | ------------------------------------------------------------------------------------------------------------ 8 | 9 | # 1. Instalacja i pierwsze uruchomienie silnika Velocity 10 | Aby zainstalować Velocity, należy wejść na [stronę Papera](https://papermc.io/downloads#Velocity) i pobrać najnowszy build. Upewnij się, że masz zainstalowaną najnowszą wersję Javy. Teraz możesz wrzucić silnik do wybranego folderu na twoim serwerze i uruchomić serwer. 11 | Dla samego serwera proxy wystarczy przypisać 0.5gb pamięci RAM, jednak pluginy też trochę potrzebują, dlatego lepiej przypisać 1gb-2gb. Ważne jest też by zostawić wolny ram dla overheadu, autor Velocity zaleca by w systemie zostało tyle samo ramu, ile jest przypisane do Velocity + 2gb. Oznacza to, że w przypadku przypisanego 1gb, maszyna powinna mieć przynajmniej 4gb. W zależności od ilości zainstalowanych pluginów może być konieczne zwiększenie przypisanego ramu (flagi Xmx oraz Xms) do 2gb. 12 | 13 | ------------------------------------------------------------------------------------------------------------ 14 | 15 | # 2. Konfiguracja Velocity 16 | Jeśli uruchomiłeś serwer proxy pewnie zauważyłeś, że wygenerowały się nowe pliki. Ważny dla ciebie jest plik 'velocity.toml'. Opiszę kilka ważniejszych opcji: 17 | 18 | **bind = "0.0.0.0:25577"** 19 | Pozwala zmienić port serwera proxy oraz wybrać jeden z adresów IP w przypadku, gdy maszyna posiada ich więcej niż 1. Adres 0.0.0.0 oznacza listę wszystkich dostępnych adresów IP. 20 | **Zalecane**: Jeśli posiadasz cały adres IP - "0.0.0.0:25565". Jeśli nie, wpisz port który otrzymałeś od swojego hostingu. 21 | 22 | **motd = "<#09add3>A Velocity Server"** 23 | Pozwala zmienić tekst wyświetlający się w liście serwerów. Zazwyczaj używane są do tego pluginy, ponieważ oferują większą funkcjonalność. 24 | 25 | **show-max-players = 500** 26 | Wyświetlana w liście serwerów maksymalna ilość slotów. 27 | 28 | **online-mode = true** 29 | Opcja ta sama co w przypadku serwera Minecraft - pozwala przełączyć autoryzację graczy z serwerami Microsoftu. Wyłączenie jej pozwoli dołączać na serwer graczom z piracką wersją gry oraz otworzy wiele luk w bezpieczeństwie, dlatego zalecam zostawić ją włączoną. 30 | 31 | **player-info-forwarding-mode = "NONE"** 32 | Pozwala wybrać tryb przesyłu UUID oraz adresów IP dołączających graczy między serwerem proxy a serwerem Minecraft. Jeśli twój serwer wpuszcza graczy tylko z wersji 1.13 lub nowszych, ustaw ją na "MODERN". Jeśli jednak na serwer mogą wchodzić gracze z wersji starszych niż 1.13, wpisz tu "BUNGEEGUARD". Na każdej z tych opcji inaczej konfiguruje się serwery Minecraft, aby przyjmowały połączenia z serwera proxy, zostało to opisane w punkcie 3. 33 | **Zalecane**: "MODERN" 34 | 35 | **[servers]** 36 | Tutaj możesz dodać swoje serwery Minecraft. Pamiętaj by NIE używać tutaj publicznego adresu ip, a zamiast tego adres lokalny/wewnętrzny. Więcej informacji na ten temat znajdziesz w sekcji [Networking](https://github.com/Helios3991/konfiguracja-serwera-proxy#5-networking). Port możesz użyć dowolny, pod warunkiem, że nie jest on zajęty przez inny proces i masz do niego dostęp. Port w tej sekcji musi być taki sam jak port w pliku server.properties wybranego serwera Minecraft. Znajduje się tutaj także opcja 'try', w której możesz ustawić serwer, na który gracz będzie przenoszony po dołączeniu przez serwer proxy (najczęściej używana dla serwera Lobby). 37 | 38 | **[forced-hosts]** 39 | Możesz tutaj ustawić połączenia pomijające serwer lobby zależnie od podanej subdomeny. Wymagane są odpowiednie ustawienia domeny. Jeśli z tego nie korzystasz, usuń całą zawartość tej opcji. 40 | **Zalecane**: Usuń całą sekcję, zostawiając tylko linijkę '[forced-hosts]'. 41 | 42 | **To są wszystkie ważne opcje, pamiętaj żeby poprawnie je ustawić.** 43 | 44 | ------------------------------------------------------------------------------------------------------------ 45 | 46 | # 3. Konfiguracja serwerów Minecraft 47 | Sam serwer Minecraft też posiada parę opcji, które trzeba zmienić. Pierwszym plikiem będzie server.properties, w którym musisz ustawić port (server-port) taki sam jak w configu Velocity oraz wyłączyć tryb online (online-mode=false). Pozostałe ustawienia są zależne od wersji: 48 | 49 | Zacznij od ustawienia w pliku server.properties adresu IP oraz portu, które są zgodne z tymi w configu Velocity. 50 | 51 | **Dla serwerów wpuszczających wyłącznie graczy z wersji 1.13 i nowszych** 52 | 1. W velocity.toml ustaw 'player-info-forwarding-mode' na "MODERN" 53 | 2. W config/paper-global.yml w sekcji 'velocity-support' ustaw 'enabled: true' i 'online-mode: true' oraz wpisz klucz serwera proxy (znajdujący się w pliku forwarding.secret) w opcji 'secret'. 54 | 55 | **Dla serwerów wpuszczających graczy z wersji starszych niż 1.13** 56 | 1. W velocity.toml ustaw 'player-info-forwarding-mode' na "BUNGEEGUARD" 57 | 2. W spigot.yml ustaw 'bungeecord' na 'true' 58 | 3. Zainstaluj plugin [BungeeGuard](https://github.com/nickuc-com/BungeeGuardPlus/releases) na serwerach Minecraft 59 | 4. W configu BungeeGuarda wpisz klucz serwera proxy (znajdujący się w pliku forwarding.secret) w opcji 'allowed-tokens' 60 | 61 | 62 | **Teraz możesz uruchomić swoje serwery! Jeśli wszystko dobrze zrobiłeś, będziesz mógł połączyć się przez adres i port serwera proxy.** 63 | 64 | ------------------------------------------------------------------------------------------------------------ 65 | 66 | # 4. Dodatkowa konfiguracja 67 | Opisane tu zmiany nie są tak niezbędne jak te wcześniejsze, jednak często są przydatne. Poprawiają ogólne działanie sieci, więc warto z nich skorzystać, jeśli spełniasz warunki. 68 | 69 | **tcp-fast-open - Velocity** 70 | - Przyspiesza łączenie się gracza z serwerem Proxy, jeśli serwer ten stoi na dowolnej dystrybucji Linuxa. 71 | - Zalecana wartość: true 72 | - Warunek: Serwer proxy musi stać na Linuxie. 73 | 74 | **network-compression-threshold - Server.properties** 75 | - Gdy serwer Minecraft stoi na tej samej maszynie co serwer proxy to nie musi on kompresować przesyłanych danych, ponieważ wysyła je tylko do serwera proxy, który zajmuje się kompresją. Nie zmieniaj tej opcji, jeśli serwery stoją na różnych maszynach. 76 | - Zalecana wartość: -1 77 | - Warunek: Serwer musi stać na tej samej maszynie co proxy. 78 | 79 | ------------------------------------------------------------------------------------------------------------ 80 | 81 | # 5. Networking 82 | Poprawna konfiguracja ruchu sieciowego między serwerami ma ogromny wpływ na bezpieczeństwo twojej sieci serwerów, a także na użycie zasobów łącza. 83 | 84 | **Na początek wyjaśnię parę terminów:** 85 | 1. Sieć publiczna/globalna - To właśnie nazywamy Internetem. Jeśli posiadasz dostęp do Internetu, nieważne gdzie jesteś, możesz połączyć się z dowolnym urządzeniem w sieci publicznej. 86 | 2. Sieć lokalna - Taka sieć jest dużo mniejsza niż sieć globalna i ogranicza się do urządzeń stojących za pojedynczym routerem. Lokalny ruch sieciowy nie wydostaje się do sieci publicznej poprzez router. To właśnie poprzez sieć lokalną przechodzi ruch sieciowy 87 | podczas gry LAN czy komunikacji z drukarką. 88 | 3. Adres publiczny - To adres twojego routera w sieci publicznej (przykład: 104.28.212.230). Otwierając usługę sieciową na tym adresie będzie ona widoczna w całej sieci globalnej. Placeholder adresowy '0.0.0.0' oznacza wszystkie publiczne adresy IP do których urządzenie posiada dostęp. 89 | 4. Adres loopback (localhost) - Znany już niektórym adres 127.0.0.1, to adres "samego siebie", usługa sieciowa na nim uruchomiona będzie widoczna tylko dla aplikacji otwartych na tej samej (wirtualnej) karcie sieciowej. Zalecany w przypadku serwerów niezarządzanych, takich jak VPS. 90 | 5. Adres wewnętrzny - To adres pojedynczego urządzenia w sieci lokalnej. Dla przykładu, router może mieć adres 192.168.0.1, komputer 192.168.0.10, a drukarka 192.168.0.15. Otwierając usługę sieciową na tym adresie będzie ona widoczna wyłącznie w danej sieci lokalnej. Jeśli nie posiadasz własnego VLAN-a, zazwyczaj obejmują całą infrastrukturę hostingu. 91 | 6. Adres niestandardowy - Są to adresy wprowadzone przez zewnętrzne oprogramowanie do specyficznych zastosowań. Przykładowo popularny panel dla serwerów gier Pterodactyl wprowadza adres 172.18.0.1, który pozwala połączyć się jedynie z poziomu jednego Node'a. Niektóre hostingi zarządzane oferują także adresy prywatne, które są ograniczone do pojedynczego pakietu zasobów. 92 | 7. Serwer backendowy - To serwer, do którego dostęp potrzebują jedynie inne serwery. Przykładami takich serwerów są np. bazy danych oraz serwery Minecraft stojące za serwerem proxy. 93 | 94 | Twoim celem jest obniżenie poziomu dostępu do sieci oraz trasy ruchu sieciowego dla serwerów backendowych do minimum, w którym twoje pozostałe serwery nadal mogą się z nimi kontaktować. Jeśli korzystasz z pojedynczej maszyny niezarządzanej (vps/dedyk), otwórz serwery backendowe na adresie 127.0.0.1. Jeśli twój hosting zarządzany oferuje adresy wewnętrzne, najczęściej w zakładce panelu związanej z siecią/portami, nadaj je dla serwerów backendowych. Jeśli stoisz na jednym Node w czystym Pterodactylu, użyj adres 172.18.0.1. Jeśli twój hosting nie oferuje żadnych funkcjonalności dotyczących konfiguracji ruchu sieciowego, to znaczy że nie jest on odpowiednio dostosowany pod sieci serwerów i powinieneś poszukać alternatywy. 95 | 96 | W przypadku hostingów zarządzanych (z panelem), opcja przełączenia serwera na sieć prywatną lub wewnętrzną znajduje się zazwyczaj w zakładce dotyczącej sieci lub portów. Utwórz nowy port prywatny/wewnętrzny, ustaw go jako port główny i usuń poprzedni port. Jeśli masz na tym etapie problem, skontaktuj się z supportem swojego hostingu. 97 | 98 | ------------------------------------------------------------------------------------------------------------ 99 | 100 | # 6. Niebezpieczeństwa trybu Offline 101 | Tryb Offline charakteryzuje się brakiem autoryzacji z serwerami Microsoftu. Pozwala dołączać graczom z piracką wersją Minecrafta, potocznie (i bardzo myląco) nazywaną Non-Premium. Dla niektórych właścicieli serwerów może to być pożądane działanie, jednak niesie to ze sobą wiele problemów i niebezpieczeństw. Do poważniejszych z nich można zaliczyć: możliwość dołączania z dowolną nazwą użytkownika bez jakiejkolwiek autoryzacji, ataki z wykorzystaniem botów, proste i szybkie tworzenie wielu kont oraz problemy dotyczące UUID w niektórych pluginach. Niektóre problemy można częściowo ukryć, jednak nie są to skuteczne rozwiązania. 102 | 103 | ------------------------------------------------------------------------------------------------------------ 104 | 105 | # 7. Zabezpieczenie trybu Offline 106 | Ten punkt opisze co można zrobić, aby tryb Offline był bezpieczniejszy niż domyślnie. Jeśli zdecydowałeś się na tryb Online, możesz go pominąć. 107 | 108 | **Autoryzacja** 109 | Na początek warto wspomnieć, że istnieją 3 rodzaje autoryzacji - Online (Autoryzacja z serwerami Microsoftu), Offline (Autoryzacja pluginem, wszyscy gracze zakładają hasła do swojego konta na serwerze Minecraft) oraz Hybrydowa (Gracze z zakupioną grą będą autoryzowani z serwerami Microsoftu, a piraci będą autoryzowani pluginem). Istnieje wiele pluginów służących do autoryzacji graczy, jednak trzeba szczególnie uważać by nie trafić na jeden z tych gorszych - luka w takim pluginie może skutecznie zakończyć cały twój serwer. Zalecam unikać tych pluginów, których kod źródłowy nie jest dostępny publicznie. 110 | 111 | W poradniku użyję plugin [LibreLogin](https://github.com/Navio1430/LibreLoginProd): 112 | 1. Pobierz plugin [LibreLogin](https://modrinth.com/plugin/libreloginprod) 113 | 2. Pobierz i jednorazowo uruchom serwer [NanoLimbo](https://github.com/BoomEaro/NanoLimbo/releases) w celu wygenerowania pliku konfiguracyjnego 114 | - jeśli czujesz się na siłach to możesz także wybrać inny silnik serwera limbo, np. [PicoLimbo](https://github.com/Quozul/PicoLimbo). Poradnik skupi się na NanoLimbo ze względu na prostotę konfiguracji 115 | 4. Zmień opcje w configu NanoLimbo: 116 | - bind.port: Port który chcesz użyć dla serwera Limbo 117 | - bind.ip: Adres który chcesz użyć dla serwera Limbo 118 | - infoForwarding.type: MODERN / BUNGEE_GUARD, zależnie co wybrałeś wcześniej 119 | - infoForwarding.secret / tokens: Klucz serwera proxy 120 | 5. Dodaj serwer NanoLimbo do configu serwera proxy tak samo jak pozostałe serwery 121 | 6. Wrzuć LibreLogin do folderu 'plugins' w plikach serwera Velocity 122 | 7. Otwórz plik 'config.conf' w folderze 'plugins/LibreLogin' 123 | 8. Zmień opcje: 124 | - auto-register=true 125 | - new-uuid-creator=MOJANG 126 | 9. Wpisz swoje serwery lobby oraz Limbo w odpowiednie miejsca 127 | 10. Skonfiguruj przedział portów dla serwera Limbo w pliku konfiguracyjnym LibreLoginu tak, aby mieścił się w nim port twojego serwera Limbo 128 | 11. Uruchom Velocity 129 | 130 | Inne sprawdzone pluginy: [LimboAuth](https://github.com/Elytrium/LimboAuth) 131 | 132 | **Weryfikacja** 133 | Aby ochronić serwer przed atakiem botów, trzeba weryfikować wszystkie próby dołączenia na serwer. Filtry (tzw. antyboty) dzielą się na dwie rodziny: wewnętrzne i zewnętrzne. Wewnętrzne filtry (pluginy) skuteczniej wykryją bota, jednak mogą być nieprzyjemne dla niektórych graczy (przykład: blokada vpn, obowiązek przepisania kodu). Dodatkowo, podczas nawet małego ataku serwer zostanie szybko przeciążony, ponieważ całe filtrowanie odbywa się na zasobach tego serwera. Zewnętrzne filtry to zbiory wielu maszyn stojące między graczem a serwerem Velocity. Mogą występować w postaci serwerów proxy lub być zintegrowane z siecią serwera. Wytrzymają wielokrotnie silniejsze ataki niż pluginy, lecz posiadają mniejszy wgląd w połączenie gracza z serwerem i tym samym przepuszczą niektóre mniejsze ataki. Idealnym rozwiązaniem jest użycie obu rodzajów filtrów jednocześnie. 134 | 135 | W poradniku użyję [Sonar](https://github.com/jonesdevelopment/sonar) jako filtr wewnętrzny: 136 | 1. Pobierz plugin [Sonar](https://modrinth.com/plugin/sonar) 137 | 2. Wrzuć pobrany pluginy do folderu 'plugins' w plikach serwera Velocity 138 | 139 | **UWAGA: Poradnik dla zewnętrznych filtrów znajduje się w punkcie 8.** 140 | 141 | Inne sprawdzone pluginy: [EpicGuard](https://github.com/4drian3d/EpicGuard) 142 | 143 | ------------------------------------------------------------------------------------------------------------ 144 | 145 | # 8. Zabezpieczenie serwera przed atakami DDoS 146 | Ataki DDoS to problem każdego serwera, nieważne jak dużego. Na szczęście można go łatwo rozwiązać. Wiele hostingów nadal oferuje filtry wyłącznie na warstwach 3 i 4, przez co warstwa 7 (aplikacyjna) jest otwarta na ataki. Jeśli twój hosting nie oferuje filtrów na warstwie aplikacyjnej w cenie, ta sekcja jest dla ciebie. 147 | 148 | **AKTUALNIE NIC TU NIE MA, ROZBUDOWANY PORADNIK MOŻE POJAWI SIĘ W PRZYSZŁOŚCI.** 149 | Przykładowe usługi filtrów zewnętrznych: 150 | - [NeoProtect](https://neoprotect.net/) 151 | - [TcpShield](https://tcpshield.com/) 152 | 153 | ------------------------------------------------------------------------------------------------------------ 154 | 155 | # 9. Przydatne pluginy na serwer proxy 156 | Kiedyś sporym minusem Velocity były małe ilości pluginów, jednak aktualnie coraz częściej można spotkać plugin wspierający Velocity, ale niewspierający BungeeCorda. Pluginy Velocity znajdują się przede wszystkim na [Modrinth](https://modrinth.com/plugins?g=categories:%27velocity%27) oraz [Hangar](https://hangar.papermc.io/?platform=VELOCITY). Większość pluginów dla BungeeCorda ze SpigotMC także posiada wsparcie dla Velocity. 157 | Kilka polecanych pluginów: 158 | - [LuckPerms](https://luckperms.net/) - Pozwala zarządzać uprawnieniami i rangami. 159 | - [FastMOTD](https://modrinth.com/plugin/minimotd) - Plugin pozwalający edytować MOTD serwera w sposób bardziej rozbudowany niż opcja w configu Velocity. 160 | - [CommandWhitelist](https://modrinth.com/plugin/commandwhitelist) - Umożliwia dodanie komend serwera proxy do whitelisty dla danych rang. 161 | - [AjQueue](https://modrinth.com/plugin/ajqueue)/[LimboQueue](https://modrinth.com/plugin/limboqueue) - Kolejka dołączania graczy. 162 | - [LibertyBans](https://modrinth.com/plugin/libertybans) - Rozbudowany system karania graczy. 163 | - [LimboReconnect](https://modrinth.com/plugin/limboreconnect) - Korzystając z tego pluginu gracze nie będą wyrzucani z serwera podczas restartu. 164 | - [EnhancedVelocity](https://modrinth.com/plugin/enhancedvelocity) - Posiada małe funkcje typu Quality of Life. 165 | - [VLobby](https://modrinth.com/plugin/vlobby) - Dodaje komendę /lobby. 166 | 167 | Staraj się trzymać na proxy jedynie niezbędne pluginy. Velocity jest bardzo lekki, lecz pluginy już niekoniecznie. 168 | --------------------------------------------------------------------------------