Protejarea serverului Left 4 Dead 2 împotriva atacurilor DDoS

Publicat pe 24 min de citit

De ce porturi are într-adevăr nevoie un server Left 4 Dead 2, cum frânați interogarea A2S pe 27015/UDP fără să vă blocați proprii jucători afară, ce realizează sistemul de lobby ca filtru de acces și de la ce dimensiune a atacului ajută doar filtrarea în rețeaua din față.

Un server Left 4 Dead 2 cade rar la un moment convenabil. Cade în ultima secțiune a unei campanii, în a doua rundă a unui meci Versus sau exact atunci când un jucător banat a fost respins pentru a treia oară. Cine este atacat chiar acum nu are nevoie de o discuție de principiu despre tehnica rețelelor, ci de o ordine a pașilor. Acest articol arată mai întâi cum protejați un server Left 4 Dead 2 împotriva atacurilor DDoS cât timp asta se mai poate cu mijloacele de la bord, apoi unde se termină fizic aceste posibilități, și la final ce trebuie să se întâmple înaintea lor în rețea.

Toate informațiile se referă la un server dedicat (srcds), instalat prin SteamCMD cu App-ID 222860, pe 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ța lor. Un punct de la început, pentru că stabilește ordinea: nu modificați nimic orbește în timpul unui atac în curs și nu reporniți serverul înainte să fi salvat valorile măsurate. După atac ele nu mai există.

De ce serverele Left 4 Dead 2 sunt o țintă DDoS care merită

Diferența față de un shooter cu 64 de locuri stă în dimensiunea rundei. O campanie cooperativă are patru locuri pentru supraviețuitori, un meci Versus opt locuri pentru ambele părți împreună. O cădere nu lovește de aceea niciodată jucători individuali, ci întotdeauna întreaga partidă: cine întrerupe o campanie în a treia din cinci secțiuni a încheiat seara pentru toți participanții. Exact asta face un atac atractiv pentru cel care îl declanșează, deoarece nu îl costă nici pricepere, nici bani demni de menționat, în timp ce de partea cealaltă distruge o oră de joc.

La asta se adaugă construcția. Left 4 Dead 2 rulează pe motorul Source, iar un server Source este public găsibil cu adresă IP și port. Aceasta este o condiție, nu o neglijență: un server care nu răspunde la nicio interogare nu apare în nicio listă și nu este găsit de nicio lobby. Întrebarea nu este deci niciodată dacă un atacator cunoaște adresa dumneavoastră, ci doar ce se întâmplă atunci când trage în ea. Traficul de joc merge prin UDP, iar UDP nu cunoaște o stabilire a conexiunii care s-ar putea pretinde, în plus adresele expeditorului se pot falsifica. Ce se petrece tehnic în acest timp explică articolul Ce este un atac DDoS?.

Un al treilea punct este specific Left 4 Dead 2 și nu are echivalent la Counter-Strike, Garry's Mod sau Team Fortress 2: majoritatea jucătorilor nu vin prin browserul de servere, ci prin sistemul de lobby. O lobby de până la patru jucători este trimisă prin matchmakingul Steam către un server dedicat, care primește pentru asta o rezervare. Această procedură este în același timp filtrul dumneavoastră de acces cel mai eficient și o suprafață de atac suplimentară. Amândouă apar mai jos în detaliu.

Porturile despre care este vorba de fapt

Un server Left 4 Dead 2 ocupă exact un port UDP pentru tot ce ține de joc. Standard este 27015, stabilit prin -port respectiv +hostport în linia de pornire:

./srcds_run -game left4dead2 -console -nohltv \
  -port 27015 \
  +ip 203.0.113.10 \
  +maxplayers 4 \
  +exec server.cfg \
  +map c1m1_hotel
Port și protocol Pentru ce Trebuie să fie deschis spre exterior
27015/UDP Trafic de joc și interogare A2S de server pe același port Da, fără acest port nu există joc
27015/TCP RCON, în măsura în care rcon_password este setat Nu, deschideți doar pentru adresa proprie
27005/UDP Portul clientului, pornește de la jucător Nu, nu are nevoie de nicio deschidere pe server
27020/UDP SourceTV, doar cu -hltv sau +tv_enable 1 Doar dacă transmiteți efectiv
27016, 27017 și următoarele Alte instanțe pe aceeași gazdă Fiecare instanță separat, nu ca interval
80/TCP și 443/TCP Descărcare rapidă (sv_downloadurl), dacă se află pe aceeași gazdă Doar dacă serverul web rulează acolo
22/TCP Acces SSH Nu, limitați la adresa proprie

Primul rând al acestui tabel este miezul problemei. Traficul de joc și interogarea serverului împart 27015/UDP, la Left 4 Dead 2 nu există un port de interogare separat. Cine blochează acest port în bloc sau îl limitează grosier își aruncă în același timp proprii jucători afară și încheie atacul în sensul atacatorului.

