Protejarea unui server Terraria împotriva atacurilor DDoS

Publicat pe 23 min de citit

De ce Terraria vorbește numai TCP, de ce porturi are nevoie cu adevărat serverul, cum securizați serverconfig.txt, TShock și REST API pe 7878, și de la ce dimensiune a atacului mai ajută doar filtrarea în rețeaua din fața serverului.

Cine vrea să își protejeze serverul Terraria împotriva atacurilor DDoS are de-a face cu un caz special: Terraria vorbește exclusiv TCP. Traficul de joc circulă prin exact un port, 7777 TCP, iar un port UDP jocul nu îl deschide deloc. Aproape toate sfaturile care circulă în rețea despre protecția game serverelor sunt scrise pentru jocuri UDP și aici se duc fie în gol, fie acționează în locul greșit.

Acest articol arată mai întâi ce puteți securiza singur, fără costuri suplimentare, apoi unde se termină din motive tehnice aceste măsuri și, la final, ce trebuie să se întâmple atunci în rețeaua din fața serverului. Toate datele se referă la un server dedicat de Terraria (vanilla, TShock sau tModLoader) 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 chiar acum în curs, nu modificați mai întâi nimic în configurație și nu reporniți serverul: salvați valorile măsurate (vedeți secțiunea „Înregistrați în jurnal”), după atac ele dispar.

De ce sunt lovite de atacuri DDoS tocmai serverele Terraria

Serverele Terraria sunt o țintă comodă, deoarece adresa lor este în mod necesar publică. Terraria vanilla nu are un browser de servere încorporat: jucătorii se conectează prin „Multiplayer” și „Join via IP”, deci printr-o adresă pe care cineva trebuie să o fi făcut cunoscută înainte. Cine vrea jucători noi își trece serverul pe pagini de listare precum terraria-servers.com, tserverweb.com sau topg.org, ori distribuie adresa prin Discord. Fiecare dintre aceste căi îi livrează unui atacator exact ce îi livrează jucătorului: adresa IP și portul în clar.

Dacă un server Terraria cade mereu offline, deși la hardware, la lume și la lista de moduri nu s-a schimbat nimic, un atac este de aceea explicația cea mai probabilă. La asta se adaugă constelația tipică a unui proiect: ore de joc fixe, servere concurente, jucători excluși și certuri în comunitate. Un atac nu îl costă pe cel care îl comandă nici pricepere, nici bani de luat în seamă, un booter pentru servere Terraria se vinde ca abonament pentru câțiva euro pe lună. Ce este din punct de vedere tehnic un atac DDoS și cum este construit explică articolul Ce este un atac DDoS?.

Terraria circulă prin TCP, nu prin UDP

Aceasta este cea mai importantă deosebire față de practic orice alt game server. Serverul dedicat de Terraria primește conexiuni cu un ascultător TCP (în motorul jocului clasa Terraria.Net.Sockets.TcpSocket) și nu deschide niciun socket UDP. Asta are patru consecințe care determină întreaga apărare a dumneavoastră:

  • O conexiune TCP complet stabilită nu poate fi falsificată. Atacatorul trebuie să primească SYN-ACK-ul serverului pentru a încheia handshake-ul. Cine este deci într-adevăr conectat vine de la o adresă reală. Interdicțiile de IP și limitele superioare de conexiuni acționează de aceea la Terraria vizibil mai bine decât la un joc UDP.
  • Un flood SYN se poate în schimb foarte bine falsifica, deoarece nu încheie niciodată handshake-ul. Împotriva acestui fel nu ajută nicio interdicție de IP, ci exclusiv SYN cookies și filtrarea din fața serverului.
  • Fiecare conexiune TCP acceptată către portul 7777 ocupă resurse în procesul jocului, nu numai în kernel. Asta face din epuizarea sloturilor atacul cel mai eficient cu cea mai mică lățime de bandă.
  • Un flood UDP vă lovește serverul totuși. Pachetele nu trebuie acceptate pentru a vă umple conexiunea. Faptul că Terraria nu vorbește UDP nu protejează conexiunea, împiedică numai ca procesul jocului însuși să prelucreze pachetele.

