Ochrona serwera Arma 3 przed atakami DDoS

Opublikowano 18 min czytania

Których z pięciu portów UDP od 2302 do 2306 serwer Arma 3 naprawdę potrzebuje, jak zabezpieczyć Steam Query, BattlEye RCon i Headless Client oraz od jakiej liczby pakietów pomaga już tylko filtrowanie w sieci przed serwerem.

Kto chce chronić serwer Arma 3 przed atakami DDoS, ma do czynienia z dokładnie pięcioma portami UDP: od 2302 do 2306. Serwer dedykowany, który wieczorem w środku akcji znika naraz wszystkim graczom, rzadko ma problem ze sprzętem. Zwykle trwa atak wymierzony dokładnie w ten blok portów, i to wtedy, gdy lista serwerów pokazuje najwyższą liczbę graczy. Ten artykuł pokazuje najpierw, co możesz zabezpieczyć sam i bez dodatkowych kosztów, potem, gdzie te działania kończą się technicznie, a na koniec, co musi wydarzyć się w sieci przed serwerem.

Wszystkie informacje dotyczą dedykowanego serwera Arma 3 (aplikacja SteamCMD 233780) na Debianie 12, Debianie 13, Ubuntu 22.04 LTS albo Ubuntu 24.04 LTS. Polecenia są napisane dla użytkownika root, jako zwykły użytkownik poprzedź je poleceniem sudo. Jeśli atak trwa właśnie teraz: nie zmieniaj niczego w konfiguracji i nie restartuj serwera, tylko zabezpiecz najpierw pomiary z rozdziału „Zapisuj logi”. Po ataku już ich nie będzie.

Dlaczego serwery Arma 3 są atakowane i kiedy potrzebna jest ochrona DDoS

Arma 3 łączy kilka cech, które czynią z serwera wygodny cel. Po pierwsze serwer sam publikuje swój adres: zgłasza się na porcie 2304 UDP do serwera master Steam, a na porcie 2303 UDP odpowiada na zapytania nazwą, mapą, liczbą graczy i listą modów. Bez tych dwóch portów nikt cię nie znajdzie, a z nimi twój adres IP stoi w każdej przeglądarce serwerów i na każdej stronie ze statusem, która tę przeglądarkę odpytuje.

Po drugie społeczność jest związana ze stałymi porami. Projekty Life RP na Altis i Tanoa, Exile, Antistasi oraz King of the Hill zapełniają się wieczorami i w weekendy, więc awaria o 20:00 jest widoczna maksymalnie. Po trzecie istnieje konkurencja między projektami, zbanowani gracze i wewnętrzne konflikty, a atak nie kosztuje zlecającego ani umiejętności, ani liczących się pieniędzy.

Technicznie dochodzi punkt decydujący: Arma 3 działa w całości przez UDP, do samej rozgrywki gra nie potrzebuje TCP. UDP nie zna nawiązywania połączenia, którego można by wymagać, a adresy nadawcy da się podrobić. Atakujący nie musi więc ani wchodzić na twój serwer, ani poprawnie się z nim komunikować, żeby wygenerować obciążenie. Do tego dochodzi fakt, że pętla symulacji serwera Arma 3 działa w swojej istocie na jednym rdzeniu procesora: kto wyśle wystarczająco dużo pakietów, zabiera temu jednemu rdzeniowi czas procesora, całkiem niezależnie od tego, ile rdzeni ma poza tym maszyna. Czym dokładnie jest atak DDoS, wyjaśnia wpis Czym jest atak DDoS?.

Porty, o które naprawdę chodzi

Serwer Arma 3 zajmuje fabrycznie blok od 2302 do 2306 UDP. Parametr startowy -port=2302 ustala tylko pierwszy port, pozostałe cztery wynikają z niego na sztywno, jako port gry plus 1 do plus 4. Kto prowadzi kilka instancji na tej samej maszynie, zostawia dlatego co najmniej 100 portów odstępu (2302, 2402, 2502), bo inaczej instancje odbierają sobie nawzajem porty następne.

Port Protokół Do czego Należy do otwartej sieci
2302 (port gry) UDP ruch gry oraz VON, wbudowana transmisja głosu tak
2303 (port gry plus 1) UDP Steam Query: odpowiada na zapytania A2S nazwą, mapą, liczbą graczy oraz listą modów i sygnatur tak, inaczej zabraknie wpisu w przeglądarce serwerów
2304 (port gry plus 2) UDP Steam Master: zgłoszenie serwera do serwera master Steam tak
2305 (port gry plus 3) UDP VON, według Bohemii zarezerwowany i obecnie nieużywany nie
2306 (port gry plus 4) UDP ruch BattlEye, w tym interfejs RCon (RConPort w beserver_x64.cfg) nie, tylko twoje adresy administracyjne
2344 i 2345 (wychodzące) TCP i UDP połączenie BattlEye z serwera do arma31.battleye.com wychodząco zezwolić, przychodząco nie otwierać niczego
3306 TCP MySQL dla extDB3, czyli połączenia z bazą danych każdego frameworku Life nie, zwiąż z 127.0.0.1
22 TCP dostęp SSH nie, tylko twoje własne adresy

