Protejarea unui server Unturned împotriva atacurilor DDoS

Publicat pe 24 min de citit

De ce porturi are nevoie cu adevărat un server Unturned, de ce 27017 este de prisos din 2021, cum limitați valul de interogări, floodul de conectări și încărcarea de la pluginuri, și de la ce dimensiune a atacului mai ajută doar filtrarea în rețeaua din fața serverului.

Un server Unturned care seara dispare pentru câteva minute din lista de servere și aruncă în același timp afară toți jucătorii cu o depășire de timp are rar o problemă de hardware. De cele mai multe ori rulează un atac, și anume exact atunci când este cea mai mare activitate. Acest articol arată mai întâi ce puteți securiza singur, fără costuri suplimentare, apoi unde se termină aceste măsuri din motive tehnice și, la final, ce trebuie să se întâmple atunci în rețeaua din fața serverului.

Toate datele se referă la Unturned Dedicated Server (U3DS, App ID SteamCMD 1110390) sub Debian 12, Debian 13, Ubuntu 22.04 LTS sau Ubuntu 24.04 LTS. Comenzile sunt scrise pentru root, ca utilizator obișnuit puneți sudo în față. Dacă atacul este în curs, nu modificați mai întâi nimic în configurație și nu reporniți serverul: salvați valorile măsurate (secțiunea 10), după atac ele nu mai există.

De ce sunt atacate tocmai serverele Unturned

Serverele Unturned sunt atacate deoarece adresa lor este publică, traficul de joc circulă prin UDP și un atac nu cere celui care îl declanșează nici pricepere, nici bani de luat în seamă. Toate trei punctele se aplică aici mai puternic decât la majoritatea celorlalte jocuri.

Un server Unturned public își publică adresa IP de la sine. Trebuie să o facă, altfel nu l-ar găsi nimeni: browserul de servere Steam îl interoghează direct, iar listele terțe precum unturned-servers.net sau BattleMetrics trec adresa IP și portul în clar. unturned-servers.net verifică pentru asta, după propria declarație, la fiecare cinci minute dacă serverul acceptă conexiuni UDP pe portul de server. Pentru un atacator asta nu este un efort, ci un formular.

La asta se adaugă publicul jocului. Unturned este gratuit, bariera de intrare este zero, iar între proiectele de roleplay și cele de supraviețuire există o concurență reală pentru aceiași jucători. Un jucător cu interdicție, un fost administrator jignit sau un proiect vecin nu are nevoie de niciun acces pe serverul dumneavoastră pentru a-l face inutilizabil o oră. Ce este tehnic un atac DDoS și de ce adresele de expeditor falsificate îl fac atât de greu de urmărit explică articolul Ce este un atac DDoS?.

Porturile despre care este vorba în realitate

Un server Unturned ocupă exact două porturi UDP consecutive: valoarea setată în Commands.dat și această valoare plus unu. În configurația implicită sunt 27015 și 27016. Documentația oficială de la Smartly Dressed Games descrie împărțirea astfel: primul port poartă interogările listei de servere, al doilea traficul de joc. Se setează numai primul, al doilea rezultă automat.

Name Serverul meu Unturned
Port 27015
MaxPlayers 24
Map PEI
Mode Normal
Perspective Both
Owner 76561198000000000

Fișierul Commands.dat se află sub U3DS/Servers/<Instanță>/Server/Commands.dat. Formatul lui este neobișnuit și o sursă frecventă de erori: o comandă pe linie, fără semn de egal, valoarea despărțită printr-un spațiu, iar comenzile sunt sensibile la majuscule și minuscule. Liniile care încep cu // sunt comentarii.

Punctul cel mai important pentru firewall este acesta: portul 27017 nu mai este necesar din versiunea 3.21.30.0 din 21 noiembrie 2021. Înainte de asta, un server Unturned cerea trei porturi, deoarece interogarea Steam se afla pe port plus doi. Cu această actualizare, interogarea împarte portul cu serverul însuși, iar al treilea port a dispărut. Ghidurile pentru routere, wikiurile hosterilor și postările din forumuri numesc totuși 27017 până astăzi. Un 27017 deschis nu vă mai aduce niciun avantaj, este pură suprafață de atac.

La fel de important: Unturned nu are un port RCON încorporat. Documentația oficială cunoaște numai intrarea și ieșirea de consolă, care se pot înlocui prin interfața ICommandInputOutput. Orice control la distanță pe care îl vedeți pe un server Unturned provine dintr-un plugin și aduce cu el un port TCP propriu. Acest port trebuie să îl găsiți singur și să îl restrângeți singur, deoarece nimeni nu l-a securizat pentru dumneavoastră.