O cerere A2S este un pachet de câteva zeci de octeți, răspunsul un multiplu al acestuia. La UDP se poate falsifica adresa expeditorului, și astfel serverul dumneavoastră devine nu doar victimă, ci amplificator: un atacator interoghează servere de joc străine cu adresa țintei sale și dirijează răspunsurile lor acolo. Valve a completat A2S_INFO în decembrie 2020 cu o solicitare prealabilă (S2C_CHALLENGE), pe care cel care interoghează trebuie să o trimită înapoi înainte să primească răspunsul. Asta atenuează reflexia, dar nu o încheie, deoarece programele de interogare mai vechi sunt în continuare deservite.

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

Partea următoare nu costă nimic și merită indiferent unde se află serverul dumneavoastră. Nu vă scutește de un atac volumetric, dar face ca atacurile mici și medii să se risipească, și înlătură căderile care sunt raportate greșit ca atac DDoS.

1. Inventar: ce ascultă cu adevărat

Înainte să scrieți o regulă, clarificați ce servicii sunt accesibile. Pe un server Left 4 Dead 2 crescut în timp, acestea sunt aproape întotdeauna mai multe decât se aștepta, deoarece pe lângă srcds mai rulează un server web pentru campanii, o bază de date de statistici și uneori un al doilea server pentru Versus:

ss -lntup

Tot ce este legat la 127.0.0.1 sau ::1 nu are nevoie de nicio deschidere. Tot ce ascultă pe 0.0.0.0 sau [::] este accesibil din internet. Perspectiva atacatorului o oferă o scanare de porturi din exterior, iar aceasta se abate, din experiență, de la așteptările proprii:

nmap -Pn -sU -sT -p 27000-27050,80,443,3306 ADRESA.IP.A.SERVERULUI

Dacă infrastructura de bază este proaspăt configurată sau vreți să o urmăriți pas cu pas, articolul Instalarea unui server de joc cu SteamCMD descrie drumul de la SteamCMD până la un srcds care rulează.

2. Lăsați deschise doar porturile de care srcds are într-adevăr nevoie

Un port UDP spre exterior, un port TCP pentru adresa proprie, nimic mai mult. RCON nu are ce căuta în internetul deschis, deoarece cine are RCON schimbă harta, blochează toți jucătorii și oprește serverul:

ufw allow 27015/udp comment "Portul de joc L4D2 și A2S"
ufw allow from 203.0.113.10 to any port 27015 proto tcp comment "RCON"
ufw allow from 203.0.113.10 to any port 22 proto tcp comment "SSH"
ufw default deny incoming
ufw default allow outgoing
ufw --force enable

Înlocuiți 203.0.113.10 cu adresa dumneavoastră. Dacă aceasta se schimbă regulat, drumul trece printr-o redirecționare de port SSH în loc de o deschidere permanentă. Ordinea la activare decide dacă vă blocați singur afară; ea se află împreună cu calea de întoarcere în articolul Configurarea firewall-ului UFW fără să vă blocați singur afară. Dacă totuși se întâmplă: serverele root KVM și serverele dedicate de la KernelHost nu au IPMI și nici iDRAC, ajungeți la server prin consola VNC din panoul clientului, iar aceasta nu depinde de stiva de rețea a sistemului oaspete.

3. Frânați interogarea A2S fără să ieșiți din căutarea prin lobby

Aici se află cea mai costisitoare greșeală din acest domeniu. Deoarece traficul de joc și interogarea serverului ocupă același port, frâna trebuie să distingă între cele două clase de pachete, nu între porturi.

Infrastructura Steam pentru servere de joc aduce pentru asta, de la modificările din decembrie 2020, o limitare proprie, care se setează înainte de pornire ca variabilă de mediu. STEAM_GAMESERVER_RATE_LIMIT_200MS=N elimină pachetele fără conexiune (A2S_INFO, A2S_RULES, A2S_PLAYERS) ale unei adrese a expeditorului imediat ce într-o fereastră de 200 de milisecunde sosesc mai mult de N dintre ele. Valve indică 25 până la 75 ca interval utilizabil, implicit limitarea este oprită:

export STEAM_GAMESERVER_RATE_LIMIT_200MS=50
./srcds_run -game left4dead2 -console -port 27015 +exec server.cfg +map c1m1_hotel

Într-o unitate systemd, aceeași valoare are ce căuta ca Environment=STEAM_GAMESERVER_RATE_LIMIT_200MS=50 în secțiunea [Service], altfel dispare după următoarea repornire. Această frână se aplică doar dacă buildul dumneavoastră de server aduce infrastructura Steamworks actuală, și protejează timpul de calcul al serverului dumneavoastră, nu conexiunea dumneavoastră: pachetele au ajuns deja.

Cu un nivel mai jos, același trafic se poate separa în kernel. Toate pachetele fără conexiune ale motorului Source, deci interogările de server și stabilirea conexiunii, încep cu patru octeți setați (0xffffffff), traficul jucătorilor deja conectați nu are acest antet. Pe asta se poate pune cu nftables o limitare de rată pentru fiecare adresă a expeditorului:

table inet l4d2 {
    chain input {
        type filter hook input priority -10; policy accept;
        udp dport 27015 @th,64,32 0xffffffff \
            meter a2sflood { ip saddr limit rate over 10/second burst 20 packets } drop
    }
}

Fișierul îl încărcați cu nft -f. Prioritatea -10 face ca regula să se aplice înaintea lanțului de filtrare al UFW, iar @th,64,32 citește primii patru octeți de după antetul UDP. Începeți generos și strângeți limita abia atunci când interogările legitime trec dovedit: propria dumneavoastră intrare în lista de servere depinde de asta.

4. Folosiți sistemul de lobby ca filtru de acces

Aceasta este pârghia pe care o au doar Left 4 Dead 2 și predecesorul său. Serverul decide singur dacă acceptă în general conexiuni din afara matchmakingului. Patru directive din server.cfg stabilesc asta:

sv_allow_lobby_connect_only 1
sv_search_key "cheia-dumneavoastra"
sv_steamgroup "103582791400000000"
sv_steamgroup_exclusive 2
  • sv_allow_lobby_connect_only 1 permite exclusiv conectările dintr-o lobby de matchmaking. Un connect 203.0.113.10:27015 în consola de dezvoltator și o invitație Steam sunt respinse. Valoarea 0 permite amândouă.
  • sv_search_key este o cheie de căutare aleasă liber. Doar o lobby în care este setată aceeași cheie găsește serverul prin matchmaking. Fără această cheie, el nu apare în căutarea publică.
  • sv_steamgroup leagă serverul la un grup Steam și îl face să apară între serverele grupului respectiv.
  • sv_steamgroup_exclusive cunoaște trei niveluri: 0 permite oricui, 1 se comportă ca 0, dar cere conectarea prin lobby, iar 2 mai permite doar membrii grupului și accesul direct prin adresa IP.

Pentru o comunitate stabilă, combinația dintre cheia de căutare și sv_steamgroup_exclusive 2 este cel mai eficient filtru de acces gratuit pe care îl cunoaște jocul. Un server public nu o poate folosi, deoarece un server pe care nu îl găsește nimeni este la fel de gol ca unul care este offline.

Și acum partea pe care textele publicitare o lasă bucuros deoparte: aceste directive protejează logica jocului dumneavoastră, nu conexiunea dumneavoastră. Un atacator care inundă 27015/UDP nici nu vrea să se alăture. Pachetele lui sunt respinse, dar au ajuns totuși, au consumat lățime de bandă și au costat o trecere prin stiva de rețea. Împotriva unui flood de conectări din conturi de unică folosință, sv_allow_lobby_connect_only 1 acționează excelent, împotriva unui booter nu acționează deloc.

5. Rezervarea prin lobby și când sv_force_unreserved este alegerea mai bună

O rezervare prin lobby este o ocupare limitată în timp a serverului dumneavoastră de către o lobby de matchmaking. Cât timp există, serverul este considerat ocupat pentru alte lobby-uri, iar ea expiră de la sine abia după o vreme. Pentru un server cu patru locuri, asta este o resursă rară: altfel decât la un shooter cu 32 sau 64 de locuri, este nevoie de foarte puțin ca să blocați o partidă.

Cine nu își operează serverul prin matchmaking scoate complet această suprafață:

sv_force_unreserved 1
sv_allow_lobby_connect_only 0

sv_force_unreserved 1 face ca serverul să nu mai răspundă la cererile de rezervare din sistemul de lobby și să respingă conectările cu o marcă de rezervare. De aceeași setare aveți nevoie oricum dacă operați cu L4DToolZ mai mult de patru locuri cooperative, deoarece altfel lobbyul primește o rezervare imediat ce primele patru locuri sunt ocupate, iar locurile rămase rămân inaccesibile. Reversul este clar: jucătorii dumneavoastră intră atunci doar prin browserul de servere sau prin connect.

Decideți-vă conștient pentru unul dintre cele două moduri de operare. Amestecul dintre matchmaking pe jumătate deschis și conectare directă pe jumătate deschisă este varianta care reunește ambele dezavantaje.

6. Securizați RCON

Un port RCON deschis cu o parolă slabă nu este o problemă de DDoS, ci o preluare. Nu lăsați niciodată rcon_password gol și nu îl alegeți niciodată ghicibil, o valoare din openssl rand -base64 32 este suficientă. Titlurile Source aduc în plus o frână împotriva încercărilor de autentificare:

rcon_password "O_VALOARE_ALEATORIE"
sv_rcon_minfailures 3
sv_rcon_maxfailures 5
sv_rcon_minfailuretime 30
sv_rcon_banpenalty 1440

Astfel, o adresă este blocată pentru o zi după trei încercări eșuate în 30 de secunde; find sv_rcon în consola serverului arată care dintre aceste variabile le cunoaște buildul dumneavoastră. Restricția de firewall din pasul 2 rămâne totuși mai eficientă, deoarece nici nu lasă încercarea să ajungă până la aplicație. Dacă nu aveți nevoie de RCON, lăsați parola goală: atunci partea TCP a portului 27015 nu ascultă.