Z tych ośmiu wierszy do otwartego internetu należą dokładnie trzy: 2302, 2303 i 2304 UDP. Cała reszta to administracja, a otwarte porty administracyjne to najczęstszy możliwy do uniknięcia błąd na serwerach Arma 3.

Co możesz zrobić sam, zanim wydasz pieniądze

Ten rozdział jest najdłuższy i to celowo. Czysto skonfigurowany serwer Arma 3 wytrzyma małe i średnie ataki o własnych siłach, niezależnie od tego, u kogo stoi.

1. Inwentaryzacja: co nasłuchuje na serwerze?

Zanim napiszesz choć jedną regułę, sprawdź, co twój serwer wystawia na zewnątrz. Nie zgaduj, sprawdź:

ss -lntup

Interesuje cię kolumna z adresem lokalnym. 0.0.0.0:2302 oznacza „osiągalny z całego internetu”, 127.0.0.1:3306 oznacza „tylko lokalnie” i nie potrzebuje żadnej reguły firewalla. Obok gry na serwerze Life pojawiają się tam regularnie MariaDB, serwer WWW dla strony frakcji, usługa TeamSpeak albo inna usługa głosowa oraz zapomniany panel. Spojrzenie oczami atakującego daje skan portów z zewnątrz:

nmap -Pn -sU -p 2300-2320 TWOJ.ADRES.IP.SERWERA
nmap -Pn -p- --min-rate 1000 TWOJ.ADRES.IP.SERWERA

Pierwsze polecenie pokazuje blok UDP gry, drugie wszystko, co stoi otworem na TCP. Serwer Arma 3 do samej rozgrywki nie potrzebuje ani jednego otwartego portu TCP.

2. Zostaw otwarte tylko te porty, których Arma 3 naprawdę potrzebuje

Trzy porty UDP na zewnątrz wystarczą, cała reszta zostaje ograniczona. W UFW wygląda to tak, dokładnie w tej kolejności, żebyś nie zamknął dostępu samemu sobie:

ufw allow from 203.0.113.10 to any port 22 proto tcp comment 'SSH'
ufw allow 2302:2304/udp comment 'Arma 3 gra, Steam Query, Steam Master'
ufw allow from 203.0.113.10 to any port 2306 proto udp comment 'BattlEye RCon'
ufw default deny incoming
ufw default allow outgoing
ufw --force enable
ufw status verbose

Zamień 203.0.113.10 na swój własny adres. Port 2305 zostaje zamknięty, bo Bohemia prowadzi go jako zarezerwowany i obecnie nieużywany. Ważny jest wiersz ufw default allow outgoing: BattlEye nawiązuje z serwera połączenie do arma31.battleye.com i potrzebuje do tego wychodząco portu 2344 na TCP i UDP oraz 2345 na TCP. Kto blokuje ruch wychodzący ryczałtem, blokuje własny anty-cheat. Po przestawieniu sprawdź prawdziwym dołączeniem, że BattlEye nadal przepuszcza twoich graczy. Pełną instrukcję razem z drogą ratunkową znajdziesz we wpisie Konfiguracja firewalla UFW bez zamykania sobie dostępu.

Baza danych w żadnym wypadku nie należy do otwartej sieci. Altis Life i pozostałe frameworki Life rozmawiają z bazą MySQL przez rozszerzenie extDB3, a dane dostępowe stoją otwartym tekstem w @extDB3/extdb3-conf.ini. Sprawdź w /etc/mysql/mariadb.conf.d/50-server.cnf, czy stoi tam:

bind-address = 127.0.0.1

3. Rozbrój port Steam Query, nie wypadając z przeglądarki serwerów

Port 2303 UDP to najwrażliwszy punkt publicznego serwera Arma 3. Odpowiada on na zapytania A2S, czyli na standardowe zapytanie przeglądarki serwerów Steam: A2S_INFO zwraca nazwę, mapę i liczbę graczy, A2S_PLAYERS listę graczy, A2S_RULES listę modów i sygnatur. Zapytanie to mały pakiet UDP, a odpowiedź jest jego wielokrotnością. US-CERT podaje w alercie TA14-017A dla protokołu Steam współczynnik amplifikacji pasma 5,5, a przy Arma 3 odpowiedź wypada szczególnie duża, bo dołączana jest cała lista modów.

Wynikają z tego dwie rzeczy. Po pierwsze twój serwer może zostać wykorzystany jako wzmacniacz przeciwko osobom trzecim, jeśli atakujący wyśle zapytania z podrobionym adresem nadawcy. Po drugie, i dla ciebie ważniejsze, każde zapytanie kosztuje czas procesora na tym jednym rdzeniu, który niesie symulację. Bohemia prowadzi w tej sprawie zgłoszenie od 2015 roku (T83469): podrobione pakiety UDP na port gry albo na port Steam Query wywindowały CPU do 100 procent i zamroziły serwer, a do udanego ataku przez port query wystarczyło już 4 Mbit/s. To właśnie dlatego w Arma 3 liczba pakietów jest groźniejsza niż przepustowość.

