Protejarea serverului Call of Duty împotriva atacurilor DDoS
De care porturi are nevoie cu adevărat un server Call of Duty, de ce jocul, interogarea și RCON se află pe același port, cum limitați getstatus-reflection și atacurile RCON, și de la ce dimensiune de atac ajută doar filtrarea din rețeaua din față.
Protejarea unui server Call of Duty împotriva atacurilor DDoS este, la titlurile clasice, o sarcină plăcut de concretă: este vorba de exact un port UDP, de o mână de dvar-uri în server.cfg și de un vector de amplificare pe care motorul de joc îl aduce cu el din 2003. Un server care pierde seara, în mijlocul rundei, toți jucătorii în același timp are în schimb rareori o problemă de hardware. De cele mai multe ori rulează un atac, și el rulează exact atunci când serverul este plin.
Acest articol arată mai întâi pentru ce titluri este valabil, apoi ce puteți securiza singur fără costuri suplimentare, în continuare unde se termină tehnic aceste măsuri și, la final, ce trebuie să se întâmple atunci în rețeaua din fața serverului. Comenzile sunt scrise pentru Debian 12, Debian 13, Ubuntu 22.04 LTS și Ubuntu 24.04 LTS și presupun root, ca utilizator obișnuit puneți sudo în față.
Dacă atacul este în curs chiar acum: nu modificați nimic în server.cfg și nu reporniți serverul. Salvați mai întâi valorile măsurate (vedeți secțiunea „Jurnalizare”), după atac nu mai există.
Pentru ce titluri Call of Duty puteți proteja un server împotriva DDoS
Un server Call of Duty îl puteți proteja împotriva DDoS doar la titlurile care permit servere dedicate proprii. Acestea sunt versiunile originale Call of Duty (2003), Call of Duty United Offensive, Call of Duty 2, Call of Duty 4 Modern Warfare și Call of Duty World at War, la care se adaugă platformele comunitare Plutonium (World at War, Black Ops, Black Ops II, Modern Warfare 3), IW4x (Modern Warfare 2) și CoD4X (Call of Duty 4). Toate aceste titluri aduc cu ele același model: o server.cfg, un port UDP deschis și o intrare într-o listă publică de servere.
Pentru episoadele moderne acest articol nu este valabil, în mod explicit. Warzone, Modern Warfare (2019), Black Ops Cold War, Vanguard, Modern Warfare II, Modern Warfare III și Black Ops 6 nu cunosc servere dedicate care se pot închiria: partidele rulează pe infrastructura de matchmaking a Activision, nu există nicio server.cfg, niciun browser de servere și niciun port pe care l-ați putea deschide sau securiza. Listele de porturi pe care Activision le publică pentru aceste titluri (printre altele TCP 3074 și de la 27014 până la 27050, precum și UDP 3074, 3478 și de la 27000 până la 27031) descriu porturi de client și de platformă, nu porturi de server. Cine are întreruperi de conexiune în Warzone are o problemă pe propria conexiune sau una la Activision, dar niciuna pe care un server închiriat să o rezolve.
De ce sunt atacate tocmai serverele Call of Duty
Serverele Call of Duty reunesc patru proprietăți care le fac o țintă comodă. În primul rând, fiecare server listat își publică singur adresa: intrarea din lista de servere conține adresa IP și portul în text clar, altfel nu ar putea intra nimeni pe el. În al doilea rând, întregul trafic merge prin UDP, iar UDP nu cunoaște nicio stabilire de conexiune care ar putea fi pretinsă, adresele expeditorului se pot falsifica. În al treilea rând, motorul de joc răspunde la interogările de stare venite de la oricine, fără să fie nevoie ca cineva să pornească jocul. În al patrulea rând, controlul la distanță RCON se află pe același port ca jocul însuși.
La asta se adaugă partea socială: jucători excluși, concurență între clanuri, certuri într-o comunitate care se cunoaște de ani. Un atac nu îl costă pe cel care îl declanșează nici pricepere, nici bani demni de menționat, așa-numitele booter și stresser se vând ca abonament pentru câțiva euro pe lună, iar atacurile de amplificare prin servere de joc fac parte acolo din oferta standard. Ce este în detaliu un atac DDoS explică articolul Ce este un atac DDoS?.
Porturile despre care este vorba în realitate
Un server Call of Duty clasic ocupă exact un port UDP, și anume 28960. Pe acest singur port rulează simultan trei lucruri: traficul de joc, interogările de stare ale listei de servere și controlul la distanță RCON. Un port de interogare propriu și un port RCON propriu nu există. Linia de pornire a unui server dedicat arată la fel la toate titlurile, doar numele fișierului executabil diferă:
+set dedicated 2 +set net_ip 0.0.0.0 +set net_port 28960 +set sv_maxclients 32 +exec server.cfg +map_rotate
| Titlu sau platformă | Serviciu | Port | Protocol |
|---|---|---|---|
| Call of Duty, United Offensive, Call of Duty 2, Call of Duty 4, World at War | Joc, interogare și RCON împreună | 28960 | UDP |
| Alte instanțe pe aceeași mașină | Joc, interogare și RCON împreună | de la 28961 până la 28970 | UDP |
| Plutonium T4 (World at War) | Joc, interogare și RCON împreună | 28960 | UDP |
| Plutonium T5 (Black Ops) | Joc, interogare și RCON împreună | 28960 | UDP |
| Plutonium T6 (Black Ops II) | Joc, interogare și RCON împreună | 4976 | UDP |
| Plutonium IW5 (Modern Warfare 3) | Joc, interogare și RCON împreună | 27016 | UDP |
| IW4x (Modern Warfare 2) | Joc, interogare și RCON împreună | 28960 | UDP |
| t7x (Black Ops III) | Joc, interogare și RCON împreună | 27017 | UDP |
| Serverul master Call of Duty 4 (la ieșire) | Listă și autorizare | 20810 și 20800 | UDP |
| Serverul master Call of Duty 2 (la ieșire) | Listă și autorizare | 20710 și 20700 | UDP |
| Serverul master Call of Duty 1 (la ieșire) | Listă și autorizare | 20510 și 20500 | UDP |
| IW4MAdmin | Interfață web pentru administrare | 1624 | TCP |
| SSH | Acces la server | 22 | TCP |
Porturile serverului master nu au ce căuta în regulile dumneavoastră de permitere din firewall. 20810 și 20800 sunt porturi de destinație de partea cealaltă, nu porturi de ascultare pe mașina dumneavoastră: serverul dumneavoastră contactează lista din proprie inițiativă. Multe ghiduri de deschidere a porturilor recomandă totuși să fie deschise la intrare. Asta mărește suprafața de atac fără nicio contravaloare.
Ordinele de mărime obișnuite la Call of Duty
A doua tabelă este cea mai importantă, dacă vreți să estimați dacă mai puteți face față singur. Ea pune încărcarea normală a unui server plin față în față cu cifrele despre care este vorba la un atac.
| Indicator | Valoare |
|---|---|
Rata de ieșire pe fiecare jucător (valoarea obișnuită sv_maxRate) |
25.000 de octeți pe secundă |
| Încărcarea de ieșire la 32 de sloturi ocupate | în jur de 800 de kiloocteți pe secundă, adică aproximativ 6,4 Mbit/s |
| Conexiunea unui server de joc obișnuit | 1 Gbit/s, corespunde cu 125 de megaocteți pe secundă |
| Rata de pachete pe 1 Gbit/s la pachete de 64 de octeți | în jur de 1,49 milioane de pachete pe secundă |
Dimensiunea unei cereri getstatus pe conexiune |
41 de octeți (20 de octeți antet IP, 8 octeți antet UDP, 13 octeți sarcină utilă) |
| Factorul de amplificare al protocolului de rețea Quake potrivit avertizării CISA TA14-017A | 63,9 |
Răspunsul la o cerere getstatus, calculat din asta |
în jur de 2.600 de octeți |
Limita superioară integrată în CoD4X pentru getstatus |
20 de răspunsuri la fiecare 20 de secunde |
Limita superioară integrată în CoD4X pentru getinfo |
100 de răspunsuri la fiecare 100 de secunde |
| Flood UDP filtrat la KernelHost împotriva unui server de joc | peste 112,2 Gbit/s |
| Atac filtrat la KernelHost împotriva unui server de voce | peste 473,4 Gbit/s la peste 41,5 milioane de pachete pe secundă |
De ce jocul, interogarea și RCON se află pe același port
Aceasta este particularitatea decisivă pentru Call of Duty. Motorul id Tech 3, pe care se construiesc toate titlurile Call of Duty clasice, nu cunoaște porturi separate pentru joc, interogare și control la distanță. Totul merge prin așa-numitele pachete fără conexiune, pe acel singur port UDP. Un pachet fără conexiune este un pachet UDP care începe cu patru octeți 0xFF și care duce după aceea numele comenzii în text clar: getstatus, getinfo, getchallenge, connect sau rcon.
Consecința practică este neplăcută: nu puteți separa RCON de joc prin firewall fără să blocați și jocul. O regulă pe portul 28960 lovește întotdeauna tot. Cine vrea să sorteze țintit floodurile de interogări și atacurile RCON trebuie să se uite în conținutul pachetului și nu doar la numărul portului. Exact de aceea, regulile de firewall bazate pe porturi ajung la limita lor la Call of Duty mai repede decât la jocurile cu port de interogare separat.
Ce este getstatus-reflection la Call of Duty?
getstatus-reflection este un atac de amplificare în care un atacator trimite interogări de stare mici, cu adresa expeditorului falsificată, către multe servere de joc, pentru ca răspunsurile acestora, vizibil mai mari, să ajungă la victima propriu-zisă. Serverele de joc nu sunt în acest caz ținta, ci amplificatorul. Acest vector este documentat pentru motorul id Tech 3 de peste un deceniu și afectează Call of Duty la fel ca Quake 3 și celelalte derivate ale lui.
Vă lovește dublu, din două direcții. Ca atacat primiți un potop de cereri getstatus, care consumă timp de calcul și lățime de bandă de ieșire, iar jucătorii dumneavoastră observă asta ca vârfuri de lag. Ca amplificator involuntar trimiteți răspunsuri către o victimă străină, iar plângerea de abuz ajunge la dumneavoastră. Ambele se întâmplă pe același port, cu aceleași pachete, și ambele arată la început inofensive în graficul de încărcare.
Cum arată un pachet getstatus
Cererea este alcătuită din patru octeți 0xFF și din cuvântul getstatus, împreună 13 octeți de sarcină utilă. Cu antetul IP și UDP sunt 41 de octeți pe conexiune. Exact pe asta țintește verificarea de lungime din regulile de firewall care circulă de ani în forumurile Call of Duty:
iptables -A INPUT -p udp -m length --length 41:45 -m recent --set --name getstatus_cod
iptables -A INPUT -p udp -m string --algo bm --string "getstatus" -m recent --update --seconds 1 --hitcount 20 --name getstatus_cod -j DROP
Răspunsul este incomparabil mai mare. Un statusResponse conține întreaga configurație a serverului ca șir de caractere, plus o linie pentru fiecare jucător conectat, deci câțiva kiloocteți la un server plin. CISA trece protocolul de rețea Quake în prezentarea sa a atacurilor de amplificare prin UDP (TA14-017A) cu un factor de amplificare de 63,9 și numește explicit, ca comandă folosită abuziv, schimbul de informații despre server. Din 1 Mbit/s de cereri falsificate devin astfel în jur de 64 Mbit/s la victimă. Prin comparație: DNS se află în aceeași prezentare la 28 până la 54, NTP la 556,9.
Frâna integrată: sv_queryIgnoreTime și sv_queryIgnoreMegs
Call of Duty 4 are, de la versiunea de server 1.7, o frână de interogare integrată. Ea își notează fiecare adresă care a trimis o interogare de stare și ignoră alte interogări ale aceleiași adrese pentru un timp reglabil. Patru dvar-uri controlează asta, cu aceste presetări:
sv_queryIgnoreMegs 1
sv_queryIgnoreTime 2000
sv_queryBounceIgnoreTime 12000
sv_queryIgnoreDebug 0
sv_queryIgnoreMegs stabilește cât de multă memorie are voie să ocupe lista de ignorare. 1 megaoctet cuprinde în jur de 65.000 de adrese, fiecare megaoctet suplimentar aproximativ 87.000 în plus. Valoarea 0 dezactivează complet frâna, și exact asta este cazul pe multe servere, deoarece configurația provine dintr-un șablon vechi. sv_queryIgnoreTime este timpul de blocare în milisecunde. sv_queryBounceIgnoreTime intervine atunci când se întoarce un răspuns cu „ICMP Port Unreachable”, adică exact atunci când serverul dumneavoastră este folosit abuziv ca amplificator împotriva unei victime străine. sv_queryIgnoreDebug 1 scrie potrivirile în jurnal, ca să vedeți în general dacă se întâmplă ceva.
Cine folosește CoD4X are în plus limite superioare fixe în codul serverului: cel mult 20 de răspunsuri getstatus la fiecare 20 de secunde, cel mult 100 de răspunsuri getinfo la fiecare 100 de secunde și cel mult un mesaj de eroare RCON la fiecare 100 de milisecunde. Comentariul din codul sursă numește clar intenția: serverul are voie să se lase inundat, dar nu trebuie să risipească pentru asta lățime de bandă de ieșire. Aceasta este stabilirea corectă a priorităților, dar nu înlocuiește filtrarea din fața serverului.
De ce RCON este la Call of Duty o problemă istorică
RCON este controlul la distanță al serverului, iar la Call of Duty este un pachet UDP necriptat pe portul de joc. O comandă RCON arată pe conexiune astfel: patru octeți 0xFF, apoi cuvântul rcon, apoi parola în text clar, apoi comanda propriu-zisă. Nu există criptare, nu există sesiune, nu există cont de utilizator și nu există al doilea factor. Din asta rezultă trei probleme, toate reale:
- Interceptarea. Cine vede traficul într-un punct oarecare al drumului citește parola dumneavoastră RCON în text clar. Asta este valabil pentru fiecare rețea dintre dumneavoastră și server și pentru fiecare instrument căruia îi dați parola.
- Ghicirea. Nu există nicio autentificare care ar putea fi blocată și nicio blocare de cont după zece încercări greșite. Un atacator încearcă parole cu viteza pe care o dorește. Serverul original nu frânează deloc asta, CoD4X frânează doar răspunsul la un mesaj de eroare la fiecare 100 de milisecunde și consemnează încercarea ca „Bad rcon”.
- Reflection. Și un mesaj de eroare RCON este un răspuns la un pachet falsificat. Cine vă bombardează serverul cu pachete RCON falsificate îl folosește ca mic amplificator, iar serverul dumneavoastră își umple pe lângă asta jurnalul.
Consecința practică: setați rcon_password doar dacă aveți într-adevăr nevoie de RCON. Dacă da, atunci lungă și aleatorie. CoD4X cere cel puțin opt caractere, aceasta este o limită inferioară și nu o recomandare. Administrați în activitatea de zi cu zi prin SSH și prin consola serverului, în loc de RCON din internetul deschis. Și dacă folosiți un instrument de administrare precum IW4MAdmin, care la rândul lui comunică prin RCON, interfața web a acestuia, pe portul 1624, nu are ce căuta în internetul deschis.
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 Call of Duty configurat curat rezistă din propriile forțe atacurilor mici și medii, indiferent la cine este găzduit.
1. Inventar: ce ascultă, de fapt?
Înainte să scrieți o singură regulă, verificați ce oferă serverul dumneavoastră către exterior. Nu ghiciți, verificați:
ss -lntup
Interesantă este coloana cu adresa locală. 0.0.0.0:28960 și [::]:28960 înseamnă „accesibil din tot internetul”, 127.0.0.1:3306 înseamnă „doar local” și nu are nevoie de nicio regulă de firewall. Pe lângă joc apar acolo deseori IW4MAdmin, un server web pentru fast download, o bază de date pentru statistici și o a doua instanță de joc uitată. Perspectiva atacatorului o oferă o scanare de porturi din exterior:
nmap -Pn -sU -p 28960-28970,4976,27016 ADRESA.IP.A.SERVERULUI
nmap -Pn -p- --min-rate 1000 ADRESA.IP.A.SERVERULUI
2. Lăsați deschis doar ce are nevoie jocul cu adevărat
Pentru un singur server Call of Duty este suficientă o singură regulă de permitere către exterior, tot restul se restrânge sau nu se publică deloc. Cu UFW arată astfel, și anume exact în această ordine, ca să nu vă blocați singur accesul:
ufw allow 22/tcp comment 'SSH'
ufw allow 28960/udp comment 'Call of Duty'
ufw allow from 203.0.113.10 to any port 1624 proto tcp comment 'IW4MAdmin'
ufw default deny incoming
ufw default allow outgoing
ufw --force enable
ufw status verbose
Înlocuiți 203.0.113.10 cu adresa dumneavoastră. La Plutonium T6, 4976/udp ia locul lui 28960/udp, la Plutonium IW5 este 27016/udp. Dacă operați mai multe instanțe, deschideți exclusiv intervalul folosit efectiv, deci de exemplu 28960:28962/udp și nu în bloc de la 28960 până la 28970. Fiecare port pe care nu ascultă nimic nu este, ce e drept, o poartă de intrare, dar îl costă totuși pe kernel muncă în caz de atac. Instrucțiunile complete, inclusiv calea de salvare, le găsiți în Configurarea firewallului UFW fără să vă blocați singur accesul.
3. Activați frâna de interogare în server.cfg
Aceste patru linii au ce căuta în fiecare server.cfg a unui server Call of Duty 4 și nu costă nimic în afară de câțiva megaocteți de memorie:
set sv_queryIgnoreMegs "4"
set sv_queryIgnoreTime "2000"
set sv_queryBounceIgnoreTime "12000"
set sv_queryIgnoreDebug "0"
4 megaocteți cuprind în jur de 326.000 de adrese, asta ajunge și pentru un flood serios. Creșteți sv_queryIgnoreTime doar cu prudență peste cele 2000 de milisecunde presetate: lista de servere și fiecare browser de servere vă interoghează serverul prin același mecanism, iar cine setează timpul de blocare prea sus dispare din listă. Setați sv_queryIgnoreDebug temporar pe 1, dacă vreți să știți dacă frâna prinde în general, iar după aceea din nou pe 0, ca jurnalul să nu vă umple discul.
4. Sortați floodurile de interogări în firewall
Frâna din motorul de joc are efect abia după ce pachetul a ajuns la procesul jocului. O regulă de firewall decide mai devreme și costă mai puțin. Aceste două linii limitează getstatus pe fiecare adresă sursă:
iptables -A INPUT -p udp --dport 28960 -m length --length 41:45 -m recent --set --name cod_query --rsource
iptables -A INPUT -p udp --dport 28960 -m string --algo bm --string "getstatus" -m recent --update --seconds 2 --hitcount 4 --name cod_query --rsource -j DROP
Prima linie își notează fiecare adresă sursă care trimite un pachet de lungimea tipică a unei interogări de stare. A doua elimină fiecare cerere getstatus suplimentară, de îndată ce aceeași adresă a trimis mai mult de patru dintre ele în două secunde. Patru cereri la două secunde ajung oricărui browser de servere. În forumuri circulă și variante cu 20 de cereri pe secundă, care sunt vizibil mai generoase și au efect mai degrabă împotriva boților grosieri decât împotriva unui val curat de reflection.
Regulile iptables simple 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 au ce căuta în /etc/ufw/before.rules, deoarece altfel dispar la următorul ufw reload. Verificați apoi cu iptables -L INPUT -n -v dacă contoarele de potriviri cresc. Dacă rămân la zero, regula nu este atinsă.
5. Dezactivați RCON sau conduceți-l strâns
Cel mai sigur acces RCON este cel care nu există. Un rcon_password gol respinge orice pachet RCON:
set rcon_password ""
Rețineți în acest caz o subtilitate: serverul răspunde și atunci, anume cu un mesaj de eroare, și rămâne astfel un mic amplificator. Cine vrea să excludă asta și are nevoie de RCON oricum doar de la o adresă fixă elimină pachetele mai înainte:
iptables -A INPUT -p udp --dport 28960 ! -s 203.0.113.10 -m string --algo bm --string "rcon " -j DROP
Această regulă are un efect secundar pe care ar trebui să îl cunoașteți: șirul de caractere rcon poate apărea teoretic și într-un pachet de chat al unui jucător conectat, pachetul ar fi atunci eliminat și el. În practică asta se poate suporta. Cine nu vrea efectul secundar lasă regula la o parte și lucrează doar cu o parolă goală sau foarte lungă.
6. Respingeți floodul de conectări și epuizarea sloturilor
Un flood de conectări nu țintește conexiunea, ci logica jocului: atacatorul trimite în succesiune rapidă pachete getchallenge și connect, până când toate sloturile sunt ocupate cu conexiuni pe jumătate terminate. Jucătorii adevărați primesc atunci „Server is full”, deși în joc nu stă nimeni. Împotriva asta au efect aceste setări:
set sv_maxclients "32"
set sv_reconnectLimit "3"
set sv_floodProtect "1"
set sv_connectTimeout "30"
set sv_timeout "120"
sv_reconnectLimit limitează de câte ori are voie același jucător să se reconecteze una după alta. sv_floodProtect limitează câte comenzi de client prelucrează serverul pentru fiecare jucător și împiedică astfel ca un singur client să frâneze serverul cu comenzi. sv_connectTimeout și sv_timeout stabilesc cât timp blochează un slot o conexiune pe jumătate terminată, respectiv una mută: cine lasă aici valori generoase dintr-un șablon vechi îi ușurează atacatorului epuizarea sloturilor.
La CoD4X se adaugă sv_authorizemode. Valoarea 1 lasă să intre doar jucătorii cu o copie valabilă, 0 doar jucătorii fără, iar -1 pe amândoi. Cine setează 1 blochează o mare parte din clienții de unică folosință, dar pierde și jucători adevărați fără copie originală. Mijlocul cel mai dur este o parolă de server prin g_password, care are efect împotriva a tot ce folosește calea normală de intrare în joc. Și un lucru trebuie să fie clar: o parolă vă protejează logica jocului, nu conexiunea. Un atacator care vă inundă serverul nu vrea deloc să intre. Pachetele lui sunt respinse, dar au ajuns totuși, și exact acesta este punctul.
7. Intrarea din lista de servere și propria dumneavoastră adresă
Aici merită onestitatea în locul gândirii dorite: adresa dumneavoastră IP nu se poate păstra secretă. Fiecare jucător care a fost conectat o dată o cunoaște, iar intrarea din listă o publică oricum, împreună cu portul. Puteți dezactiva intrarea dacă nu setați niciun server master în server.cfg (dvar-urile se numesc sv_master1, sv_master2 și așa mai departe). Asta costă însă toată vizibilitatea pentru jucătorii noi și ajută doar împotriva celui mai comod dintre atacatori.
O observație despre situația listelor: serverele master originale ale Activision (codmaster.activision.com pe 20510, cod2master.activision.com pe 20710, cod4master.activision.com pe 20810) nu mai răspund la nimic pentru titlurile vechi. Cine vrea să fie listat astăzi folosește listele comunitare: CoD4X operează una proprie și cere pentru asta un token în sv_authtoken, Plutonium aduce cu el o listă de servere proprie. La lucrul în sine asta nu schimbă nimic, adresa se află acolo la fel, în text clar.
Două obiceiuri au totuși efect. Nu publicați nicăieri singur adresa IP brută, deci nici pe canalul de Discord, nici pe pagina clanului. Și conectați-vă jucătorii printr-un nume de gazdă, ca să puteți schimba adresa la nevoie, fără ca toate referințele să se rupă. Clasicul este în acest caz o intrare A uitată către adresa veche: ea face orice schimbare ineficientă.
8. Scoateți interfețele web, baza de date și fast download din internetul deschis
Pe lângă joc rulează pe cele mai multe servere Call of Duty și mai mult: IW4MAdmin cu interfața sa web pe portul 1624, un server web pentru fast download al hărților, uneori o bază de date pentru statistici. Fiecare dintre aceste servicii este o suprafață de atac proprie, și niciunul dintre ele nu are ce căuta nelimitat în internetul deschis.
Restrângeți 1624 la adresa dumneavoastră sau ajungeți la interfață printr-o redirecționare SSH și deschideți după aceea local http://127.0.0.1:1624:
ssh -N -L 1624:127.0.0.1:1624 root@ADRESA.IP.A.SERVERULUI
Baza de date o legați pe 127.0.0.1, ea nu are ce căuta în niciun caz în internetul deschis. Și puneți fast download pe un server web separat, în locul procesului jocului: un server web aflat sub încărcare ia altfel jocului exact timpul de calcul de care are nevoie pentru simulare.
9. Jurnalizare, ca să aveți date la nevoie
Cel mai important pas este acela pe care aproape nimeni nu îl face dinainte: să vă 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ă erau 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 port 28960 -c 200 -q
Pentru Call of Duty există o a cincea, care răspunde la întrebarea decisivă. Această captură arată exclusiv pachetele fără conexiune, adică exact getstatus, getinfo, getchallenge, connect și rcon:
tcpdump -ni eth0 'udp port 28960 and udp[8:4] = 0xffffffff' -c 200 -A
Dacă acolo apare de o sută de ori getstatus din adrese mereu noi, aveți un flood de interogări. Dacă apare acolo rcon, cineva încearcă să vă ghicească parola. Dacă apare acolo doar getchallenge și connect, este un flood de conectări. La tcpdump este valabil întotdeauna: limitați cu -c, o captură la încărcare maximă apasă suplimentar un server deja 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 configurare 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 server plin cu 32 de sloturi generează la ieșire în jur de 6,4 Mbit/s, adică mai puțin de un procent dintr-o conexiune de un gigabit. Aceeași conexiune este plină de îndată ce cineva trimite 125 de megaocteți pe secundă, și exact pe asta sunt construite atacurile care se pot comanda pentru zece euro pe lună. Dacă regula dumneavoastră iptables din spate este bună nu mai joacă atunci niciun rol, deoarece pachetele jucătorilor dumneavoastră nu mai trec nici înainte de asta.
A doua mărime este rata de pachete, și ea lovește la Call of Duty în mod regulat mai devreme decât lățimea de bandă. La pachete mici de 64 de octeți, într-o conexiune de 1 Gbit/s încap în jur de 1,49 milioane de pachete pe secundă. Un kernel de server obișnuit prelucrează, în funcție de procesor și de placa de rețea, câteva sute de mii dintre ele înainte să înceapă să elimine. O cerere getstatus este, cu 41 de octeți, încă mai mică decât asta: un atac care nu vă umple conexiunea nici măcar la o treime vă scoate totuși serverul din funcțiune, deoarece tot timpul de calcul se duce în eliminare. Operatorii trăiesc asta ca „încărcarea nici nu era mare, și totuși totul a dispărut”.
La Call of Duty se adaugă o particularitate care înăsprește socoteala. Deoarece jocul, interogarea și RCON se află pe același port, nu puteți închide 28960 la nevoie: ar fi același lucru ca și cum ați opri serverul. Și deoarece motorul de joc răspunde la fiecare interogare de stare cu un multiplu al dimensiunii cererii, un atacator consumă pentru același efect mai puțină lățime de bandă proprie decât la alte jocuri.
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 server de joc. Pentru asta nu există nicio setare locală. Atacurile volumetrice trebuie să se termine în rețeaua din fața serverului.
Ce opune KernelHost
Protecția permanentă, inclusă la 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ă la centrul de date.
- Nivelul 2: filtrare Arbor în timp real cu 3,2 Tbps la Frankfurt pe Main. Direct în fața serverului sunt recunoscute și eliminate modelele specifice fiecărui protocol, 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 lipsește. Și nu se folosește nullrouting: adresa dumneavoastră IP rămâne în rețea, eliminate sunt doar pachetele dăunătoare. Cine scoate adresa IP din rețea obține pentru dumneavoastră același rezultat ca atacatorul. Ce jocuri și protocoale sunt acoperite le enumeră Protecție DDoS în timp real pentru servere de joc.
Advanced DDoS Protection pentru proiectele atacate permanent
Unele clanuri și comunități nu sunt atacate ocazional, ci țintit și săptămâni la rând. Pentru asta 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:
- IP de protecție dedicat din nucleul de la Frankfurt, pe care serverul dumneavoastră este comutat în propria noastră rețea. De partea dumneavoastră nu este nevoie de nicio modificare.
- Reguli de protecție administrabile de dumneavoastră, pe fiecare port și protocol în panoul clientului: setați ce este permis pe 28960 UDP, fără să scrieți pentru asta un tichet, iar la mai multe instanțe separat pe fiecare port.
- Modificările se aplică în timp real, deci puteți ajusta în timpul unui atac în curs.
- Profil de protecție potrivit fiecărui joc, și pentru aplicații modificate și proprii, pe orice porturi TCP sau UDP. Acesta este punctul relevant pentru Plutonium și CoD4X, deoarece porturile lor pot să difere de presetări.
Advanced DDoS Protection se adresează serverelor care stau la KernelHost. Dacă serverul dumneavoastră Call of Duty rulează în prezent în altă parte și este scos acolo regulat din rețea, mutarea la KernelHost este calea care schimbă ceva.
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 € pe lună, PrePaid |
| Capacitate de filtrare | 17 Tbps scrubbing global plus filtrare Arbor în timp real cu 3,2 Tbps la 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 fiecare port și protocol în panoul clientului |
| Modificări | se aplică automat | se aplică în timp real, chiar și în timpul unui atac |
| Profil de joc | profiluri optimizate pentru jocurile curente | profil potrivit jocului, și pentru Plutonium, CoD4X și porturi proprii |
| 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 cele mai multe servere Call of Duty este suficientă protecția permanentă inclusă, împreună cu o server.cfg curată. Advanced DDoS Protection este răspunsul la faptul că cineva o ia personal.
Greșeli frecvente și soluții
„Am schimbat adresa IP și două ore mai târziu eram din nou offline”: Atacatorul are noua adresă din aceeași sursă ca pe cea veche, de obicei din intrarea în listă, dintr-un bot de Discord cu afișare de stare sau dintr-o intrare DNS veche. O schimbare de adresă este un câștig de timp, nu o soluție.
„Furnizorul meu îmi trimite o notificare de abuz, deși eu sunt victima”: Atunci serverul dumneavoastră nu este ținta, ci amplificatorul. Cineva trimite cereri getstatus falsificate, iar serverul dumneavoastră răspunde cuminte către o victimă străină. Verificați mai întâi dacă sv_queryIgnoreMegs este pe 0 și setați cele patru dvar-uri de interogare, precum și regula de firewall din secțiunea 4.
„Serverul apare în listă ca plin, dar este gol”: Acesta este un flood de conectări, și el lovește logica jocului, nu conexiunea. Împotriva lui au efect sv_reconnectLimit, valori mai scurte pentru sv_connectTimeout și sv_timeout și, la nevoie, o parolă de server.
„Serverul dispare din lista de servere în timpul atacului”: Aceasta este consecința, nu cauza. Lista de servere verifică prin aceleași interogări de stare dacă serverul dumneavoastră trăiește. Dacă răspunsurile nu trec sau au fost eliminate de propria dumneavoastră frână, serverul este considerat offline. Verificați dacă sv_queryIgnoreTime este setat prea sus, înainte să suspectați firewallul.
„Regulile mele iptables nu se aplică”: Trei cauze sunt frecvente. Regulile se află î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.
„Serverul rulează, dar toți jucătorii au vârfuri de lag”: Uitați-vă mai întâi la rata de pachete a interfeței, nu la încărcarea procesorului. Dacă sar -n DEV 1 10 rămâne fără nimic ieșit din comun și se blochează totuși, cauza este de obicei un mod, o sv_maxRate exagerată sau pur și simplu prea mulți boți în rundă.
„Furnizorul meu anterior a blocat adresa mea IP”: Asta 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 ieșit din comun”: Dacă traficul este filtrat deja în rețeaua din față, pe server nu ajunge nimic, cum era de așteptat. Acesta este cazul normal la o filtrare funcțională. Invers este valabil: dacă conexiunea este saturată, este posibil să nu vă ajungă 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 invitat.
Pe scurt
- Un server Call of Duty clasic are nevoie de exact un port deschis: 28960 UDP. La Plutonium T6 este 4976 UDP, la Plutonium IW5 27016 UDP.
- Jocul, interogarea de stare și RCON se află la Call of Duty pe același port. Nu puteți separa RCON de joc printr-o regulă de port, pentru asta aveți nevoie de o regulă care se uită în conținutul pachetului.
- getstatus-reflection este vectorul de amplificare tipic acestui joc: 41 de octeți cererea, potrivit avertizării CISA TA14-017A factorul 63,9 la protocolul de rețea Quake, adică în jur de 2.600 de octeți răspunsul.
- Activați frâna de interogare:
sv_queryIgnoreMegs 4,sv_queryIgnoreTime 2000,sv_queryBounceIgnoreTime 12000. Pe multe servere este pe 0 și astfel oprită. - Setați
rcon_passworddoar dacă aveți într-adevăr nevoie de RCON: parola merge necriptată prin UDP și se poate ghici de oricâte ori, fără blocare de cont. - Porturile 20810 și 20800 ale serverului master sunt porturi de destinație la ieșire și nu au ce căuta în regulile dumneavoastră de permitere la intrare.
- De la aproximativ 1 Gbit/s sau de la câteva sute de mii de pachete pe secundă decide exclusiv rețeaua din fața serverului, nu mai configurația dumneavoastră.
Dacă serverul dumneavoastră rulează deja la KernelHost, filtrarea este activă fără să faceți nimic. 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 curs ne puteți contacta suplimentar prin chatul de urgență WhatsApp la +43 650 8209883.
Întrebări frecvente
De care porturi are nevoie un server Call of Duty?
Este valabil acest articol și pentru Warzone, Modern Warfare sau Black Ops 6?
Ce este getstatus-reflection la Call of Duty?
Serverul meu este folosit abuziv ca amplificator pentru atacuri asupra unor terți. Ce fac?
De ce este rcon_password un risc la Call of Duty?
Serverul meu Call of Duty este offline chiar acum. Cum recunosc un atac DDoS?
Mă pot apăra cu iptables sau UFW împotriva unui atac DDoS?
Serverul meu de la KernelHost trece offline în timpul unui atac?
Costă extra protecția DDoS și când am nevoie de Advanced DDoS Protection?
2026 KernelHost GmbH. Toate drepturile rezervate. Acest ghid este protejat de legea drepturilor de autor. Republicarea lui pe alte site-uri, integral, parțial sau în formă modificată, nu este permisă fără acordul nostru scris. Citatele cu indicarea sursei și cu link sunt binevenite.