Există o excepție: dacă porniți serverul dedicat cu -steam și -lobby friends sau -lobby private, conexiunea circulă prin rețeaua Steam și astfel prin porturi UDP din intervalul 27000 până la 27100. Acesta este un alt mod de operare și nu serverul clasic, accesibil prin adresa IP.

Porturile despre care este vorba în realitate

Un server Terraria are nevoie de exact un port în rețeaua deschisă: 7777 TCP. Tot restul din acest tabel nu are ce căuta fie deloc pe internet, fie numai pe adresa dumneavoastră proprie.

Scop Port Protocol Unde se setează În rețeaua deschisă?
Traficul de joc Terraria 7777 TCP serverconfig.txt: port=7777 da, singurul
Terraria prin UDP niciunul niciunul jocul nu deschide niciun socket UDP nu
Portul de interogare sau de stare niciunul niciunul Terraria vanilla nu are un protocol de interogare propriu nu
RCON niciunul niciunul Terraria nu are RCON, control la distanță numai prin TShock nu
REST API TShock 7878 TCP tshock/config.json: RestApiPort nu
Serverul tModLoader 7777 TCP aceeași serverconfig.txt da, singurul
Modul Steam (-steam -lobby) 27000 până la 27100 UDP numai în modul de operare Steam nu
Pterodactyl Wings 8080 TCP demonul panoului nu, numai adresa proprie
Pterodactyl SFTP 2022 TCP SFTP-ul panoului nu, numai adresa proprie
SSH 22 TCP /etc/ssh/sshd_config numai adresa proprie

Faptul că Terraria nu cunoaște nici un port de interogare, nici RCON este o veste bună pentru securizare: cele două puncte finale care la Counter-Strike, Rust sau ARK sunt folosite abuziv în mod regulat pentru atacuri prin reflexie pur și simplu nu există aici. În schimb, suprafața de atac este cu atât mai puternic concentrată pe portul 7777, iar cine folosește TShock își aduce cu portul 7878 o a doua suprafață.

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 Terraria configurat curat rezistă cu forțe proprii la atacuri mici și medii, independent de locul unde este găzduit.

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 -lntup

Interesantă este coloana cu adresa locală. 0.0.0.0:7777 înseamnă „accesibil din întregul internet”, 127.0.0.1:7878 înseamnă „numai local” și nu are nevoie de nicio regulă de firewall. Dacă în această listă apare o intrare UDP pentru procesul dumneavoastră de Terraria, serverul rulează în modul Steam. Perspectiva atacatorului o oferă o scanare de porturi din exterior:

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

2. Lăsați deschis numai 7777 TCP, închideți tot restul

Pentru Terraria este suficientă o singură permisiune către exterior. O regulă UDP nu vă trebuie, iar o regulă UDP pentru 7777 ar fi pur și simplu greșită: ea lasă să treacă trafic către un port pe care nu ascultă absolut nimic. Cu UFW arată așa, și exact în această ordine, ca să nu vă blocați singur accesul:

ufw allow 22/tcp comment 'SSH'
ufw allow 7777/tcp comment 'Terraria'
ufw allow from 203.0.113.10 to any port 7878 proto tcp comment 'TShock REST'
ufw default deny incoming
ufw default allow outgoing
ufw --force enable
ufw status verbose

Înlocuiți 203.0.113.10 cu adresa dumneavoastră proprie. Instrucțiunile complete, inclusiv calea de întoarcere, se află în Configurarea firewallului UFW fără să vă blocați singur accesul. Cine operează un panou limitează și 8080 și 2022 la adresa proprie.

3. serverconfig.txt: setați corect parola, maxplayers și secure

Fișierul central de configurație al serverului Terraria se numește serverconfig.txt și este predat la pornire cu -config serverconfig.txt. Patru directive sunt decisive pentru securizare:

port=7777
maxplayers=16
password=O-PAROLA-LUNGA-ALEATORIE
secure=1
upnp=0
banlist=banlist.txt

password= este măsura gratuită cea mai eficientă împotriva floodurilor de conectări care iau calea obișnuită. Motivul se află în protocol: un client trimite mai întâi mesajul 1 cu identificatorul lui de versiune (de exemplu Terraria279), serverul răspunde, atunci când parola este setată, cu mesajul 37, clientul trebuie să răspundă corect cu mesajul 38, și abia după aceea serverul trimite cu mesajul 3 aprobarea împreună cu slotul de jucător. Fără parola corectă, un atacator nu ajunge deci niciodată până la transmiterea lumii, care este partea scumpă a unei conectări.

maxplayers primește valori de la 1 la 255, valoarea implicită este 16 (înainte de versiunea 1.4.0.1 erau 8). Limita superioară de 255 nu este o cifră arbitrară: Terraria adresează jucătorii cu un singur octet. Nu setați maxplayers mai sus decât aveți nevoie cu adevărat, deoarece fiecare slot este o resursă pe care un atacator o poate ocupa. secure=1 activează verificarea încorporată împotriva trișării (în linia de comandă -secure), upnp=0 împiedică serverul să deschidă pe cont propriu porturi la un router.

4. Securizați TShock: REST API pe 7878 și floodul de autentificări

TShock este extensia de server cea mai răspândită pentru Terraria și aduce cu REST API o a doua suprafață de atac deplină. Ea se află în mod implicit pe portul 7878 TCP și este configurată în tshock/config.json, deci nu în serverconfig.txt. În starea de livrare este oprită ("RestApiEnabled": false), și exact așa ar trebui să rămână, cât timp nu aveți nevoie de ea.

Dacă aveți nevoie de ea, aceste valori sunt relevante:

"RestApiEnabled": true,
"RestApiPort": 7878,
"EnableTokenEndpointAuthentication": true,
"LogRest": true,
"RESTMaximumRequestsPerInterval": 5,
"RESTRequestBucketDecreaseIntervalMinutes": 1

Două lucruri sunt importante la asta. În primul rând, punctul final /status livrează fără token numele serverului, portul, numărul de jucători și numele jucătorilor, cât timp EnableTokenEndpointAuthentication stă pe false. Asta este comod pentru paginile de stare și pentru boții de Discord și, în același timp, o informare gratuită pentru orice atacator care vrea să știe când merită un atac. În al doilea rând, punctul final /v2/token/create generează din nume de utilizator și parolă un token de acces, și este accesibil din exterior de îndată ce portul 7878 stă deschis: un atac de ghicire a parolei împotriva contului dumneavoastră de administrator, care pe lângă asta costă timp de calcul. Găleata formată din RESTMaximumRequestsPerInterval și RESTRequestBucketDecreaseIntervalMinutes frânează asta, dar nu înlocuiește nicio regulă de firewall.

Pentru accesul în joc în sine acționează alte valori din TShock. MaximumLoginAttempts stă pe 3 și aruncă afară un jucător după trei încercări greșite. RequireLogin (implicit false) cere un cont pentru fiecare jucător. EnableIPBans (implicit true) și KickProxyUsers (implicit true) sunt deosebit de eficiente la un joc TCP, deoarece adresa sursă a unei conexiuni stabilite tocmai că nu poate fi falsificată. Împotriva griefingului, care este adesea raportat ca atac, acționează valorile de prag TileKillThreshold (60), TilePlaceThreshold (20), TileLiquidThreshold (15) și ProjectileThreshold (50), în fiecare caz acțiuni pe secundă.

5. Limitați conexiunile pe adresă sursă și verificați SYN cookies

Deoarece Terraria rulează pe TCP, regula locală cea mai eficientă este o limită superioară de conexiuni simultane pe adresă sursă. Un jucător real are nevoie de exact una:

iptables -I INPUT -p tcp --dport 7777 --syn -m connlimit --connlimit-above 3 --connlimit-mask 32 -j DROP
iptables -I INPUT -p tcp --dport 7777 --syn -m hashlimit --hashlimit-name terraria_syn --hashlimit-mode srcip --hashlimit-above 10/min --hashlimit-burst 20 -j DROP

Prima regulă elimină conexiunile noi de îndată ce o adresă are mai mult de trei dintre ele deschise simultan. A doua limitează rata încercărilor de conexiune ale aceleiași surse la zece pe minut, cu un spațiu de manevră de 20. Ambele cifre sunt valori de pornire, nu adevăruri absolute: un server aflat în spatele unei conexiuni comune (locuință în comun, rețea de școală, furnizor de telefonie mobilă) vede mai mulți jucători legitimi sub aceeași adresă. Măsurați mai întâi o săptămână în regim normal.

Regulile pure de iptables dispar după o repornire, sub Debian și Ubuntu se salvează astfel:

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

Sub UFW, astfel de reguli trebuie trecute în /etc/ufw/before.rules, deoarece altfel dispar la următorul ufw reload. Împotriva pachetelor SYN falsificate, care nu încheie niciodată handshake-ul, nu ajută niciuna dintre aceste reguli, ci kernelul însuși. Verificați cele trei valori:

sysctl net.ipv4.tcp_syncookies net.ipv4.tcp_max_syn_backlog net.core.somaxconn

net.ipv4.tcp_syncookies trebuie să stea pe 1, pe Debian și Ubuntu de regulă asta este deja cazul. SYN cookies renunță la coada de așteptare a conexiunilor pe jumătate deschise și reconstruiesc starea din răspunsul clientului, un flood SYN se duce astfel în gol, cât timp conexiunea nu este plină. net.core.somaxconn stă de la Linux 5.4 pe 4096, iar înainte pe 128: dacă valoarea este mică, kernelul elimină conexiuni complet stabilite înainte ca procesul jocului să le poată accepta.

6. Preveniți epuizarea sloturilor: de ce o scanare de porturi vă umple serverul

Epuizarea sloturilor este cel mai ieftin atac eficient asupra unui server Terraria: atacatorul deschide către portul 7777 atâtea conexiuni TCP câte sloturi de jucător are serverul și le ține deschise. Asta nu îl costă aproape nicio lățime de bandă, dar umple serverul. Jucătorii reali văd „Server is full” și nu mai intră, deși pe conexiunea dumneavoastră nu se întâmplă nimic remarcabil. Exact acesta este motivul pentru care operatorii de Terraria adesea nu observă că sunt atacați.

Cauza stă în modul de numărare: o conexiune este acceptată înainte ca clientul să își fi trimis măcar identificatorul de versiune. Istoric, astfel de conexiuni fantomă rămâneau ocupate până când sesiunea TCP expira. Seria 1.4.5 a atenuat asta, acolo nu se mai rezervă sloturi pentru clienții care se deconectează imediat. În primele versiuni de 1.4.5.7 și 1.4.5.8, serverul dedicat se prăbușea însă cu o ObjectDisposedException netratată de îndată ce o conexiune TCP era deschisă și handshake-ul nu era încheiat. Un nc -z sau o verificare de disponibilitate a unui sistem de monitorizare era suficientă. Eroarea a fost remediată în mod discret în câteva săptămâni, în imaginile de containere mai vechi ea stă parțial încă acolo. Țineți de aceea versiunea serverului dumneavoastră la zi, asta nu este aici un loc comun, ci o chestiune concretă de disponibilitate.

Două setări ajută suplimentar. Cine folosește TShock setează MaxSlots la numărul de jucători dorit și maxplayers din serverconfig.txt cu două locuri mai sus: atunci TShock elimină conexiunile în surplus cu un mesaj curat, în loc ca procesul jocului să le lase în ultima breșă. Iar limita superioară de conexiuni din secțiunea anterioară este exact regula care împiedică o singură adresă să ocupe toate sloturile deodată.