Pierwsza dźwignia to rozmiar odpowiedzi. Dyrektywa steamProtocolMaxDataSize w server.cfg określa, ile bajtów serwer może upchnąć w swojej odpowiedzi na zapytanie. Operatorzy dużych list modów podnoszą ją do 2048 albo wyżej, bo inaczej w logu stoi ostrzeżenie „Query data overflow, Mods/Signatures will not be correctly received by clients”. Każde podniesienie powiększa jednak dokładnie tę odpowiedź, którą atakujący wzmacnia. Ustaw więc wartość tak nisko, jak na to jeszcze pozwala twoja lista modów, i usuń nieużywane mody z polecenia startowego:

steamProtocolMaxDataSize = 2048;

Druga dźwignia to ograniczenie liczby zapytań na adres źródłowy, które dotyka wyłącznie portu query. Nie blokuj 2303 UDP ryczałtem: bez odpowiedzi na zapytanie twój serwer znika z przeglądarki serwerów i z każdej strony ze statusem, a nowi gracze już go nie znajdą. Prawdziwa przeglądarka serwerów odpytuje kilka razy na minutę, a nie setki razy na sekundę.

4. Zabierz BattlEye RCon z otwartej sieci

BattlEye to anty-cheat Arma 3 i włącza się go w server.cfg wpisem BattlEye = 1;. Należące do niego zdalne sterowanie, BattlEye RCon, jest osobnym protokołem UDP i konfiguruje się je w BattlEye/beserver_x64.cfg (plik z dopiskiem _x64 dotyczy arma3server_x64, czyli dziś zwyczajowego serwera):

RConPassword TwojeAlfanumeryczneHaslo
RConPort 2306
RConIP 127.0.0.1
MaxPing 350
RestrictRCon 0

Decydujące są trzy punkty. Hasło RCon musi być czysto alfanumeryczne, bo znaki specjalne po cichu wytrącają parser protokołu BattlEye z rytmu, a dostęp RCon z cichym błędem to taki, którego w razie potrzeby nie masz. RConIP określa, na jakim adresie nasłuchuje RCon: jeśli stoi tam 127.0.0.1, interfejs jest osiągalny tylko lokalnie, a twoje narzędzie RCon dosięga go przez przekierowanie SSH. A RConPort musi leżeć powyżej bloku gry, zwyczajowo jest to port gry plus 4, czyli 2306. Kto musi otworzyć RCon na zewnątrz, udostępnia port wyłącznie dla stałego adresu swojego zespołu administracyjnego.

Jedno musi być przy tym jasne: BattlEye to anty-cheat, a nie ochrona przed DDoS. Sprawdza graczy, którzy są połączeni. Atakujący, który zalewa twój serwer, wcale nie chce dołączyć.

5. Zwiąż Headless Client na sztywno

Headless Client to druga instancja Arma 3 bez grafiki, która łączy się z serwerem jak gracz i zdejmuje z niego obliczanie AI. Przy dużych misjach to w ogóle największy zysk wydajnościowy, bo inaczej AI leży na tym samym rdzeniu co symulacja. Odblokowuje się go w server.cfg:

headlessClients[] = {"127.0.0.1"};
localClient[] = {"127.0.0.1"};

Bez tych wpisów serwer w ogóle nie dopuszcza połączenia Headless Client i to dobra wiadomość. Zła jest taka: localClient[] przyznaje wpisanemu adresowi nieograniczoną przepustowość i praktycznie żadnej kontroli opóźnień. Wpisuj tam wyłącznie 127.0.0.1 albo stały adres własnego serwera z Headless Clientem, nigdy całego zakresu adresów. Klienta uruchamia się poleceniem -client -connect=127.0.0.1 -port=2302 -password=..., a zajmuje on jeden slot z maxPlayers. Wlicz go więc do planu, bo inaczej twoi gracze staną przed pełnym serwerem.

6. Utwardź dołączanie, sygnatury i głosowania

Te ustawienia nie chronią twojego łącza, ale zamykają wszystko, co przychodzi zwykłą drogą dołączania: zmanipulowane klienty, wykonywanie skryptów w grze i nadużycia przy głosowaniach. Poniższe wiersze należą do każdej server.cfg publicznego serwera:

verifySignatures = 2;
BattlEye = 1;
kickDuplicate = 1;
allowedFilePatching = 0;
maxPlayers = 64;
disconnectTimeout = 30;
maxPing = 200;
maxDesync = 150;
maxPacketLoss = 50;
kickClientsOnSlowNetwork[] = {1, 1, 1, 1};
voteThreshold = 1.5;
voteMissionPlayers = 100;
onUnsignedData = "kick (_this select 0)";
onHackedData = "kick (_this select 0)";

verifySignatures = 2 wymusza weryfikację sygnatur w wersji 2 dla wszystkich dodatków i jest minimalnym wymaganiem dla każdego publicznego serwera z modami. allowedFilePatching = 0 odmawia dołączenia klientom uruchomionym z -filePatching (wartość 1 pozwala na to tylko Headless Clientom, wartość 2 wszystkim). kickDuplicate = 1 wyrzuca drugie połączenie tego samego identyfikatora. kickClientsOnSlowNetwork[] decyduje osobno dla każdego wpisu, czy cztery progi z maxPing, maxPacketLoss, maxDesync i disconnectTimeout są tylko zapisywane do logu (0), czy egzekwowane (1). disconnectTimeout przyjmuje wartości od 5 do 90 sekund. voteThreshold powyżej 1 czyni głosowania nieosiągalnymi i kończy tym samym najpopularniejszą drogę zakłócenia serwera bez jednego pakietu ataku: zmianę misji przez głosowanie.