7. Externalizați campaniile custom în loc să le livrați prin portul de joc

Campaniile custom sunt motivul pentru care Left 4 Dead 2 se mai joacă și după cincisprezece ani, și în același timp o sursă de sarcină care la Counter-Strike nu există în această formă. O campanie este un pachet VPK cu hărți, modele, texturi și sunete, deci un multiplu din ce cântărește o singură hartă de competiție.

Calea comodă pentru jucători este Steam Workshop: pachetul vine atunci de la Steam, nu de la serverul dumneavoastră, și nu vă costă lățime de bandă. Dacă livrați singur fișiere separate, livrarea are ce căuta pe un server web și nu pe portul de joc:

sv_allowdownload 1
sv_allowupload 0
sv_downloadurl "https://cdn.example.org/l4d2/"
sv_consistency 1

Fișierele pentru sv_downloadurl au ce căuta pe serverul web ca arhivă bzip2, din hartamea.bsp devine deci hartamea.bsp.bz2. Fără sv_downloadurl, srcds trimite fișierele singur prin conexiunea de joc, și atunci se aplică: fiecare încercare de conectare a unui jucător nou vă costă descărcarea completă, fiecare întrerupere în mijlocul descărcării la fel. Aceasta este o metodă deosebit de ieftină de a umple o conexiune, și nu arată în nicio statistică precum un atac.

Trei puncte în legătură cu asta, care în practică dor. sv_allowupload 0 are ce căuta setat, deoarece nu aveți nevoie de încărcări de la client către server. Dacă serverul web pentru sv_downloadurl se află pe aceeași gazdă ca jocul, descărcarea și traficul de joc împart aceeași conexiune și aceeași adresă IP, iar un atac pe 443/TCP lovește atunci și partida dumneavoastră în curs. Iar sv_consistency 1 nu este o protecție împotriva atacurilor, ci împotriva fișierelor de client diferite; ar trebui să îl opriți doar dacă o campanie dovedit nu pornește altfel.

8. SourceMod, Metamod și extensiile

O parte considerabilă a căderilor raportate ca DDoS nu sunt căderi de acest fel. Sunt blocări și vârfuri de sarcină pe care le declanșează un singur client, pentru că în binarul serverului sau într-o extensie stă deschisă o breșă. Împotriva acestui lucru nu ajută lățimea de bandă, ci întreținerea:

  • Țineți Metamod:Source și SourceMod potrivite cu versiunea motorului. Left 4 Dead 2 primește în continuare actualizări, iar o extensie nepotrivită este cel mai frecvent motiv pentru blocări imediat după o actualizare.
  • Left4DHooks în loc de intervenții proprii. Evenimentele tipice pentru L4D2 se află grupate în această extensie. Intervențiile proprii în aceleași funcții sunt calea cea mai rapidă către un binar de server care cedează la anumite secvențe de pachete.
  • Folosiți L4DToolZ doar în mod conștient. Extensia ridică limitele de locuri fixate în cod. Fiecare loc suplimentar este un jucător suplimentar care generează timp de calcul, iar în legătură cu sistemul de lobby ea are nevoie de sv_force_unreserved 1.
  • Mai puține extensii. Fiecare plugin este cod în același proces. Extensiile cu servicii web proprii deschid porturi suplimentare și publică adesea exact adresa pe care vreți să o protejați.

Blocările au ce căuta salvate permanent, altfel dispar după repornire. Titlurile Source cunosc pentru asta banid cu writeid, precum și addip cu writeip, iar fișierele generate sunt citite din nou prin exec banned_user.cfg și exec banned_ip.cfg.

9. Descărcați urmărirea conexiunilor și bufferul de recepție

Acest punct este adesea trecut cu vederea și explică defecțiuni care arată ca un atac volumetric, dar nu sunt. Kernelul creează pentru traficul UDP intrări în urmărirea conexiunilor (conntrack), iar la adrese falsificate ale expeditorului fiecare adresă înseamnă o intrare nouă. Dacă tabelul este plin, kernelul elimină pachetele fără deosebire: atacul și jucătorii dumneavoastră zboară afară împreună. Starea și limita superioară le arată o privire:

sysctl net.netfilter.nf_conntrack_count net.netfilter.nf_conntrack_max

Pasul cel mai eficient este să nu lăsați traficul de joc să fie urmărit deloc, deoarece motorul își administrează singur sesiunile:

table inet raw {
    chain prerouting {
        type filter hook prerouting priority raw; policy accept;
        udp dport 27015 notrack
    }
    chain output {
        type filter hook output priority raw; policy accept;
        udp sport 27015 notrack
    }
}

Cu iptables, echivalentul este iptables -t raw -A PREROUTING -p udp --dport 27015 -j NOTRACK și aceeași linie pentru OUTPUT cu --sport. Portul are nevoie după aceea de o deschidere explicită, deoarece fără urmărire nu se mai aplică nicio regulă care verifică o stare existentă. Dacă pachetele ajung mai repede decât srcds le preia, se revarsă suplimentar bufferul de recepție, iar asta arată pentru jucători precum pierdere de pachete pe o conexiune liberă:

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