7. Opriți UPnP și nu publicați singur adresa

Serverul Terraria încearcă în mod implicit să își deschidă portul prin UPnP la un router. Pe un server închiriat asta este lipsit de efect, într-o rețea de casă deschide porturi despre care mai târziu nu mai știți nimic. Opriți-o cu upnp=0 în serverconfig.txt sau cu -noupnp în linia de comandă.

Aici merită pe lângă asta sinceritatea în locul gândirii dorite: adresa dumneavoastră IP nu poate fi ținută secretă. Fiecare jucător care a fost conectat o singură dată o cunoaște, iar o intrare pe o pagină de listare o publică oricum. Eficiente sunt două obiceiuri. Nu publicați nicăieri singur adresa IP brută, ci conectați-vă jucătorii printr-un nume de gazdă: clientul Terraria rezolvă un nume de gazdă, puteți deci schimba adresa în caz serios fără ca toate referințele să se rupă. Și curățați înregistrările DNS vechi, deoarece o înregistrare A uitată către adresa anterioară face orice schimbare lipsită de efect.

8. Stocați intermediar interogările de stare, în loc să le transmiteți direct

Deoarece Terraria nu are un protocol de interogare, paginile de stare, boții de Discord și paginile de listare determină starea serverului dumneavoastră pe una din două căi: fie stabilesc o conexiune TCP reală către 7777 și se dau drept client, fie interoghează REST API-ul TShock. Amândouă costă serverul dumneavoastră muncă, și amândouă cresc cu numărul celor care interoghează.

Contramăsura nu costă nimic: nu interogați niciodată din partea vizitatorului. Lăsați un singur serviciu să ia starea la intervale fixe (30 sau 60 de secunde sunt suficiente), stocați rezultatul intermediar și livrați tuturor vizitatorilor starea stocată. Astfel, o pagină de stare mult vizitată generează o interogare pe interval, în loc de una pe vizitator. Cine folosește REST API pentru asta limitează portul 7878 la adresa acelui singur serviciu.

9. Înregistrați în jurnal, ca să aveți date în caz serios

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 sâmbătă seara. Cu apt-get install -y vnstat sysstat măsurarea rulează permanent. În timpul unui incident sunt suficiente cinci comenzi:

sar -n DEV 1 10
ss -s
ss -tn state syn-recv | wc -l
ip -s link show eth0
tcpdump -ni eth0 tcp port 7777 -c 200 -q

A treia comandă este cea specifică pentru Terraria: ea numără conexiunile pe jumătate deschise. O valoare de două cifre este normală, una de patru sau cinci cifre este un flood SYN. ss -s arată pe lângă asta numărul total de conexiuni TCP, iar dacă această cifră corespunde aproximativ cu maxplayers al dumneavoastră în timp ce în joc nu este nimeni, vedeți o epuizare a sloturilor. 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 se află în Recunoașterea unui atac DDoS.

Unde se termină aceste măsuri

Acum partea pe care niciun fișier de configurație nu o poate rezolva. 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. Atacurile împotriva proiectelor de game server de această dimensiune se situează de obicei între 5 și 50 Gbit/s, adică la de cinci până la cincizeci de ori conexiunea dumneavoastră. Dacă regula dumneavoastră connlimit din spate este bună nu mai joacă atunci niciun rol, deoarece pachetele jucătorilor dumneavoastră nu mai trec nici înainte de ea. Exact așa apar vârfurile de lag pe serverele Terraria, la care încărcarea procesorului arată normal.

A doua mărime este rata de pachete, iar ea lovește adesea 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. La un flood SYN limita se află încă mai jos, deoarece fiecare pachet SYN declanșează o decizie de stare: deja câteva zeci de mii de pachete SYN pe secundă sunt suficiente pentru a scoate din funcțiune acceptarea conexiunilor a unui Linux standard, cu mult înainte ca conexiunea să fie plină. Operatorii trăiesc asta ca „încărcarea nici nu era mare, și totuși totul era pierdut”.