Caracteristică Valoare (implicită) Protocol Unde se setează
Portul de interogare (Steam A2S, lista de servere) 27015 UDP Port în Commands.dat
Portul de joc 27016 (portul plus unu) UDP nu se poate seta separat
Al treilea port, 27017 nu mai există din 3.21.30.0 (21.11.2021) niciunul de închis
Al doilea server pe aceeași mașină 27017, al treilea 27019 UDP Port, pas de doi
RCON niciun port încorporat TCP numai prin plugin configurația pluginului
Adresa de legare toate interfețele niciunul Bind în Commands.dat
Pachete pe jucător și pe secundă 50,0 UDP Max_Packets_Per_Second
Pingul maxim admis 750 ms niciunul Max_Ping_Milliseconds
Rata de conectări pe fereastră de timp 10 încercări în 40,0 de secunde niciunul Rate_Limit_Kick_Threshold
Coada de așteptare 8 locuri, cel mult 64 niciunul Queue_Size în Commands.dat
Anti-cheat VAC și BattlEye, amândouă active niciunul VAC_Secure, BattlEye_Secure
Factorul de amplificare al interogării Steam 5,5 (US-CERT TA14-017A) UDP proprietate a protocolului
Rata normală a pachetelor de intrare la 24 de jucători circa 1.200 de pachete pe secundă UDP 24 ori 50
Saturarea unei conexiuni de 1 Gbit/s 125 MB/s, circa 1,49 mil. de pachete pe secundă la 64 de octeți niciunul fizica conexiunii
Atacuri filtrate pe serverele KernelHost 473,4 Gbit/s la 41,5 mil. de pachete pe secundă; flood UDP de 112,2 Gbit/s UDP valori măsurate din exploatare

Ce puteți face singur înainte să dați bani

Această secțiune este cea mai lungă, și asta în mod intenționat. Un server Unturned configurat curat rezistă din propriile forțe atacurilor mici și medii, indiferent la cine se află.

1. Inventar: ce ascultă în realitate

Înainte să scrieți o singură regulă, verificați ce oferă serverul dumneavoastră în exterior. Nu ghiciți, verificați:

ss -lnup
ss -lntp

Prima comandă arată socketurile UDP care ascultă, a doua socketurile TCP. Interesantă este coloana cu adresa locală. 0.0.0.0:27015 și [::]:27015 înseamnă „accesibil din întregul internet”, 127.0.0.1:3306 înseamnă „numai local” și nu are nevoie de nicio regulă de firewall. Pe lângă joc se găsesc acolo frecvent un plugin RCON, un panou web, o bază de date și un vechi server de test pe 27017, pe care nu îl mai folosește nimeni. Perspectiva atacatorului o oferă o scanare de porturi din exterior, pentru Unturned în mod expres cu UDP:

nmap -Pn -sU -p 27000-27050 ADRESA.IP.A.SERVERULUI
nmap -Pn -p- --min-rate 1000 ADRESA.IP.A.SERVERULUI

2. Lăsați deschise numai 27015 și 27016

Pentru Unturned sunt suficiente două permisiuni UDP spre exterior. Pentru jocul în sine nu este nevoie de niciun port TCP: documentația oficială cere expres UDP pentru ambele porturi, iar stratul de rețea al jocului (Steam Networking Sockets, de la o actualizare încoace valoarea implicită) lucrează exclusiv prin UDP. Cine deschide suplimentar TCP urmează un ghid învechit.

ufw allow 22/tcp comment 'SSH'
ufw allow 27015/udp comment 'Unturned interogare'
ufw allow 27016/udp comment 'Unturned joc'
ufw default deny incoming
ufw default allow outgoing
ufw --force enable
ufw status verbose

Ordinea este importantă, altfel vă blocați singur accesul. Instrucțiunile complete, inclusiv calea de salvare, se află în Configurarea firewallului UFW fără să vă blocați singur accesul. Dacă operați mai multe instanțe, respectați pasul recomandat de doi (27015, 27017, 27019) și deschideți pentru fiecare instanță exact cele două porturi pe care le ocupă în realitate.

Un panou web, o bază de date sau un plugin RCON nu au ce căuta în rețeaua deschisă. Restrângeți portul respectiv cu ufw allow from 203.0.113.10 to any port 8080 proto tcp la propria dumneavoastră adresă, sau ajungeți la interfață printr-o redirecționare locală prin SSH cu ssh -N -L 8080:127.0.0.1:8080 root@ADRESA.IP.A.SERVERULUI. Baza de date se leagă la 127.0.0.1.

3. Securizați portul de interogare fără să zburați din lista de servere

Portul de interogare este punctul cel mai sensibil al unui server Unturned. Prin el răspunde serverul la interogările Steam A2S_INFO, A2S_PLAYERS și A2S_RULES. Dacă îl blocați complet, serverul dispare din orice listă de servere, chiar dacă rulează impecabil.

Un răspuns A2S este considerabil mai mare decât cererea. US-CERT trece protocolul Steam în prezentarea lui despre atacurile de amplificare prin UDP (TA14-017A) cu un factor de amplificare a lățimii de bandă de 5,5. Concret asta înseamnă: un atacator trimite interogări cu adresa expeditorului falsificată către game servere străine și dirijează răspunsurile, de circa cinci ori și jumătate mai mari, către ținta lui reală. Serverul dumneavoastră nu este atunci victima, ci amplificatorul împotriva unui terț. În sens invers, un val de interogări este suficient pentru a face serverul să dispară din browserul de servere, fără să zboare un singur jucător. Operatorii raportează exact asta: serverul rulează, jucătorii de pe el nu observă nimic, dar nu mai poate fi găsit.

Împotriva valurilor mici de interogări ajută o limită superioară pe adresă sursă. Interogările legitime vin rar: browserul Steam întreabă o dată pe afișare, serviciile de stare la câteva minute.