Fișierul îl puneți în /etc/sysctl.d/ și îl activați cu sysctl -p. Dacă valorile sunt în general necesare, o spune kernelul însuși: dacă UdpRcvbufErrors crește în nstat -az, atunci ele își fac treaba. Dacă contorul rămâne la zero, ajustarea nu schimbă nimic. Asta este rezervă, nu protecție.

10. Măsurați, ca să nu trebuiască să ghiciți în timpul atacului

În timpul atacului, cea mai importantă întrebare este: cât ajunge, pe ce port, și este trafic de interogare sau de joc. Patru comenzi sunt suficiente:

ip -s link show eth0
nstat -az | grep -i udp
sar -n DEV 1 10
tcpdump -ni eth0 -c 200 "udp port 27015 and udp[8:4] = 0xffffffff"

Prima comandă o executați de două ori, la distanță de zece secunde, atunci aveți o rată în loc de o valoare absolută. Ultima linie arată exclusiv pachetele fără conexiune, deci exact clasa de care abuzează un val de interogări; dacă contorul se umple în câteva secunde în timp ce aproape nimeni nu este conectat, aveți răspunsul. Țineți captura scurtă, deoarece sub sarcină costă ea însăși timp de calcul. Cum încadrați valorile scrie în articolul Recunoașterea unui atac DDoS pe server.

Pasul cel mai important este însă cel pe care aproape nimeni nu îl face în avans: crearea unei baze de comparație cât timp totul este 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 serverul Versus plin.

Unde se opresc aceste măsuri

Acum partea onestă. Tot ce a fost descris până aici are efect abia atunci când pachetele au ajuns pe placa dumneavoastră de rețea. 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.

Calculați o dată împreună cu noi. Un server de joc tipic atârnă la 1 Gbit/s, ceea ce corespunde cu 125 de megaocteți pe secundă. La dimensiunea de pachet cât se poate de mică, această conexiune duce în jur de 1,49 milioane de pachete pe secundă, o conexiune de 10 Gbit/s în jur de 14,88 milioane. Aceasta este limita superioară fizică, independent de procesor, kernel și firewall. Un kernel de server normal procesează, în funcție de procesor și placă de rețea, câteva sute de mii de pachete pe secundă înainte să înceapă să elimine. Un atac care nu umple nici măcar o treime din conexiunea dumneavoastră poate deci să vă paralizeze serverul, deoarece timpul de calcul se duce pe eliminarea pachetelor. Operatorii trăiesc asta ca „încărcarea nici nu era mare, totuși totul dispăruse”.

În fața acestora stau atacuri reale. Două exemple din funcționarea la KernelHost, ambele filtrate în timp real: un flood UDP împotriva unui server de joc pe 7777/UDP cu peste 112,2 Gbit/s și peste 8,7 milioane de pachete pe secundă, precum și un atac cu mai mulți vectori împotriva unui server de voce pe 9987/UDP cu peste 473,4 Gbit/s și peste 41,5 milioane de pachete pe secundă. Calculați asta față de conexiunea dumneavoastră: 473,4 Gbit/s sunt în jur de 470 de ori o conexiune de 1 Gbit/s și tot în jur de 47 de ori o conexiune de 10 Gbit/s.

De aceea cele două frâne de urgență răspândite sunt nesatisfăcătoare. Nullroutingul (blackholing) scoate adresa IP atacată din rețea și încheie într-adevăr atacul, dar și serverul dumneavoastră: pentru jucătorii dumneavoastră rezultatul este identic cu un atac reușit. O redirecționare reactivă costă, în timpul de comutare, exact minutele în care se decide campania. Eficientă este doar o filtrare care rulează permanent î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 permanent activă, fără să trebuiască 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, cu mult înainte să ajungă la centrul de date.
  • Nivelul 2: filtrare Arbor în timp real de 3,2 Tbps în Frankfurt pe Main. Direct în fața serverului sunt recunoscute și eliminate șabloanele specifice fiecărui protocol, de la Layer 3 până la 7, pachet cu pachet.

Două proprietăți sunt decisive. În primul rând, filtrarea rulează permanent, nu există deci un timp de comutare în care jucătorii dumneavoastră să zboare afară. În al doilea rând, nu se folosește nullrouting: adresa IP atacată rămâne în rețea, eliminate sunt doar pachetele dăunătoare. Protecția este inclusă în fiecare pachet de server fără cost suplimentar, fără un pachet de protecție separat și fără configurare, și este activă din momentul livrării. Serverele se află în centrul de date maincubes Premium din Frankfurt pe Main. Ce jocuri și protocoale sunt acoperite enumeră articolul Protecție DDoS în timp real pentru servere de joc.

Advanced DDoS Protection pentru proiecte atacate permanent