Iar al treilea punct este cel care la Terraria este trecut cu vederea cel mai des: un atacator nu se orientează după protocolul dumneavoastră. El trimite flooduri UDP și trafic de reflexie către adresa dumneavoastră, deși pe niciun port UDP nu ascultă nimic. Serverul dumneavoastră elimină corect aceste pachete, dar ele v-au ocupat deja conexiunea, iar serverul dumneavoastră Terraria cade offline fără ca un singur pachet să fi ajuns la procesul jocului. Pentru încadrare, ce ordine de mărime apar în realitate: pe serverele KernelHost au fost filtrate, printre altele, un atac de peste 473,4 Gbit/s cu peste 41,5 milioane de pachete pe secundă și un flood UDP de 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. Pentru Terraria asta înseamnă concret: floodurile SYN și floodurile de conexiuni împotriva portului 7777 TCP se termină aici, nu pe placa dumneavoastră de rețea.

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. Locul 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 ce este permis pe 7777 TCP și puteți închide tot restul, 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 rata de conexiuni permisă pe adresă sursă.
  • Profil de protecție potrivit aplicației. Pentru jocurile TCP precum Terraria și pentru aplicațiile proprii sau modificate pe orice porturi TCP sau UDP există profiluri potrivite.

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 pentru Terraria profil automat pentru game servere TCP set de reguli propriu pentru 7777 TCP, și pentru tModLoader și TShock
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 Terraria, 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. Cine își operează serverul în prezent în altă parte nu primește protecția montată ulterior, ci prin mutarea la KernelHost: filtrarea este parte din rețea, nu un adaos pe server.

Greșeli frecvente și soluții

„Serverul este plin, dar nu este nimeni înăuntru”: Aceasta este o epuizare a sloturilor. Verificați cu ss -tn dst :7777 | wc -l câte conexiuni sunt efectiv deschise și comparați asta cu lista de jucători (consola serverului: playing). Dacă cifrele nu se potrivesc, sloturile sunt ocupate de conexiuni străine. Remediile sunt limita superioară de conexiuni pe adresă sursă, o parolă de server și o versiune de server actuală.

„Am deschis 7777 UDP și nu se schimbă nimic”: Corect, deoarece pe 7777 UDP nu ascultă nimic. Terraria folosește exclusiv TCP. Permisiunea UDP nu dăunează direct, dar este o deschidere inutilă și un semn sigur că a fost copiat un ghid pentru un alt joc.

„Regulile mele de iptables nu acționează”: Trei cauze sunt frecvente. Regulile stau în spatele lanțurilor UFW și nu sunt atinse niciodată, ele au dispărut după ultima repornire (atunci ajută netfilter-persistent save sau o intrare în /etc/ufw/before.rules), sau atacul este volumetric și regula lucrează corect pe o conexiune care este deja plină. Verificați cu iptables -L INPUT -n -v dacă contoarele de potriviri cresc. Dacă rămân la zero, regula nu este atinsă.

„Jucătorii zboară afară, deși nu rulează niciun atac”: Dacă strângeți prea mult limita dumneavoastră connlimit, asta lovește jucătorii aflați în spatele unor conexiuni comune. La TCP se întâmplă mai repede decât la jocurile UDP, deoarece o reconectare după o întrerupere generează imediat o conexiune nouă, în timp ce cea veche atârnă încă în TIME_WAIT. Măriți valoarea pas cu pas și urmăriți contoarele de potriviri.

„Serverul se blochează scurt, conexiunea este liniștită”: Asta este mai des un mod sau un plugin decât un atac. Sub tModLoader, fiecare mod suplimentar costă timp de calcul în același proces, iar o lume cu multe entități încarcă complet un nucleu, fără să sosească un pachet în plus. Dacă sar -n DEV 1 10 rămâne neremarcabil, nu a fost un atac DDoS.