7. Ogranicz liczbę pakietów i połączeń na adres źródłowy

Przeciw małym atakom i niechlujnym botom pomaga górny limit na adres źródłowy. Ponieważ Arma 3 jedzie na czystym UDP, pracuje się z hashlimit, a port query dostaje wyraźnie ciaśniejszą granicę niż port gry:

iptables -I INPUT -p udp --dport 2303 -m hashlimit --hashlimit-name a3_query --hashlimit-mode srcip --hashlimit-above 10/sec --hashlimit-burst 20 -j DROP
iptables -I INPUT -p udp --dport 2302 -m hashlimit --hashlimit-name a3_game --hashlimit-mode srcip --hashlimit-above 900/sec --hashlimit-burst 1200 -j DROP
iptables -I INPUT -p udp --dport 2302:2306 -m length --length 0:27 -j DROP

Pierwsza reguła odrzuca zapytania query z tego samego źródła powyżej trwałych dziesięciu na sekundę, druga pakiety gry powyżej trwałych 900 na sekundę, trzecia pakiety UDP bez użytecznego ładunku. Wszystkie trzy liczby to wartości startowe, a nie prawdy objawione: pełny serwer Life z 80 graczami generuje wyraźnie więcej pakietów niż rozgrywka Antistasi we sześciu, a kto ustawi limit zbyt ciasno, wyrzuci własnych graczy. Najpierw mierz przez tydzień w normalnej pracy.

Dwie uwagi. Same reguły iptables znikają po restarcie, na Debianie i Ubuntu zapisuje się je tak:

apt-get install -y iptables-persistent
netfilter-persistent save

A przy UFW takie reguły należą do /etc/ufw/before.rules, bo inaczej znikną przy następnym ufw reload. Często przeoczonym wąskim gardłem jest ponadto śledzenie połączeń w kernelu: także UDP zakłada tam wpisy, a flood zapytań z wielu podrobionych adresów zapełnia tablicę w kilka sekund. Gdy się zapełni, serwer odrzuca także legalne pakiety, a w logu stoi „nf_conntrack: table full”. Stan i górny limit pokazuje:

sysctl net.netfilter.nf_conntrack_count net.netfilter.nf_conntrack_max

8. basic.cfg: przepustowość, rozmiary pakietów i pliki dodatkowe

Drugi plik konfiguracyjny serwera Arma 3 nazywa się basic.cfg i ładuje się go przez -cfg=, podczas gdy -config= ładuje server.cfg. Steruje on zachowaniem sieciowym i zawiera dokładnie jedną wartość istotną bezpośrednio dla bezpieczeństwa:

MaxMsgSend = 1024;
MaxSizeGuaranteed = 512;
MaxSizeNonguaranteed = 256;
MinBandwidth = 15000000;
MaxBandwidth = 100000000;
MinErrorToSend = 0.001;
MinErrorToSendNear = 0.01;
MaxCustomFileSize = 0;
class sockets { maxPacketSize = 1400; };

MaxCustomFileSize to maksymalny rozmiar w bajtach dla plików twarzy i dźwięków, które gracze przynoszą ze sobą, a serwer rozsyła je wszystkim pozostałym. Wartość 0 wyłącza tę dystrybucję. Znika tym samym droga, na której pojedynczy klient zajmuje przepustowość twojego serwera bez żadnej infrastruktury ataku. MinBandwidth to przepustowość, którą serwer przyjmuje za pewną, a wartość orientacyjna to liczba graczy razy 256 kbit/s, czyli około 16 Mbit/s dla 64 slotów. Zbyt optymistyczne wartości podnoszą obciążenie i desynchronizację, bo serwer tworzy wiadomości, które potem odrzuca. MaxMsgSend ogranicza liczbę pakietów na krok symulacji i jest pierwszą dźwignią przeciw desynchronizacji, a domyślna wartość 128 jest dla dzisiejszych serwerów ustawiona za nisko.

9. Zapisuj logi, żeby w trakcie ataku nie zgadywać

Najważniejszy krok to ten, którego prawie nikt nie robi wcześniej: przygotuj bazę porównawczą, dopóki wszystko działa normalnie. Bez wartości normalnej po incydencie nie powiesz, czy 40 000 pakietów na sekundę to dużo, czy po prostu sobotni wieczór. Po apt-get install -y vnstat sysstat pomiar chodzi na stałe w tle, a logFile = "arma3server.log"; w server.cfg daje ci do tego widok od strony serwera. W trakcie incydentu wystarczą cztery polecenia:

sar -n DEV 1 10
ip -s link show eth0
dmesg -T | tail -50
tcpdump -ni eth0 udp portrange 2302-2306 -c 200 -q