iptables -I INPUT -p udp --dport 27015 -m hashlimit --hashlimit-name unturned_query --hashlimit-mode srcip --hashlimit-above 10/sec --hashlimit-burst 20 -j DROP
iptables -I INPUT -p udp --dport 27016 -m hashlimit --hashlimit-name unturned_game --hashlimit-mode srcip --hashlimit-above 300/sec --hashlimit-burst 500 -j DROP

Al doilea număr se deduce direct din joc: Unturned limitează un jucător din fabrică la 50 de pachete pe secundă (Max_Packets_Per_Second). 300 de pachete pe secundă și pe adresă sursă lasă deci unei singure conexiuni destul aer, chiar dacă mai mulți jucători stau în spatele aceleiași adrese. Ambele valori sunt valori de pornire, nu adevăruri. Măsurați mai întâi o săptămână de regim normal, altfel vă aruncați afară jucătorii proprii.

Regulile pure de iptables dispar după o repornire. Sub Debian și Ubuntu ele se salvează cu apt-get install -y iptables-persistent și netfilter-persistent save. Sub UFW, astfel de reguli aparțin în /etc/ufw/before.rules, deoarece altfel dispar la următorul ufw reload.

La asta se adaugă un obicei care nu costă nimic: dacă pagina dumneavoastră web sau botul dumneavoastră de Discord afișează numărul de jucători, nu interogați serverul de la fiecare vizitator, ci stocați rezultatul la intervale fixe. O pagină de stare mult vizitată produce altfel o interogare pe vizitator, în loc de una pe interval.

4. Setați limitele încorporate în Config.json

Unturned aduce în Config.json, în același folder Server ca Commands.dat, o secțiune care este pentru apărare mai importantă decât ar sugera numele ei. Valorile implicite sunt:

"Server": {
    "VAC_Secure": true,
    "BattlEye_Secure": true,
    "Max_Ping_Milliseconds": 750,
    "Timeout_Queue_Seconds": 15.0,
    "Timeout_Game_Seconds": 30.0,
    "Max_Packets_Per_Second": 50.0,
    "Join_Rate_Limit_Window_Seconds": 40.0,
    "Rate_Limit_Kick_Threshold": 10,
    "Use_FakeIP": false
}

Max_Packets_Per_Second limitează un jucător conectat la 50 de pachete pe secundă. Join_Rate_Limit_Window_Seconds și Rate_Limit_Kick_Threshold aruncă afară o conexiune care depășește limita mai mult de zece ori în 40 de secunde. VAC_Secure și BattlEye_Secure cer ambele sisteme anti-cheat de partea jucătorului și țin astfel departe cea mai mare parte a clienților de unică folosință.

Un lucru trebuie să fie clar: aceste limite acționează împotriva clienților care se conectează efectiv sau încearcă să o facă. Împotriva unui flood cu adrese de expeditor falsificate ele nu acționează, deoarece acolo nu apare niciodată o sesiune. Ele sunt totuși importante, deoarece opresc cazul individual cel mai frecvent: un singur client manipulat, care supraîncarcă serverul de unul singur. Este rezonabil să lăsați Max_Ping_Milliseconds pe 750; setat mai jos, serverul aruncă afară jumătăți de rundă la fiecare scurtă smucitură de rețea.

5. Degrevați urmărirea conexiunilor

Acest punct este aproape întotdeauna trecut cu vederea și explică întreruperi care arată ca un atac de volum, dar nu sunt. Kernelul creează intrări în urmărirea conexiunilor (conntrack) și pentru traficul UDP, iar la adrese de expeditor falsificate fiecare adresă nouă înseamnă o intrare nouă. Dacă tabelul este plin, kernelul elimină pachete fără deosebire: atacul și jucătorii dumneavoastră zboară afară împreună. În jurnalul de sistem apare atunci nf_conntrack: table full, dropping packet.

sysctl net.netfilter.nf_conntrack_count net.netfilter.nf_conntrack_max
dmesg -T | grep -i conntrack

Pasul cel mai eficient este să nu lăsați traficul Unturned să fie urmărit deloc. Jocul își administrează singur sesiunile și nu are nevoie de nicio urmărire de stare în kernel:

iptables -t raw -A PREROUTING -p udp --dport 27015 -j NOTRACK
iptables -t raw -A PREROUTING -p udp --dport 27016 -j NOTRACK

Aveți grijă ca permisiunile dumneavoastră pentru aceste două porturi să nu mai treacă după aceea prin ESTABLISHED,RELATED, ci să stea ca reguli de acceptare proprii. Abia după asta merită să măriți nf_conntrack_max. Cine mărește mai întâi tabelul doar amână problema cu câteva minute și consumă pentru asta memorie de lucru.

Dacă pachetele sosesc mai repede decât le preia procesul serverului, se umple suplimentar bufferul de recepție al socketului. Pentru jucători asta arată ca pierdere de pachete, deși conexiunea este liberă:

net.core.rmem_max = 16777216
net.core.rmem_default = 1048576
net.core.netdev_max_backlog = 16384

Puneți valorile sub /etc/sysctl.d/ și activați-le cu sysctl --system. Dacă sunt necesare vă spune kernelul: dacă UdpRcvbufErrors crește în nstat -az sau dacă în ss -lunp stă permanent ceva în coada de recepție, atunci ele acționează. Dacă amândouă rămân la zero, ajustarea nu schimbă nimic. Asta este rezervă, nu protecție.