Unele proiecte nu sunt atacate ocazional, ci țintit și pe parcursul mai multor săptămâni, cu șabloane care se schimbă și mereu exact în seara de campanie stabilită. Pentru aceste cazuri există Advanced DDoS Protection de la 50,00 € pe lună, PrePaid și fără durată minimă. Diferența nu stă în mai multă capacitate, ci în control:

  • Un IP de protecție dedicat. Serverul dumneavoastră este comutat în rețeaua noastră pe această adresă, o modificare de partea dumneavoastră nu este necesară.
  • Reguli de protecție administrabile de dumneavoastră pentru fiecare port și protocol. Stabiliți în panoul clientului care port este filtrat cu ce profil, deci 27015/UDP altfel decât serverul web care livrează campaniile dumneavoastră.
  • Modificările se aplică în timp real, fără tichet și fără timp de așteptare. Puteți deci ajusta în timpul unui atac în curs.
  • Un profil de protecție potrivit fiecărui joc. Pentru Left 4 Dead 2 și celelalte titluri Source, la fel ca pentru peste 40 de alte jocuri și protocoale, plus profiluri libere TCP și UDP pentru servere modificate.

Și aici se aplică modelul PrePaid: fără durată minimă, fără termen de preaviz, fără contract și fără taxă de instalare. Dacă valul de atacuri a trecut, pur și simplu nu prelungiți.

Cele două niveluri în comparație

Caracteristică Protecția permanentă inclusă Advanced DDoS Protection
Preț inclusă în fiecare pachet de server, fără cost suplimentar de la 50,00 € pe lună, PrePaid fără durată minimă
Activare activă din momentul livrării, nimic de configurat comandați, primiți IP de protecție, serverul este comutat
Capacitate de filtrare 17 Tbps scrubbing global, plus filtrare Arbor în timp real de 3,2 Tbps în Frankfurt pe Main aceeași filtrare pe două niveluri, plus reguli proprii
Adresă IP adresa IP a serverului dumneavoastră IP de protecție dedicat suplimentar
Modificarea regulilor întreținute de KernelHost, ajustare fină prin tichet de dumneavoastră în panoul clientului, active în timp real
Profiluri de joc peste 40 de jocuri și protocoale, titlurile Source incluse profil selectabil pentru fiecare port, și pentru servere modificate
Nullrouting în timpul atacului nu nu
Se potrivește pentru orice server, de la prima campanie proiecte atacate permanent și țintit

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

Erori frecvente și soluții

Serverul a dispărut din căutarea prin lobby, dar rulează în continuare: de obicei 27015/UDP a fost blocat în bloc sau limitat prea strâns, și deoarece traficul de joc și interogarea împart același port, o regulă grosieră le lovește pe amândouă. Lucrați în schimb cu o comparație pe pachetele fără conexiune. Dacă portul este accesibil și serverul totuși invizibil, verificați sv_search_key, sv_steamgroup_exclusive, sv_lan 0 și sv_region 255, precum și dacă pornirea a avut loc din greșeală cu -nomaster.

În consola serverului apare continuu „Invalid split packet length”: acesta nu este un atac volumetric, ci un pachet de rețea asamblat greșit, care este trimis în succesiune rapidă. Traficul rămâne minuscul, serverul laghează totuși. Verificați mai întâi dacă lățimea de bandă este în general neobișnuită și aduceți la zi binarul serverului și extensiile. Lățimea de bandă nu ajută aici la nimic.

Toți jucătorii au ping mare, dar conexiunea nu este plină: asta indică rata de pachete în loc de volum. Uitați-vă la pachetele eliminate în ip -s link show și la contoarele UDP în nstat -az. Dacă în jurnalul de sistem apare nf_conntrack: table full, scoateți portul de joc cu notrack.

Regula de firewall este corectă și totuși nu are efect: verificați cu iptables -L INPUT -n -v dacă contoarele de potriviri cresc. Dacă rămân la zero, regula nu este atinsă, deoarece stă în urma lanțurilor UFW sau s-a pierdut după ultima repornire. Dacă ele cresc și nu se schimbă nimic, conexiunea din fața serverului este saturată, iar de acolo ajută doar filtrarea în rețea.

Serverul nu mai acceptă jucători, deși sunt locuri libere: de obicei o rezervare prin lobby este blocată. Fie operați serverul consecvent prin matchmaking, fie setați sv_force_unreserved 1 și lăsați jucătorii să intre prin browserul de servere. La mai mult de patru locuri cooperative cu L4DToolZ, această setare este oricum obligatorie.

Jucătorii noi încarcă la nesfârșit și conexiunea este plină în acest timp: atunci srcds livrează singur fișierele campaniei prin portul de joc. Setați sv_downloadurl către un server web și puneți fișierele acolo ca arhivă bzip2, sau trimiteți jucătorii către Steam Workshop.

Atacul face pauză după o schimbare de IP și revine după una sau două zile: acesta este cazul normal, deoarece serverul dumneavoastră publică singur noua adresă imediat ce este din nou înregistrat, iar o înregistrare DNS uitată sau un bot de Discord cu afișare de stare face restul. O schimbare de IP vă aduce ore, nu o soluție.