„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 Terraria are nevoie de exact un port deschis: 7777 TCP. Jocul nu deschide niciun socket UDP, nu are protocol de interogare și nu are RCON.
  • REST API-ul TShock pe portul 7878 TCP este a doua suprafață de atac. Lăsați RestApiEnabled pe false sau limitați portul la adresa dumneavoastră proprie.
  • O parolă de server în serverconfig.txt este măsura gratuită cea mai eficientă, deoarece un atacator fără un răspuns corect la mesajul 37 nu ajunge niciodată până la transmiterea lumii.
  • Epuizarea sloturilor este la Terraria cel mai ieftin atac: fiecare conexiune TCP acceptată către 7777 ocupă un loc, complet fără lățime de bandă de luat în seamă. Împotriva ei acționează o limită superioară pe adresă sursă, o parolă și o versiune de server actuală.
  • Deoarece Terraria folosește TCP, adresa sursă a unei conexiuni stabilite nu poate fi falsificată: interdicțiile de IP acționează aici mai bine decât la jocurile UDP. Împotriva floodurilor SYN falsificate ajută numai SYN cookies și filtrarea din fața serverului.
  • Un flood UDP vă scoate serverul Terraria din funcțiune, deși el nu vorbește UDP, deoarece umple conexiunea înainte ca procesul jocului să vadă ceva.
  • De la aproximativ dimensiunea lățimii de bandă a conexiunii dumneavoastră de ieșire decide exclusiv rețeaua din fața serverului. La KernelHost această filtrare este pe două niveluri, activă permanent și cuprinsă fără cost suplimentar în fiecare pachet de server.

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