6. Flood de conectări, coada de așteptare și lista albă

Un flood de conectări este un atac în care atacatorul folosește calea obișnuită de conectare pentru a consuma sloturi și timp de calcul, în loc să umple conexiunea. Unturned aduce împotriva lui patru instrumente, toate aflate în Commands.dat:

  • Queue_Size 32 stabilește coada de așteptare. Valoarea implicită este de 8 locuri, maximul este 64. O coadă prea mare ajută un atacator, una prea mică aruncă jucătorii reali la fiecare repornire.
  • Whitelisted comută serverul pe listă de acces. Înscrierea se face din consolă cu permit <SteamID64>, ștergerea cu unpermit <SteamID64>.
  • Password ParolaDvs exclude tot ce are adresa numai dintr-o listă.
  • Filter respinge jucătorii cu caractere nepermise în nume, iar MaxPlayers 24 ține numărul de sloturi la ce suportă cu adevărat hardwareul.

O listă albă vă protejează logica jocului, nu conexiunea. Un atacator care vă inundă serverul nu vrea deloc să se conecteze. Pachetele lui sunt respinse, dar au sosit totuși, și exact aceasta este chestiunea.

7. RocketMod, OpenMod și partea pluginurilor

Unturned are două platforme de pluginuri răspândite, și amândouă rulează în același proces ca serverul. RocketMod este cea mai veche: întreținătorii inițiali au încetat îngrijirea pe 20 decembrie 2019 și au pus codul sursă sub licența MIT. Smartly Dressed Games întreține de atunci derivatul Legally Distinct Missile (LDM), care este deja livrat împreună cu serverul dedicat: se copiază Rocket.Unturned din folderul Extras în folderul Modules. Dezvoltatorii recomandă expres derivatul, deoarece el remediază probleme vechi de Rocket, precum erorile de threading și exploiturile de teleportare.

OpenMod este succesorul mai nou, dezvoltat de unul dintre întreținătorii inițiali de Rocket. El nu înlocuiește RocketMod, ci rulează alături de el și poate folosi pluginurile Rocket existente printr-o integrare. Pentru apărare asta înseamnă două lucruri.

În primul rând: fiecare plugin este suprafață de atac în procesul principal. Un plugin care declanșează o interogare în baza de date la fiecare mesaj de chat sau la fiecare eveniment de joc este un Denial of Service de fabricație proprie. Un singur jucător care declanșează un eveniment în buclă scoate atunci serverul din funcțiune fără nicio lățime de bandă. Țineți lista de pluginuri scurtă, preferați pluginurile cu sursă deschisă și măsurați rata de cadre a serverului după fiecare extensie.

În al doilea rând: deoarece Unturned nu are un port RCON propriu, orice control la distanță provine dintr-un plugin. Verificați după instalare cu ss -lntp ce port TCP a deschis și restrângeți-l la propria dumneavoastră adresă. Un port de control la distanță deschis, cu parolă slabă, nu este o problemă de DDoS, ci o problemă de preluare.

8. Conținutul din Workshop și procesul de conectare

Conținutul din Workshop face conectarea scumpă, iar asta se răsfrânge direct pe vulnerabilitate. Se controlează prin WorkshopDownloadConfig.json din același folder Server:

{
    "File_IDs": [],
    "Ignore_Children_File_IDs": [],
    "Query_Cache_Max_Age_Seconds": 600,
    "Max_Query_Retries": 2,
    "Use_Cached_Downloads": true,
    "Should_Monitor_Updates": true,
    "Shutdown_Update_Detected_Timer": 600
}

În File_IDs stau identificatorii Workshop ai hărților și ai modurilor. La pornire serverul le descarcă împreună cu dependențele, iar fiecare jucător le descarcă automat la conectare. Trei consecințe ar trebui să le cunoașteți. În primul rând, conectarea durează mult la liste mari de moduri, iar după un atac toți jucătorii revin în același timp, ceea ce încarcă serverul a doua oară. În al doilea rând, Should_Monitor_Updates oprește serverul de îndată ce un fișier din Workshop este actualizat: valoarea implicită a Shutdown_Update_Detected_Timer, de 600 de secunde, duce atunci la o repornire pe care operatorii o iau cu regularitate, în caz de atac, pentru un succes al atacatorului. În al treilea rând, fiecare mod este cod străin pe serverul dumneavoastră.

Practic asta înseamnă: țineți lista cât se poate de scurtă, verificați după fiecare repornire neașteptată mai întâi jurnalul serverului pentru mesajul despre actualizarea din Workshop și dezactivați Should_Monitor_Updates numai atunci când planificați singur actualizările.

9. Lista de servere, codul serverului și funcția Fake IP

Adresa dumneavoastră IP nu se poate ține secretă cât timp serverul este listat public. Fiecare jucător care a fost conectat o dată o cunoaște, iar listele terțe o publică oricum. Două obiceiuri ajută totuși: nu publicați niciunde singur adresa brută și conectați-vă jucătorii printr-un nume de gazdă, ca o schimbare de adresă să nu rupă fiecare referință. Clasicul este înregistrarea A uitată către adresa veche, care face orice schimbare lipsită de efect.