Pe server rulează comenzi de administrare străine: nu este un atac DDoS, ci un acces RCON compromis. Schimbați imediat parola și restricționați partea TCP a portului 27015 la adresa proprie.

Pe scurt

  • Un server Left 4 Dead 2 are nevoie de exact un port deschis spre exterior: 27015/UDP. Traficul de joc și interogarea A2S îl împart, un port de interogare separat nu există.
  • 27015/TCP este RCON și are ce căuta exclusiv pe adresa proprie. Cine nu are nevoie de RCON lasă rcon_password gol.
  • Sistemul de lobby este cel mai eficient filtru de acces gratuit pe care îl cunoaște jocul: sv_allow_lobby_connect_only 1, un sv_search_key propriu și sv_steamgroup_exclusive 2 blochează tot ce nu vine prin matchmaking. El filtrează conectări, nu pachete.
  • Campaniile custom au ce căuta în Steam Workshop sau în spatele lui sv_downloadurl, niciodată prin portul de joc. Altfel, fiecare încercare de conectare întreruptă se plătește cu lățimea dumneavoastră de bandă.
  • Limitarea de rată trebuie să distingă între pachetele fără conexiune (care încep cu 0xffffffff) și traficul de joc. O regulă grosieră pe 27015/UDP își aruncă afară proprii jucători.
  • La pachete de 64 de octeți, o conexiune de 1 Gbit/s duce în jur de 1,49 milioane de pachete pe secundă. Peste asta decide exclusiv rețeaua din fața serverului, nicio setare de pe serverul însuși.
  • La KernelHost, 17 Tbps de scrubbing global și o filtrare Arbor în timp real de 3,2 Tbps în Frankfurt pe Main filtrează permanent și fără cost suplimentar, fără nullrouting și fără timp de comutare.

Dacă proiectul dumneavoastră rulează deja la KernelHost, filtrarea este activă fără să trebuiască să faceți ceva. Dacă observați totuși lucruri neobișnuite, deschideți un tichet de suport, pentru ca echipa noastră să ajusteze regulile de filtrare pentru adresa dumneavoastră IP. În timpul unui atac în curs ne găsiți suplimentar prin chatul de urgență WhatsApp la +43 650 8209883. Menționați imediat patru informații: adresa IP, portul, intervalul de timp în fusul dumneavoastră orar și ce vedeți (jucătorii zboară afară, serverul nu apare în căutarea prin lobby, ping mare). Asta scutește o rundă de întrebări, iar ea contează atunci când o campanie este chiar în curs.

Dacă găzduiți în altă parte și sunteți atacat regulat, mutarea la KernelHost este calea mai scurtă decât orice regulă suplimentară pe un server a cărui conexiune se termină mai înainte. Protecția permanentă este parte din fiecare pachet de server, nu un supliment pe care îl rezervați abia în caz de urgență.

Întrebări frecvente