Wymowne jest porównanie portów. Jeśli obciążenie leży niemal w całości na 2303, to flood zapytań i uderza on w czas procesora. Jeśli rozkłada się równomiernie na porty od 2302 do 2306 z coraz to nowymi adresami nadawcy, to podrobiony flood UDP i uderza on w łącze. Przy tcpdump obowiązuje zasada: zawsze ograniczaj przez -c, bo zrzut przy pełnym obciążeniu dodatkowo obciąża i tak przeciążony serwer. Jak odczytać te wartości, opisuje wpis Jak rozpoznać atak DDoS. Jak w ogóle czysto zainstalować i aktualizować serwer, opisuje wpis Instalacja serwera gier przez SteamCMD.

Gdzie te działania się kończą

Teraz część, której nie rozwiąże żaden plik konfiguracyjny. Wszystkie dotychczasowe działania dzieją się na twoim serwerze, czyli na końcu łącza. Reguła firewalla decyduje o pakiecie, który już przeszedł przez kabel. Możesz go odrzucić, ale nie możesz sprawić, żeby nie został wysłany.

Policz to razem ze mną. Typowy serwer gier wisi na 1 Gbit/s, czyli 125 megabajtów na sekundę, a łącze jest pełne, gdy tylko ktoś wyśle więcej. Druga wielkość to liczba pakietów na sekundę i w Arma 3 uderza ona prawie zawsze pierwsza. Przy małych pakietach po 64 bajty w łącze 1 Gbit/s mieści się około 1,49 miliona pakietów na sekundę. Zwykły kernel serwera przetworzy z tego, zależnie od CPU i karty sieciowej, kilkaset tysięcy, zanim zacznie odrzucać, a symulacja Arma 3 wisi dodatkowo na jednym jedynym rdzeniu.

Wskaźnik Wartość
Standardowy blok portów od 2302 do 2306 UDP, do samej rozgrywki żadnego TCP
Port query port gry plus 1, domyślnie 2303 UDP
Port RCon (BattlEye) dowolny przez RConPort, zwyczajowo port gry plus 4, czyli 2306 UDP
Odstęp portów przy kilku instancjach co najmniej 100 (2302, 2402, 2502)
Orientacyjna przepustowość w normalnej pracy liczba graczy razy 256 kbit/s, czyli około 16 Mbit/s przy 64 slotach
Współczynnik amplifikacji protokołu Steam 5,5 według alertu US-CERT TA14-017A
Udokumentowana dolna granica skutecznego ataku 4 Mbit/s na port query wystarczyły, żeby zamrozić serwer Arma 3 (zgłoszenie Bohemii T83469)
1 Gbit/s w pakietach około 1,49 miliona pakietów na sekundę przy pakietach o rozmiarze 64 bajtów
Szczyty odfiltrowane w KernelHoście 473,4 Gbit/s przy 41,5 miliona pakietów na sekundę, osobno flood UDP o wolumenie 112,2 Gbit/s

Najbardziej nieprzyjemny jest wiersz z 4 Mbit/s. Atak w Arma 3 nie musi być duży, żeby zadziałać: musi tylko wysłać dość pakietów na właściwy port. Operatorzy przeżywają to jako „przecież obciążenie wcale nie było wysokie, a i tak wszystko padło”. Odwrotnie, przy atakach wolumetrycznych obowiązuje prosta fizyka: przy 473,4 Gbit/s każde ustawienie lokalne jest bez znaczenia, bo pakiety twoich graczy nie przechodzą już wcześniej. Ataki wolumetryczne muszą kończyć się w sieci przed serwerem.

Co przeciwstawia temu KernelHost

Stała ochrona wliczona w każdy serwer

Ochrona DDoS w KernelHoście jest zbudowana dwuwarstwowo i stale aktywna, bez konieczności włączania, zamawiania czy konfigurowania czegokolwiek:

  • Warstwa 1: 17 Tbps pojemności mitygacji w globalnej sieci scrubbing. Ataki wolumetryczne są oczyszczane blisko źródła, zanim dotrą do centrum danych.
  • Warstwa 2: filtrowanie Arbor w czasie rzeczywistym o wydajności 3,2 Tbps we Frankfurcie nad Menem. Bezpośrednio przed serwerem rozpoznawane i odrzucane są wzorce specyficzne dla protokołów, pakiet po pakiecie.

Decydujące są dwie cechy. Ochrona działa nieprzerwanie i nie musi dopiero reagować na atak, nie ma więc kilku minut na starcie, w których serwer znika. I nie stosuje się null-routingu: twój adres IP zostaje w sieci, odrzucane są wyłącznie szkodliwe pakiety. Kto zdejmuje adres IP z sieci, osiąga dla ciebie ten sam efekt co atakujący. Które gry i protokoły są objęte ochroną, wylicza wpis Ochrona DDoS serwerów gier w czasie rzeczywistym.

Advanced DDoS Protection dla projektów pod stałym ostrzałem