Pentru operarea în internet aveți oricum nevoie de un Game Server Login Token (GSLT) din administrarea de servere Steam, pentru App ID 304930. El are în plus grijă ca codul serverului dumneavoastră să rămână același peste reporniri, în loc să fie generat din nou la fiecare pornire.

Unturned oferă în plus o funcție Fake IP. Ea se activează cu "Use_FakeIP": true în Config.json, iar comanda de consolă CopyFakeIP livrează adresa pe care o publicați apoi. Traficul circulă după aceea prin rețeaua de releu Steam Datagram Relay, adresele atribuite se află în intervalul 169.254.0.0 până la 169.254.255.255, iar adresa reală a serverului nu le mai este arătată jucătorilor. Valve descrie traficul ca autentificat, criptat și limitat în rată.

Prețul pentru asta este mare și este spus rar: adresa și portul se schimbă la fiecare repornire, un nume de domeniu nu se poate îndrepta către ea fără scripturi proprii, iar listele Steam „Favorite” și „Istoric” nu funcționează cu ea, ci numai funcția de marcaje. Mai ales însă, funcția protejează numai calea jocului. Serverul dumneavoastră își păstrează adresa reală, iar SSH, panoul web, baza de date și pagina web rămân accesibile prin ea. Cine cunoaște adresa dintr-o veche înregistrare DNS, dintr-o pagină de stare sau dintr-o conexiune anterioară o atacă în continuare direct. Funcția Fake IP nu înlocuiește deci o filtrare în rețeaua din fața serverului, ea doar micșorează numărul de oameni care cunosc în general adresa dumneavoastră.

10. Înregistrați, ca să nu trebuiască să ghiciți în timpul atacului

Pasul cel mai important este cel pe care aproape nimeni nu îl face dinainte: să creați o bază de comparație cât timp totul merge normal. Fără o valoare normală nu puteți spune, după un incident, dacă 40.000 de pachete pe secundă au fost mult sau pur și simplu vineri seara. Cu apt-get install -y vnstat sysstat măsurarea rulează permanent. În timpul unui incident sunt suficiente patru comenzi:

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

La tcpdump se aplică o regulă: limitați întotdeauna cu -c, o captură sub încărcare maximă apasă suplimentar un server oricum suprasolicitat. Cum evaluați valorile și cum deosebiți un atac de o eroare de software se află în Recunoașterea unui atac DDoS pe server.

Unde se termină aceste măsuri

Toate măsurile de până acum rulează pe serverul dumneavoastră, deci la capătul conexiunii. O regulă de firewall decide asupra unui pachet care a trecut deja prin cablu. Îl puteți elimina, dar nu îl puteți face netrimis.

Faceți o dată socoteala. Un game server tipic atârnă de o conexiune de 1 Gbit/s, adică 125 de megaocteți pe secundă, iar conexiunea este plină de îndată ce cineva trimite mai mult. Regimul normal rămâne mult sub asta: la 24 de jucători și la cele 50 de pachete pe jucător și pe secundă permise din fabrică sosesc circa 1.200 de pachete pe secundă. Un serviciu de booter produce fără nicio pregătire un multiplu al acestei valori.

A doua mărime este rata de pachete, și ea lovește aproape întotdeauna mai devreme decât lățimea de bandă. La pachete mici de 64 de octeți încap într-o conexiune de 1 Gbit/s circa 1,49 milioane de pachete pe secundă. Un kernel obișnuit de server prelucrează, în funcție de procesor și de placa de rețea, câteva sute de mii dintre ele înainte să înceapă să elimine. Un atac care nu vă umple conexiunea nici măcar la o treime poate deci să vă scoată totuși serverul din funcțiune, deoarece timpul de calcul se duce pe eliminarea pachetelor. Operatorii trăiesc asta ca „încărcarea nici nu era mare, și totuși totul era pierdut”.

Pentru încadrare, ce ordine de mărime apar în realitate: pe serverele KernelHost au fost filtrate, printre altele, un atac cu peste 473,4 Gbit/s la peste 41,5 milioane de pachete pe secundă asupra unui server de voce și un flood UDP cu peste 112,2 Gbit/s asupra unui game server. Pentru asta nu există nicio setare locală. Atacurile volumetrice trebuie să se termine în rețeaua din fața serverului.

Ce pune KernelHost împotrivă

Protecția permanentă, inclusă pe fiecare server

Protecția DDoS de la KernelHost este construită pe două niveluri și este activă permanent, fără să fie nevoie să activați, să comandați sau să configurați ceva:

  • Nivelul 1: 17 Tbps capacitate de mitigare în rețeaua globală de scrubbing. Atacurile volumetrice sunt curățate aproape de sursa lor, înainte să ajungă în centrul de date.
  • Nivelul 2: filtrare Arbor în timp real cu 3,2 Tbps în Frankfurt pe Main. Direct în fața serverului, modelele specifice de protocol sunt recunoscute și eliminate, pachet cu pachet.

Două proprietăți sunt decisive. Protecția rulează permanent și nu trebuie să reacționeze abia la un atac, deci nu există minute la început în care serverul este pierdut. Și nu se folosește nullrouting: adresa dumneavoastră IP rămâne în rețea, eliminate sunt numai pachetele dăunătoare. Cine scoate adresa IP din rețea obține pentru dumneavoastră același rezultat ca atacatorul. Locația este Frankfurt pe Main. Ce jocuri și protocoale sunt acoperite le enumeră Protecție DDoS în timp real pentru game servere.