Ce porturi trebuie să las deschise pentru un server Left 4 Dead 2?
Exact unul: 27015/UDP. Prin acest port trec împreună traficul de joc și interogarea A2S de server, un port de interogare separat nu există la Left 4 Dead 2. 27015/TCP este RCON și trebuie deschis exclusiv pentru adresa dumneavoastră. 27005/UDP este portul clientului, el pornește de la jucător și nu are nevoie de nicio deschidere pe server. 27020/UDP este SourceTV și este necesar doar dacă transmiteți efectiv cu -hltv sau tv_enable 1. Alte instanțe pe aceeași gazdă se numără în sus cu 27016, 27017 și așa mai departe.
Serverul meu L4D2 laghează, dar conexiunea este liberă. Este un atac DDoS?
Probabil nu. Uitați-vă mai întâi în consola serverului: dacă acolo se repetă linia Invalid split packet length, atunci sosesc pachete de rețea asamblate greșit, iar din acestea sunt suficiente foarte puține. Traficul rămâne minuscul, serverul laghează totuși. Verificați în paralel rata de pachete cu sar -n DEV 1 10 și contoarele de pachete eliminate cu ip -s link show eth0. Dacă amândouă rămân fără nimic deosebit, nu a fost un atac volumetric, ci un șablon de blocare sau de sarcină în motor ori într-o extensie SourceMod. Împotriva acestuia nu ajută lățimea de bandă, ci un binar de server actual.
Protejează sv_allow_lobby_connect_only 1 împotriva atacurilor DDoS?
Nu, directiva filtrează conectări, nu pachete. Cu sv_allow_lobby_connect_only 1 mai intră doar jucătorii care au fost trimiși printr-o lobby de matchmaking Steam; un connect din consola de dezvoltator și invitațiile Steam sunt respinse. Împotriva trolilor, a conturilor de unică folosință și a unui flood de conectări, asta este foarte eficient. Un atacator care inundă 27015/UDP nu vrea însă deloc să se alăture: pachetele lui sunt respinse, dar au ajuns totuși, au consumat lățime de bandă și au costat timp de calcul. Împotriva atacurilor volumetrice, setarea nu are efect.
Pot limita pur și simplu rata pe portul 27015 când serverul este atacat?
Nu în bloc. Deoarece traficul de joc și interogarea serverului împart 27015/UDP, o limitare grosieră de rată își aruncă proprii jucători afară și încheie atacul în sensul atacatorului. Frâna trebuie să distingă între clasele de pachete: toate pachetele fără conexiune ale motorului Source încep cu patru octeți setați (0xffffffff), traficul jucătorilor deja conectați nu. Exact pe asta se poate pune cu nftables sau iptables o limită pentru fiecare adresă a expeditorului. În plus, variabila de mediu STEAM_GAMESERVER_RATE_LIMIT_200MS elimină pachetele fără conexiune ale unei adrese imediat ce din ele sosesc în 200 de milisecunde mai mult decât valoarea setată.
Ce este o rezervare prin lobby și de ce îmi blochează serverul?
O rezervare prin lobby este o ocupare limitată în timp a serverului dumneavoastră de către o lobby de matchmaking. Cât timp există, serverul este considerat ocupat pentru alte lobby-uri, iar ea expiră de la sine abia după o vreme. La patru locuri cooperative, asta este o resursă rară. Cine nu își operează serverul prin matchmaking setează sv_force_unreserved 1: serverul nu mai răspunde atunci la cererile de rezervare și respinge conectările cu marcă de rezervare. La mai mult de patru locuri cooperative cu L4DToolZ, această setare este oricum obligatorie, altfel locurile suplimentare rămân inaccesibile.
Campaniile custom îmi fac serverul vulnerabil?
Îl fac scump. O campanie custom este un pachet VPK cu hărți, modele, texturi și sunete, deci un multiplu al unei singure hărți. Dacă srcds livrează singur aceste fișiere prin portul de joc, fiecare încercare de conectare a unui jucător nou costă descărcarea completă, fiecare întrerupere în mijlocul descărcării la fel. Aceasta este o metodă ieftină de a umple o conexiune, și nu arată în nicio statistică precum un atac. Trimiteți jucătorii către Steam Workshop sau puneți fișierele prin sv_downloadurl pe un server web, acolo ca arhivă bzip2.
De la ce dimensiune a atacului nu mai ajută nicio regulă de firewall?
Imediat ce conexiunea din fața serverului dumneavoastră este saturată. Un server de joc tipic atârnă la 1 Gbit/s, ceea ce corespunde cu 125 de megaocteți pe secundă și, la pachete de 64 de octeți, cu în jur de 1,49 milioane de pachete pe secundă. Un kernel de server normal procesează câteva sute de mii dintre ele înainte să înceapă să elimine. Regula dumneavoastră decide întotdeauna abia asupra unui pachet care a trecut deja prin cablu; îl poate elimina, dar nu îl poate face netrimis. De la această limită mai acționează doar o filtrare care rulează permanent în rețeaua din fața serverului.
Serverul meu de la KernelHost trece offline în timpul unui atac?
Nu. Nu se folosește nullrouting. Adresa dumneavoastră IP rămâne în rețea, eliminate sunt exclusiv pachetele dăunătoare. Protecția este pe două niveluri: 17 Tbps capacitate de mitigare în rețeaua globală de scrubbing prind atacurile volumetrice aproape de sursa lor, iar o filtrare Arbor în timp real de 3,2 Tbps în Frankfurt pe Main elimină șabloanele specifice fiecărui protocol direct în fața serverului. Ambele niveluri rulează permanent și nu trebuie să reacționeze abia la un atac, nu există deci un timp de comutare în care jucătorii dumneavoastră să zboare afară.
Protecția DDoS de la KernelHost costă în plus?
Nu. Protecția permanentă pe două niveluri este inclusă la 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, și nu există un pachet de protecție separat. Serverele se află în centrul de date maincubes Premium din Frankfurt pe Main. Cine își operează până acum serverul Left 4 Dead 2 în altă parte și este atacat regulat nu rezolvă asta cu o regulă suplimentară pe un server a cărui conexiune se termină mai înainte, ci cu mutarea.
Când am nevoie suplimentar de Advanced DDoS Protection?
Atunci când proiectul dumneavoastră nu este atacat ocazional, ci țintit și pe parcursul mai multor săptămâni, și când vreți să controlați singur filtrarea. Primiți un IP de protecție dedicat și administrați singur regulile de protecție pentru fiecare port și protocol în panoul clientului, deci 27015/UDP altfel decât serverul web care livrează campaniile dumneavoastră. Modificările se aplică în timp real, puteți deci ajusta în timpul unui atac în curs. Prețul începe de la 50,00 EUR pe lună, PrePaid, fără durată minimă și fără taxă de instalare.

Left 4 Dead 2 Protecție DDoS L4D2 Source-Engine srcds Sistem de lobby Port 27015 Protecție server de joc Advanced DDoS Protection