Niektóre projekty są atakowane nie okazjonalnie, tylko celowo i przez wiele tygodni. Serwer Life ze stałą społecznością i konkurencyjną sceną to przypadek typowy, a nie wyjątek. Dla nich jest Advanced DDoS Protection od 50,00 € miesięcznie, w modelu PrePaid, bez minimalnego okresu umowy i bez opłaty aktywacyjnej. Różnica nie polega na większej pojemności, tylko na kontroli:

  • Dedykowany chroniony adres IP z rdzenia sieci we Frankfurcie, na który twój serwer zostaje przełączony w naszej sieci. Po twojej stronie nie trzeba niczego przebudowywać.
  • Samodzielnie zarządzane reguły ochrony na port i protokół w panelu klienta: osobno ustawiasz, co jest dozwolone na 2302 UDP, a co na 2303 UDP, i możesz prowadzić port query wyraźnie ciaśniej niż port gry.
  • Zmiany działają w czasie rzeczywistym, możesz więc korygować ustawienia w trakcie trwającego ataku, zamiast czekać na okno serwisowe.
  • Profil ochrony dopasowany do konkretnej gry, tak samo dla zmodyfikowanych i własnych aplikacji na dowolnych portach TCP albo UDP.

Porównanie obu wariantów

Cecha Wliczona stała ochrona DDoS Advanced DDoS Protection
Cena zawarta w każdym pakiecie serwerowym, bez dopłat od 50,00 € miesięcznie, PrePaid
Pojemność filtrowania 17 Tbps globalnego scrubbingu plus filtrowanie Arbor w czasie rzeczywistym o wydajności 3,2 Tbps we Frankfurcie nad Menem to samo dwuwarstwowe filtrowanie
Adres IP adres IP twojego serwera dodatkowy dedykowany chroniony adres IP
Zestaw reguł profile automatyczne, konfiguracja niepotrzebna własne reguły na port i protokół w panelu klienta, na przykład osobno 2302 i 2303
Zmiany dzieją się automatycznie działają w czasie rzeczywistym, także w trakcie ataku
Profil gry zoptymalizowane profile dla popularnych gier profil dopasowany do gry, także dla zmodyfikowanych aplikacji
Null-routing nie nie
Okres umowy powiązany z pakietem serwerowym PrePaid, bez minimalnego okresu umowy, bez okresu wypowiedzenia, bez opłaty aktywacyjnej

Dla większości projektów Arma 3 wystarczy wliczona stała ochrona razem z czystą konfiguracją serwera. Advanced DDoS Protection jest odpowiedzią na sytuację, w której ktoś bierze to do siebie osobiście.

Typowe błędy i ich rozwiązania

„Przełożyłem port z 2302 na 2402, a atak trwał dalej”: tego należało się spodziewać. Serwer sam zgłasza swój nowy port do serwera master Steam, a lista serwerów natychmiast publikuje go z powrotem. Zmiana portu pomaga tylko na kogoś, kto korzysta ze starego adresu ze starego zrzutu ekranu.

„Zablokowałem 2303 w całości i teraz nikt nas nie znajduje”: dokładnie tak to działa. Bez odpowiedzi na porcie Steam Query brakuje wpisu w przeglądarce serwerów, a każda strona ze statusem i każdy bot Discord pokazuje serwer jako offline. Poprawne jest ograniczenie liczby zapytań na adres źródłowy, a nie blokada.

„W logu stoi NetServer::SendMsg: cannot find channel”: ten komunikat pojawia się, gdy serwer chce pisać do połączenia, którego już nie ma. Towarzyszy zwykle zrywającym się połączeniom graczy i spadkom wydajności (Bohemia prowadzi to pod T83936), niekoniecznie atakowi. Sprawdź najpierw, czy liczba pakietów na interfejsie w ogóle jest nietypowa.

„Moje reguły iptables nie działają”: częste są trzy przyczyny. Reguły stoją za łańcuchami UFW i nigdy nie zostają osiągnięte, zniknęły po ostatnim restarcie (wtedy pomogą netfilter-persistent save albo wpis w /etc/ufw/before.rules) albo atak jest wolumetryczny, a reguła pracuje poprawnie na łączu, które jest już pełne. Sprawdź przez iptables -L INPUT -n -v, czy liczniki trafień rosną. Jeśli stoją na zerze, reguła nie jest osiągana.

„BattlEye od nowej konfiguracji firewalla wyrzuca wszystkich graczy”: serwer nie dosięga już arma31.battleye.com. Wychodzące porty 2344 na TCP i UDP oraz 2345 na TCP muszą pozostać otwarte, bo inaczej połączenie anty-cheata z serwera się urywa.

„Mój dotychczasowy dostawca zablokował mój adres IP”: to null-routing. Dostawca chroni w ten sposób własną sieć, a dla ciebie wynik jest identyczny z udanym atakiem, zwykle jeszcze przez wiele godzin po nim. W razie wątpliwości zapytaj, czy ruch jest filtrowany, czy null-routowany. Ta odpowiedź decyduje o twojej dostępności bardziej niż jakakolwiek specyfikacja sprzętu.

„W tcpdump nie widzę nic nietypowego”: jeśli ruch jest filtrowany już w sieci przed serwerem, to zgodnie z oczekiwaniem nic na serwer nie dociera. To normalny stan przy działającym filtrowaniu. Odwrotnie też jest prawdą: gdy łącze jest wysycone, może cię nie dosięgnąć nawet sesja SSH, którą chciałeś użyć do pomiaru. Skorzystaj wtedy z konsoli VNC w panelu klienta, która działa niezależnie od sieci systemu gościa.