Advanced DDoS Protection pentru proiectele bombardate permanent

Unele proiecte nu sunt atacate ocazional, ci în mod țintit și săptămâni în șir. Pentru asta există Advanced DDoS Protection de la 50,00 EUR pe lună, PrePaid, fără durată minimă și fără taxă de instalare. Diferența nu stă în mai multă capacitate, ci în control:

  • IP de protecție dedicat din nucleul de la Frankfurt, pe care serverul dumneavoastră este comutat în rețeaua proprie. De partea dumneavoastră nu este nevoie de nicio modificare.
  • Reguli de protecție administrabile de dumneavoastră, pe port și pe protocol, în panoul clientului: stabiliți separat ce este permis pe 27015 UDP (interogările) și ce pe 27016 UDP (traficul de joc), fără să scrieți pentru asta un tichet.
  • Modificările au efect în timp real, deci puteți ajusta chiar în timpul unui atac în desfășurare, de exemplu strângând interogările și lăsând traficul de joc neatins.
  • Profil de protecție potrivit jocului, la fel pentru aplicații modificate și proprii pe orice porturi TCP sau UDP, deci și pentru un plugin cu port propriu.

Cele două niveluri în comparație

Caracteristică Protecția DDoS permanentă inclusă Advanced DDoS Protection
Preț inclusă în fiecare pachet de server, fără cost suplimentar de la 50,00 EUR pe lună, PrePaid
Capacitate de filtrare 17 Tbps scrubbing global plus filtrare Arbor în timp real cu 3,2 Tbps în Frankfurt pe Main aceeași filtrare pe două niveluri
Adresă IP adresa IP a serverului dumneavoastră IP de protecție dedicat suplimentar
Set de reguli profiluri automate, nu este nevoie de configurare reguli proprii pe port și pe protocol în panoul clientului
Modificări se aplică automat au efect în timp real, chiar și în timpul unui atac
Profil de joc profiluri optimizate pentru jocurile răspândite, Unturned inclus profil potrivit jocului, și pentru aplicații modificate
Nullrouting nu nu
Durată legată de pachetul de server PrePaid, fără durată minimă, fără termen de preaviz, fără taxă de instalare

Pentru majoritatea proiectelor Unturned, protecția permanentă inclusă este suficientă împreună cu o configurație curată a serverului. Advanced DDoS Protection este răspunsul la faptul că cineva o ia personal.

Greșeli frecvente și soluții

„Ghidul meu spune că trebuie să deschid de la 27015 până la 27017”: Ghidul este mai vechi decât noiembrie 2021. De la versiunea 3.21.30.0, un server Unturned are nevoie doar de două porturi, deoarece interogarea Steam nu se mai află pe port plus doi. Închideți 27017, cu excepția cazului în care acolo rulează o a doua instanță.

„Serverul rulează, dar nu mai apare în nicio listă de servere”: Aceasta este imaginea tipică a unui val de interogări sau a unei reguli proprii prea aspre pe 27015 UDP. Verificați cu iptables -L INPUT -n -v dacă regula dumneavoastră numără potriviri. Dacă contoarele cresc puternic, filtrați chiar acum propriile dumneavoastră intrări în listă. Nu blocați niciodată complet 27015.

„Toți jucătorii zboară afară în același timp, cu depășire de timp”: Verificați mai întâi dacă urmărirea conexiunilor a dat pe dinafară (dmesg -T | grep -i conntrack). Dacă tabelul este plin, kernelul elimină fără deosebire. Timeout_Game_Seconds este din fabrică pe 30 de secunde: cine revine în acest timp își păstrează locul.

„Serverul repornește în plină activitate”: Asta este rar un atac. Verificați jurnalul pentru mesajul despre actualizarea din Workshop detectată. Should_Monitor_Updates oprește serverul după intervalul implicit de 600 de secunde.

„Am schimbat adresa IP și două ore mai târziu eram iar offline”: Atacatorul a luat adresa nouă din aceeași sursă ca pe cea veche, de obicei dintr-o listă de servere, de la un bot de Discord sau dintr-o veche înregistrare DNS. O schimbare de adresă este câștig de timp, nu o soluție.

„Am activat funcția Fake IP și sunt totuși atacat”: Ea ascunde adresa de jucătorii noi, dar nu i-o ia serverului. Cine o cunoaște dintr-o veche intrare în listă, dintr-o pagină de stare sau dintr-o conexiune anterioară ajunge în continuare direct la serverul dumneavoastră, la fel ca la SSH și la orice panou web de pe el.

„Furnizorul meu de până acum mi-a blocat adresa IP”: Acesta este nullrouting. Furnizorul își protejează astfel propria rețea, pentru dumneavoastră rezultatul este identic cu un atac reușit, de obicei încă pentru ore după aceea. Întrebați la nevoie dacă se filtrează sau se face nullrouting. Răspunsul decide mai mult asupra disponibilității dumneavoastră decât orice specificație de hardware.