De ce port și de ce protocol are nevoie un server Terraria?
Un server Terraria are nevoie de exact un port: 7777 TCP. Aceasta este valoarea implicită și stă în serverconfig.txt sub port=7777. Un port UDP jocul nu îl deschide, nu există nici un port de interogare propriu și nici RCON. Cine folosește TShock are suplimentar REST API pe portul 7878 TCP, care în starea de livrare este oprit. O permisiune UDP pentru 7777 este de prisos și un semn sigur că a fost copiat un ghid pentru un alt joc. tModLoader folosește aceleași porturi ca serverul vanilla.
De ce este important că Terraria folosește TCP în loc de UDP?
Deoarece inversează contramăsurile eficiente. O conexiune TCP complet stabilită nu poate fi falsificată, pentru că atacatorul trebuie să primească SYN-ACK-ul serverului. Interdicțiile de IP și limitele superioare de conexiuni pe adresă sursă acționează de aceea la Terraria vizibil mai bine decât la un joc UDP. Un flood SYN se poate în schimb foarte bine falsifica, deoarece nu încheie niciodată handshake-ul: împotriva lui ajută numai SYN cookies în kernel și filtrarea în rețeaua din fața serverului.
Serverul meu Terraria raportează Server is full, deși nu joacă nimeni. Ce este asta?
Aceasta este o epuizare a sloturilor, cel mai ieftin atac eficient asupra unui server Terraria. Atacatorul deschide către portul 7777 atâtea conexiuni TCP câte sloturi de jucător are serverul și le ține deschise. Asta nu costă aproape nicio lățime de bandă, dar umple toate locurile. Verificați cu ss -tn dst :7777 | wc -l numărul conexiunilor deschise și comparați-l cu consola serverului și cu comanda playing. Remediile sunt o limită superioară de conexiuni pe adresă sursă, o parolă de server și o versiune de server actuală.
Ajută o parolă de server împotriva atacurilor?
Împotriva floodurilor de conectări da, împotriva atacurilor volumetrice nu. Motivul se află în protocol: un client trimite mai întâi mesajul 1 cu identificatorul lui de versiune, serverul răspunde, atunci când parola este setată, cu mesajul 37, clientul trebuie să răspundă corect cu mesajul 38, și abia după aceea urmează cu mesajul 3 aprobarea împreună cu slotul de jucător. Fără parola corectă, un atacator nu ajunge niciodată până la transmiterea lumii, care este partea scumpă a unei conectări. Ea se setează în serverconfig.txt cu password= sau în linia de comandă cu -password.
Cum securizez REST API-ul TShock pe portul 7878?
Cel mai sigur, nepornindu-l deloc: în tshock/config.json, RestApiEnabled stă în starea de livrare pe false. Dacă aveți nevoie de el, setați EnableTokenEndpointAuthentication pe true, deoarece altfel punctul final /status livrează fără token numele serverului, portul, numărul de jucători și numele jucătorilor. Activați LogRest, lăsați RESTMaximumRequestsPerInterval pe 5 la un interval de un minut, și limitați portul 7878 în firewall la adresa dumneavoastră proprie.
Câți jucători să trec la maxplayers?
Atâția câți aveți nevoie cu adevărat, deoarece fiecare slot este o resursă pe care un atacator o poate ocupa. maxplayers primește valori de la 1 la 255, valoarea implicită este 16, înainte de versiunea 1.4.0.1 erau 8. Limita superioară de 255 vine de la faptul că Terraria adresează jucătorii cu un singur octet. Cine folosește TShock setează MaxSlots la numărul de jucători dorit și maxplayers din serverconfig.txt cu două locuri mai sus, pentru ca TShock să respingă conexiunile în surplus cu un mesaj curat.
Mă pot apăra cu iptables sau UFW împotriva unui atac DDoS?
Împotriva atacurilor mici și a floodurilor de conexiuni 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. La Terraria o regulă connlimit pe 7777 TCP merită totuși, deoarece previne eficient epuizarea sloturilor. 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 Terraria?
Un game server tipic atârnă de o conexiune de 1 Gbit/s, ceea ce corespunde cu 125 de megaocteți pe secundă. Atacurile împotriva proiectelor de această dimensiune se situează de obicei între 5 și 50 Gbit/s. La fel de importantă este rata de pachete: în 1 Gbit/s încap, la pachete de 64 de octeți, circa 1,49 milioane de pachete pe secundă, iar un kernel obișnuit de server prelucrează doar câteva sute de mii dintre ele. La un flood SYN limita se află încă mai jos, deoarece fiecare pachet SYN declanșează o decizie de stare. Un atac vă poate deci scoate din funcțiune, deși lățimea de bandă nu este epuizată.
De ce mă lovește un atac UDP, deși Terraria nu folosește deloc UDP?
Deoarece un atacator nu se orientează după protocolul dumneavoastră. El trimite flooduri UDP și trafic de reflexie către adresa dumneavoastră IP, deși acolo nu ascultă niciun serviciu UDP. Serverul dumneavoastră elimină corect aceste pachete, dar ele v-au ocupat deja conexiunea, iar serverul dumneavoastră Terraria cade offline fără ca un singur pachet să fi ajuns la procesul jocului. Faptul că Terraria nu vorbește UDP protejează deci numai aplicația, nu conexiunea. Împotriva acestui lucru ajută exclusiv filtrarea în rețeaua din fața serverului.
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 construită 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. Pentru Terraria asta înseamnă concret: floodurile SYN și floodurile de conexiuni împotriva portului 7777 TCP se termină acolo, și nu pe placa dumneavoastră de rețea.
Costă extra protecția DDoS la KernelHost?
Nu. Protecția permanentă pe două niveluri este cuprinsă fără cost suplimentar în fiecare pachet de server și este activă din momentul livrării. Nu trebuie nici să o comandați, nici să o activați sau să o configurați. Cine își operează serverul Terraria în prezent în altă parte nu poate monta ulterior protecția, deoarece filtrarea este parte din rețea și nu un adaos pe server. Recomandarea în acest caz este mutarea la KernelHost.
Când am nevoie 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: stabiliți ce este permis pe 7777 TCP și puteți închide tot restul. 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.

Terraria Protecție DDoS Terraria TShock tModLoader Protecție game server Port 7777 Port 7878 Advanced DDoS Protection