Krótkie podsumowanie

  • Serwer Arma 3 potrzebuje na zewnątrz dokładnie trzech portów UDP: 2302 dla gry i głosu, 2303 dla Steam Query oraz 2304 dla zgłoszenia do serwera master Steam. TCP gra nie potrzebuje.
  • Port 2306 UDP niesie BattlEye razem z interfejsem RCon i należy wyłącznie do twoich własnych adresów administracyjnych, ustawiony przez RConPort i RConIP w beserver_x64.cfg.
  • Port Steam Query 2303 to najwrażliwszy punkt: protokół Steam ma według US-CERT TA14-017A współczynnik amplifikacji 5,5, a każde zapytanie kosztuje czas procesora na rdzeniu, który niesie symulację. Ograniczać, a nie blokować.
  • steamProtocolMaxDataSize trzymaj tak małe, jak pozwala lista modów, i ustaw MaxCustomFileSize = 0; w basic.cfg: jedno i drugie zmniejsza ilość danych, które twój serwer wydaje bez pytania.
  • W Arma 3 decyduje liczba pakietów, a nie przepustowość. Bohemia dokumentuje od 2015 roku pod T83469, że do zamrożenia serwera wystarczyły już 4 Mbit/s na port query.
  • Działania lokalne kończą się na łączu. Od 1 Gbit/s wolumenu ataku albo kilkuset tysięcy pakietów na sekundę decyduje wyłącznie filtrowanie w sieci przed serwerem.
  • W KernelHoście dwuwarstwowa stała ochrona jest zawarta w każdym pakiecie serwerowym bez dopłat i działa od momentu udostępnienia serwera, bez null-routingu. Advanced DDoS Protection uzupełnia ją od 50,00 € miesięcznie o dedykowany chroniony adres IP i samodzielnie zarządzane reguły na port.

Jeśli twój projekt działa już w KernelHoście, filtrowanie jest aktywne i nie musisz nic robić. Gdybyś mimo to zauważył coś nietypowego, załóż zgłoszenie wsparcia, żeby reguły filtrowania dla twojego adresu IP zostały skorygowane. Przy trwającym ataku dotrzesz do nas dodatkowo przez awaryjny czat WhatsApp pod numerem +43 650 8209883.

Najczęstsze pytania