„În tcpdump nu văd nimic neobișnuit”: Dacă traficul este filtrat deja în rețeaua din față, pe server nu ajunge nimic, așa cum era de așteptat. Acesta este cazul normal la o filtrare care funcționează. Invers se aplică: dacă conexiunea este saturată, în anumite situații nu mai ajunge la dumneavoastră nici măcar sesiunea SSH cu care voiați să măsurați. Folosiți atunci consola VNC din panoul clientului, care funcționează independent de rețeaua sistemului oaspete.

Pe scurt

  • Un server Unturned are nevoie de exact două porturi UDP deschise: valoarea Port setată în Commands.dat (implicit 27015) și această valoare plus unu (27016). Jocul în sine nu are nevoie de TCP.
  • Portul 27017 este de prisos din versiunea 3.21.30.0 din 21 noiembrie 2021, deoarece interogarea Steam nu se mai află pe port plus doi. Cine îl mai are deschis urmează un ghid învechit.
  • Unturned nu are un port RCON încorporat. Orice control la distanță vine dintr-un plugin, aduce cu el un port TCP propriu și trebuie restrâns de dumneavoastră.
  • Portul de interogare 27015 este punctul cel mai sensibil: un val de interogări face serverul invizibil în lista de servere fără să atingă un jucător, iar protocolul Steam are, potrivit US-CERT TA14-017A, un factor de amplificare de 5,5.
  • Limitele din Config.json (Max_Packets_Per_Second 50,0, Rate_Limit_Kick_Threshold 10 la fiecare 40 de secunde) acționează numai împotriva clienților care se conectează cu adevărat, nu împotriva adreselor de expeditor falsificate.
  • O conexiune de 1 Gbit/s este plină la 125 de megaocteți pe secundă, iar la pachete de 64 de octeți deja la circa 1,49 milioane de pachete pe secundă. Regimul normal cu 24 de jucători se situează la circa 1.200 de pachete pe secundă. Tot ce depășește asta îl decide rețeaua din fața serverului, nu firewallul dumneavoastră.
  • La KernelHost, protecția permanentă pe două niveluri este inclusă în fiecare pachet de server fără cost suplimentar și este activă din momentul livrării, fără nullrouting. Cine vrea să conducă singur regulile de filtrare adaugă Advanced DDoS Protection de la 50,00 EUR pe lună.

Dacă proiectul dumneavoastră rulează deja la KernelHost, filtrarea este activă fără să trebuiască să faceți ceva. Dacă observați totuși nereguli, deschideți un tichet de suport, pentru ca regulile de filtrare pentru adresa dumneavoastră IP să fie ajustate. În timpul unui atac în desfășurare ne puteți contacta suplimentar prin chatul de urgență WhatsApp la +43 650 8209883.

Întrebări frecvente

Ce porturi trebuie să las deschise pentru un server Unturned?
Exact două porturi UDP: valoarea setată în Commands.dat și această valoare plus unu, în configurația implicită deci 27015 și 27016. Se setează numai primul, prin linia Port 27015, al doilea rezultă automat. Potrivit documentației oficiale, primul port poartă interogările listei de servere și al doilea traficul de joc. Pentru jocul în sine nu este nevoie de niciun port TCP. Dacă operați mai multe instanțe pe o mașină, documentația recomandă un pas de doi, deci 27015, 27017, 27019.
Trebuie să deschid portul 27017 pentru Unturned?
Nu, din versiunea 3.21.30.0 din 21 noiembrie 2021 nu mai este necesar. Până atunci un server Unturned avea nevoie de trei porturi, deoarece interogarea Steam se afla pe port plus doi. Cu această actualizare, interogarea împarte portul cu serverul, iar al treilea port a dispărut. Foarte multe ghiduri pentru routere, wikiuri de hosteri și postări din forumuri numesc totuși 27017 în continuare. Un 27017 deschis nu aduce astăzi niciun avantaj, este pură suprafață de atac și trebuie închis, în măsura în care acolo nu rulează o a doua instanță de server.
Serverul meu Unturned rulează, dar nu mai apare în nicio listă de servere. Este un atac?
De cele mai multe ori da, și anume un val de interogări pe portul 27015 UDP. Prin acest port răspunde serverul la interogările Steam A2S_INFO, A2S_PLAYERS și A2S_RULES. Dacă este acoperit, serverul dispare din browserul de servere, în timp ce jucătorii deja conectați joacă netulburați mai departe. A doua cauză frecventă este o regulă proprie de firewall prea aspră pe 27015. Verificați cu iptables -L INPUT -n -v dacă regula dumneavoastră numără potriviri. Nu blocați niciodată complet 27015, altfel serverul nu mai poate fi găsit în nicio listă.
Are Unturned un port RCON încorporat?
Nu. Documentația oficială cunoaște numai intrarea și ieșirea de consolă, care se pot înlocui printr-o implementare proprie, prin interfața ICommandInputOutput. Orice control la distanță pe un server Unturned provine de aceea dintr-un plugin și aduce cu el un port TCP propriu. Verificați după instalare cu ss -lntp ce port a fost deschis și restrângeți-l la propria dumneavoastră adresă. Un port de control la distanță deschis, cu parolă slabă, nu este o problemă de DDoS, ci o problemă de preluare.
Protejează funcția Fake IP de la Unturned împotriva atacurilor DDoS?
Doar în parte. Cu Use_FakeIP true în Config.json, traficul de joc circulă prin rețeaua de releu Steam Datagram Relay, iar adresa reală nu le mai este arătată jucătorilor noi. Protecția se termină însă la calea jocului: serverul dumneavoastră își păstrează adresa reală, SSH, panoul web și pagina web rămân accesibile prin ea, iar cine cunoaște adresa dintr-o veche înregistrare DNS sau dintr-o conexiune anterioară atacă în continuare direct. La asta se adaugă faptul că adresa și portul se schimbă la fiecare repornire, iar un nume de domeniu nu se poate îndrepta către ea fără scripturi proprii.
Mă pot apăra cu iptables sau UFW împotriva unui atac DDoS?
Împotriva atacurilor mici și a boților prost făcuți da, împotriva atacurilor volumetrice nu. O regulă de firewall pe server decide asupra pachetelor care au trecut deja prin conexiunea dumneavoastră. Dacă conexiunea este saturată, pachetele jucătorilor dumneavoastră nu mai trec nici înainte de ea, complet independent de cât de bun este setul dumneavoastră de reguli. Utile sunt limitele de rată pe adresă sursă pe 27015 și 27016, precum și NOTRACK pentru ambele porturi, ca urmărirea conexiunilor din kernel să nu dea pe dinafară. Atacurile volumetrice trebuie să se termine în rețeaua din fața serverului.
De la ce dimensiune a atacului nu mai face față singur serverul meu Unturned?
Un game server tipic atârnă de o conexiune de 1 Gbit/s, ceea ce corespunde cu 125 de megaocteți pe secundă. Regimul normal se situează mult sub asta: la 24 de jucători și la cele 50 de pachete pe jucător și pe secundă permise din fabrică sosesc circa 1.200 de pachete pe secundă. Mai importantă decât lățimea de bandă este rata de pachete. În 1 Gbit/s încap, la pachete de 64 de octeți, circa 1,49 milioane de pachete pe secundă, în timp ce un kernel obișnuit de server prelucrează doar câteva sute de mii dintre ele. Un atac vă poate deci scoate din funcțiune, deși lățimea de bandă nu este epuizată.
De ce sunt atacate serverele Unturned atât de des?
Deoarece adresa lor este publică, traficul de joc circulă prin UDP și un atac nu cere celui care îl declanșează nici pricepere, nici bani de luat în seamă. Un server listat public trebuie să își dezvăluie adresa IP și portul, altfel nu îl găsește nimeni: browserul de servere Steam interoghează direct, listele terțe trec amândouă în clar. UDP, la rândul lui, nu cunoaște nicio deschidere de conexiune care ar putea fi pretinsă, iar adresele expeditorului se pot falsifica. Un atacator nu trebuie deci nici să intre pe serverul dumneavoastră, nici să i se adreseze corect pentru a genera încărcare.
Ajută pluginurile RocketMod sau OpenMod împotriva atacurilor DDoS?
Nu, ele pot chiar înrăutăți situația. Ambele platforme rulează în același proces ca serverul. Un plugin care declanșează o interogare în baza de date la fiecare mesaj de chat sau la fiecare eveniment de joc este un Denial of Service de fabricație proprie: un singur jucător scoate atunci serverul din funcțiune fără nicio lățime de bandă. Țineți lista de pluginuri scurtă și măsurați după fiecare extensie. RocketMod nu mai este întreținut de întreținătorii inițiali din 20 decembrie 2019; recomandat este derivatul Legally Distinct Missile, întreținut de Smartly Dressed Games, sau succesorul OpenMod.
Serverul meu de la KernelHost cade offline în timpul unui atac?
Nu. Nu se folosește nullrouting. Adresa dumneavoastră IP rămâne în rețea, eliminate sunt numai pachetele dăunătoare. Protecția este pe două niveluri: 17 Tbps capacitate de mitigare în rețeaua globală de scrubbing și o filtrare Arbor în timp real cu 3,2 Tbps în Frankfurt pe Main. Ea rulează permanent și nu trebuie să reacționeze abia la un atac, deci nu există minute la început în care serverul este pierdut.
Costă extra protecția DDoS la KernelHost?
Nu. Protecția permanentă pe două niveluri este inclusă în fiecare pachet de server fără cost suplimentar și este activă din momentul livrării. Nu trebuie nici să o comandați, nici să o activați sau să o configurați. Asta se aplică unui server Unturned la fel ca oricărei alte aplicații de pe același server, independent de porturile pe care le ocupați.
Când am nevoie pentru serverul meu Unturned suplimentar de Advanced DDoS Protection?
Atunci când proiectul dumneavoastră nu este atacat ocazional, ci în mod țintit și săptămâni în șir, și când vreți să conduceți singur filtrarea. Primiți un IP de protecție dedicat și administrați singur regulile de protecție pe port și pe protocol în panoul clientului, deci separat pentru interogările pe 27015 UDP și traficul de joc pe 27016 UDP. Modificările au efect în timp real, deci puteți ajusta chiar în timpul unui atac în desfășurare. Prețul începe de la 50,00 EUR pe lună, PrePaid, fără durată minimă și fără taxă de instalare.

Unturned Protecție DDoS Unturned Protecție game server Port 27015 Port 27016 Interogare Steam RocketMod OpenMod Advanced DDoS Protection