Mój serwer Arma 3 jest właśnie offline. Po czym poznam, czy to atak DDoS?
Spójrz na liczbę pakietów na interfejsie, a nie na obciążenie CPU. Przez sar -n DEV 1 10 zobaczysz pakiety i bajty na sekundę, przez ip -s link show eth0 liczniki odrzuconych pakietów. Wymowny jest rozkład na porty: jeśli niemal wszystko leży na 2303 UDP, to flood zapytań Steam Query i uderza on w czas procesora. Jeśli rozkłada się z coraz to nowymi adresami nadawcy na porty od 2302 do 2306, to podrobiony flood UDP i uderza on w łącze. Jeśli obie wartości pozostają niepozorne, a serwer i tak się tnie, to zwykle wina misji albo obciążenia od AI.
Których portów naprawdę potrzebuje serwer Arma 3?
Na zewnątrz dokładnie trzech portów UDP: 2302 dla ruchu gry i wbudowanej transmisji głosu VON, 2303 dla Steam Query oraz 2304 dla zgłoszenia do serwera master Steam. Port 2305 Bohemia prowadzi jako zarezerwowany i obecnie nieużywany, a port 2306 niesie ruch BattlEye razem z RCon i należy wyłącznie do twoich adresów administracyjnych. TCP do samej rozgrywki Arma 3 nie potrzebuje. Parametr startowy -port ustala tylko pierwszy port, pozostałe cztery wynikają z niego na sztywno jako port gry plus 1 do plus 4.
Czy mogę po prostu zablokować port Steam Query 2303?
Nie. Bez odpowiedzi na 2303 UDP twój serwer znika z przeglądarki serwerów Steam, a każda strona ze statusem i każdy bot Discord zgłasza go jako offline. Nowi gracze już go wtedy nie znajdą. Poprawne jest ograniczenie liczby zapytań na adres źródłowy: prawdziwa przeglądarka serwerów odpytuje kilka razy na minutę, a atakujący setki razy na sekundę. Dodatkowo pomaga trzymanie steamProtocolMaxDataSize tak nisko, jak jeszcze pozwala twoja lista modów, bo ta wartość określa wprost rozmiar odpowiedzi.
Czym jest refleksja Steam Query i dlaczego trafia w serwery Arma 3?
Refleksja Steam Query oznacza, że atakujący wysyła zapytania z podrobionym adresem nadawcy do wielu serwerów gier, żeby ich odpowiedzi wylądowały u właściwej ofiary. US-CERT określa współczynnik amplifikacji pasma protokołu Steam w alercie TA14-017A na 5,5. Przy Arma 3 odpowiedź wypada szczególnie duża, bo dołączana jest cała lista modów i sygnatur. Twój serwer jest dotknięty podwójnie: może służyć jako wzmacniacz przeciwko osobom trzecim, a każde zapytanie kosztuje czas procesora na tym jednym rdzeniu, który niesie symulację.
Czy BattlEye chroni mój serwer Arma 3 przed atakami DDoS?
Nie. BattlEye to anty-cheat i sprawdza graczy, którzy są już połączeni. Atakujący, który zalewa twój serwer pakietami UDP, wcale nie chce dołączyć, a jego pakiety dawno dotarły, zanim BattlEye miałby w ogóle co sprawdzać. Na publicznym serwerze jest mimo to obowiązkowy. Szczególnej uwagi wymaga interfejs RCon: działa przez UDP na porcie ustawionym w beserver_x64.cfg przez RConPort, zwyczajowo 2306, i należy go ograniczyć przez RConIP do 127.0.0.1 albo do stałego adresu administracyjnego.
Czy pomoże szybka zmiana adresu IP albo portu?
Tylko na krótko. Serwer sam zgłasza adres i port do serwera master Steam, a lista serwerów publikuje jedno i drugie z powrotem w ciągu minut. Zmiana portu z 2302 na 2402 pomaga więc tylko na kogoś, kto korzysta ze starej informacji ze starego zrzutu ekranu. Zmiana adresu daje trochę czasu, ale nie rozwiązuje problemu, dopóki nowy adres znowu stoi publicznie na liście serwerów. Pamiętaj poza tym o starych wpisach DNS: zapomniany rekord A wskazujący na poprzedni adres unieważnia każdą zmianę.
Czy mogę bronić się przed atakiem DDoS za pomocą iptables albo UFW?
Przed małymi atakami i niechlujnymi botami tak, przed atakami wolumetrycznymi nie. Reguła firewalla na serwerze decyduje o pakietach, które już przeszły przez twoje łącze. Gdy łącze jest wysycone, pakiety twoich graczy nie przechodzą już wcześniej, całkiem niezależnie od tego, jak dobry jest twój zestaw reguł. Sensowne są reguły hashlimit na adres źródłowy, ciasne na 2303 UDP i wyraźnie szersze na 2302 UDP. Ataki wolumetryczne muszą kończyć się w sieci przed serwerem.
Od jakiej skali mój serwer Arma 3 nie poradzi sobie już sam?
Wcześniej, niż spodziewa się większość operatorów. Bohemia dokumentuje od 2015 roku pod zgłoszeniem T83469, że do zamrożenia serwera Arma 3 wystarczyły już 4 Mbit/s podrobionych zapytań na port Steam Query, bo symulacja działa w swojej istocie na jednym jedynym rdzeniu. Przy atakach wolumetrycznych obowiązuje fizyka: typowy serwer gier wisi na 1 Gbit/s, co odpowiada 125 megabajtom na sekundę, a przy pakietach po 64 bajty około 1,49 miliona pakietów na sekundę. Zwykły kernel serwera przetworzy z tego tylko kilkaset tysięcy.
Jak poprawnie zabezpieczyć Headless Client?
Przez dwa wiersze w server.cfg: headlessClients[] i localClient[]. Bez tych wpisów serwer w ogóle nie dopuszcza połączenia Headless Client. Wpisuj tam wyłącznie 127.0.0.1 albo stały adres własnej maszyny z Headless Clientem, nigdy całego zakresu adresów, bo localClient[] przyznaje wpisanemu adresowi nieograniczoną przepustowość i praktycznie żadnej kontroli opóźnień. Pamiętaj poza tym, że każdy Headless Client zajmuje jeden slot z maxPlayers.
Czy mój serwer w KernelHoście przechodzi w offline podczas ataku?
Nie. Null-routing nie jest stosowany, twój adres IP zostaje w sieci, a odrzucane są wyłącznie szkodliwe pakiety. Ochrona jest dwuwarstwowa: 17 Tbps pojemności mitygacji w globalnej sieci scrubbing oraz filtrowanie Arbor w czasie rzeczywistym o wydajności 3,2 Tbps we Frankfurcie nad Menem. Działa nieprzerwanie i nie musi dopiero reagować na atak, nie ma więc kilku minut na starcie, w których serwer znika.
Czy ochrona DDoS w KernelHoście kosztuje dodatkowo i kiedy potrzebuję Advanced DDoS Protection?
Dwuwarstwowa stała ochrona jest zawarta w każdym pakiecie serwerowym bez dopłat i działa od momentu udostępnienia serwera, nie musisz jej ani zamawiać, ani włączać. Advanced DDoS Protection potrzebujesz wtedy, gdy twój projekt jest atakowany nie okazjonalnie, tylko celowo i przez wiele tygodni, a ty chcesz sam sterować filtrowaniem. Dostajesz dedykowany chroniony adres IP i samodzielnie zarządzasz regułami ochrony na port i protokół w panelu klienta, na przykład osobno dla 2302 i 2303 UDP. Zmiany działają w czasie rzeczywistym. Cena zaczyna się od 50,00 € miesięcznie, w modelu PrePaid, bez minimalnego okresu umowy i bez opłaty aktywacyjnej.

Arma 3 Ochrona DDoS Arma 3 Altis Life Ochrona serwera gier BattlEye Headless Client Port 2302 Advanced DDoS Protection