Ochrana serveru Call of Duty před DDoS útoky
Které porty server Call of Duty skutečně potřebuje, proč hra, dotazy a RCON leží na stejném portu, jak zmírnit reflexi getstatus a útoky na RCON a od jaké velikosti útoku pomůže už jen filtrace v síti před serverem.
Ochránit server Call of Duty před DDoS útoky je u klasických titulů příjemně konkrétní úkol: jde o přesně jeden UDP port, o hrst nastavení Dvar v souboru server.cfg a o jeden zesilovací vektor, který si engine nese od roku 2003. Server, který večer uprostřed kola ztratí všechny hráče naráz, má naopak jen zřídka problém s hardwarem. Většinou běží útok, a běží přesně tehdy, kdy je server plný.
Tento článek ukazuje nejprve, pro které tituly vůbec platí, potom, co si můžete bez dalších nákladů zabezpečit sami, dále, kde tato opatření technicky končí, a nakonec, co se potom musí odehrát v síti před serverem. Příkazy jsou psané pro Debian 12, Debian 13, Ubuntu 22.04 LTS a Ubuntu 24.04 LTS a předpokládají uživatele root, jako běžný uživatel před ně předřaďte sudo.
Pokud útok právě probíhá: teď neměňte nic v souboru server.cfg a server nerestartujte. Nejdřív si zajistěte naměřené hodnoty (viz oddíl „Logování“), po útoku už budou pryč.
Pro které tituly Call of Duty můžete server chránit před DDoS
Server Call of Duty můžete chránit před DDoS jen u titulů, které dovolují vlastní dedikované servery. To jsou originální verze Call of Duty (2003), Call of Duty United Offensive, Call of Duty 2, Call of Duty 4 Modern Warfare a Call of Duty World at War, k tomu komunitní platformy Plutonium (World at War, Black Ops, Black Ops II, Modern Warfare 3), IW4x (Modern Warfare 2) a CoD4X (Call of Duty 4). Všechny tyto tituly mají tentýž vzorec: soubor server.cfg, jeden otevřený UDP port a záznam ve veřejném seznamu serverů.
Pro moderní díly tento článek výslovně neplatí. Warzone, Modern Warfare (2019), Black Ops Cold War, Vanguard, Modern Warfare II, Modern Warfare III a Black Ops 6 žádné pronajímatelné dedikované servery neznají: partie běží na matchmakingové infrastruktuře Activisionu, neexistuje žádný soubor server.cfg, žádný prohlížeč serverů a žádný port, který byste mohli povolit nebo zabezpečit. Seznamy portů, které Activision pro tyto tituly zveřejňuje (mimo jiné TCP 3074 a 27014 až 27050 a dále UDP 3074, 3478 a 27000 až 27031), popisují porty klienta a platformy, ne porty serveru. Kdo má ve Warzone padající spojení, má problém na vlastní lince nebo problém u Activisionu, ale ne takový, který by vyřešil pronajatý server.
Proč jsou napadány právě servery Call of Duty
Servery Call of Duty spojují čtyři vlastnosti, které z nich dělají pohodlný cíl. Zaprvé každý vypsaný server zveřejňuje svou adresu sám: záznam v seznamu serverů obsahuje IP adresu a port v otevřeném textu, jinak by na něj nikdo nemohl vstoupit. Zadruhé běží veškerý provoz přes UDP, a UDP nezná navázání spojení, které by se dalo vyžadovat, adresy odesílatele se dají podvrhnout. Zatřetí engine odpovídá na stavové dotazy komukoli, aniž by musel kdokoli spustit hru. Začtvrté leží vzdálené ovládání RCON na stejném portu jako hra sama.
K tomu přistupuje sociální část: zabanovaní hráči, konkurence mezi klany, spory v komunitě, která se zná už roky. Útok nestojí toho, kdo ho spustí, ani schopnosti, ani znatelné peníze, takzvané služby booter a stresser se prodávají jako předplatné za několik eur měsíčně a zesilovací útoky přes herní servery tam patří ke standardní nabídce. Co je DDoS útok podrobně, vysvětluje článek Co je DDoS útok?.
Porty, o které ve skutečnosti jde
Klasický server Call of Duty zabírá přesně jeden UDP port, a to 28960. Na tomto jediném portu běží tři věci současně: herní provoz, stavové dotazy seznamu serverů a vzdálené ovládání RCON. Vlastní dotazovací port ani vlastní port pro RCON neexistují. Startovací řádek dedikovaného serveru vypadá u všech titulů stejně, liší se jen jméno spustitelného souboru:
+set dedicated 2 +set net_ip 0.0.0.0 +set net_port 28960 +set sv_maxclients 32 +exec server.cfg +map_rotate
| Titul nebo platforma | Služba | Port | Protokol |
|---|---|---|---|
| Call of Duty, United Offensive, Call of Duty 2, Call of Duty 4, World at War | hra, dotazy a RCON společně | 28960 | UDP |
| Další instance na stejném stroji | hra, dotazy a RCON společně | 28961 až 28970 | UDP |
| Plutonium T4 (World at War) | hra, dotazy a RCON společně | 28960 | UDP |
| Plutonium T5 (Black Ops) | hra, dotazy a RCON společně | 28960 | UDP |
| Plutonium T6 (Black Ops II) | hra, dotazy a RCON společně | 4976 | UDP |
| Plutonium IW5 (Modern Warfare 3) | hra, dotazy a RCON společně | 27016 | UDP |
| IW4x (Modern Warfare 2) | hra, dotazy a RCON společně | 28960 | UDP |
| t7x (Black Ops III) | hra, dotazy a RCON společně | 27017 | UDP |
| Master server Call of Duty 4 (odchozí) | seznam a autorizace | 20810 a 20800 | UDP |
| Master server Call of Duty 2 (odchozí) | seznam a autorizace | 20710 a 20700 | UDP |
| Master server Call of Duty 1 (odchozí) | seznam a autorizace | 20510 a 20500 | UDP |
| IW4MAdmin | webové rozhraní pro administraci | 1624 | TCP |
| SSH | přístup k serveru | 22 | TCP |
Porty master serverů do vašich povolení ve firewallu nepatří. 20810 a 20800 jsou cílové porty na druhé straně, ne naslouchající porty na vašem stroji: váš server se ozve seznamu sám. Mnoho návodů na uvolnění portů přesto radí otevřít je pro příchozí provoz. To zvětšuje útočnou plochu bez jakékoli protihodnoty.
Běžné řádové hodnoty u Call of Duty
Druhá tabulka je důležitější, pokud chcete odhadnout, jestli to ještě zvládnete vlastními silami. Staví běžnou zátěž plného serveru proti číslům, o která jde při útoku.
| Ukazatel | Hodnota |
|---|---|
Odchozí rychlost na hráče (běžná hodnota sv_maxRate) |
25 000 bajtů za sekundu |
| Odchozí zátěž při 32 obsazených slotech | zhruba 800 kilobajtů za sekundu, tedy asi 6,4 Mbit/s |
| Linka typického herního serveru | 1 Gbit/s, odpovídá 125 megabajtům za sekundu |
| Paketová rychlost na 1 Gbit/s při velikosti paketu 64 bajtů | zhruba 1,49 milionu paketů za sekundu |
Velikost dotazu getstatus na lince |
41 bajtů (20 bajtů hlavička IP, 8 bajtů hlavička UDP, 13 bajtů datová část) |
| Faktor zesílení síťového protokolu Quake podle výstrahy CISA TA14-017A | 63,9 |
Odpověď na dotaz getstatus, z toho spočítaná |
zhruba 2 600 bajtů |
Vestavěná horní mez CoD4X pro getstatus |
20 odpovědí za 20 sekund |
Vestavěná horní mez CoD4X pro getinfo |
100 odpovědí za 100 sekund |
| Záplava UDP proti hernímu serveru odfiltrovaná u KernelHost | více než 112,2 Gbit/s |
| Útok proti hlasovému serveru odfiltrovaný u KernelHost | více než 473,4 Gbit/s při více než 41,5 milionu paketů za sekundu |
Proč hra, dotazy a RCON leží na stejném portu
To je pro Call of Duty rozhodující zvláštnost. Engine id Tech 3, na které stojí všechny klasické tituly Call of Duty, nezná oddělené porty pro hru, dotaz a vzdálené ovládání. Všechno běží přes takzvané pakety bez spojení na tom jediném UDP portu. Paket bez spojení je UDP paket, který začíná čtyřmi bajty 0xFF a za nimi nese jméno příkazu v otevřeném textu: getstatus, getinfo, getchallenge, connect nebo rcon.
Praktický důsledek je nepříjemný: RCON nemůžete firewallem oddělit od hry, aniž byste zavřeli i hru. Pravidlo na portu 28960 zasáhne vždycky všechno. Kdo chce cíleně vytřídit záplavy dotazů a útoky na RCON, musí se podívat do obsahu paketu, a ne jen na číslo portu. Právě proto narazí pravidla firewallu založená na portech u Call of Duty na svou hranici dřív než u her s odděleným dotazovacím portem.
Co je reflexe getstatus u Call of Duty?
Reflexe getstatus je zesilovací útok, při kterém útočník posílá malé stavové dotazy s podvrženou adresou odesílatele na mnoho herních serverů, aby jejich výrazně větší odpovědi dopadly na skutečnou oběť. Herní servery přitom nejsou cílem, ale zesilovačem. Tento vektor je u engine id Tech 3 dokumentovaný už více než deset let a týká se Call of Duty stejně jako Quake 3 a jeho ostatních odnoží.
Zasáhne vás to dvojitě, ze dvou stran. Jako napadený dostanete záplavu dotazů getstatus, které spotřebovávají výpočetní čas a odchozí šířku pásma, a vaši hráči to poznají jako lag špičky. Jako nedobrovolný zesilovač rozesíláte odpovědi cizí oběti a stížnost na zneužití (abuse) přijde vám. Obojí se děje na stejném portu, se stejnými pakety, a obojí vypadá v grafu vytížení zprvu bezvýznamně.
Jak vypadá paket getstatus
Dotaz se skládá ze čtyř bajtů 0xFF a slova getstatus, celkem 13 bajtů datové části. S hlavičkou IP a UDP je to 41 bajtů na lince. Přesně na to míří kontrola délky v pravidlech firewallu, která si fóra Call of Duty předávají už roky:
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
Odpověď je nesrovnatelně větší. Jedna odpověď statusResponse obsahuje celou konfiguraci serveru jako řetězec plus jeden řádek na každého připojeného hráče, u plného serveru tedy několik kilobajtů. CISA vede síťový protokol Quake ve svém přehledu zesilovacích útoků přes UDP (TA14-017A) s faktorem zesílení 63,9 a jako zneužívaný příkaz výslovně jmenuje výměnu informací o serveru. Z 1 Mbit/s podvržených dotazů se tak u oběti stane zhruba 64 Mbit/s. Pro srovnání: DNS leží ve stejném přehledu mezi 28 a 54, NTP na 556,9.
Vestavěná brzda: sv_queryIgnoreTime a sv_queryIgnoreMegs
Call of Duty 4 má od serverové verze 1.7 vestavěnou brzdu na dotazy. Pamatuje si každou adresu, která poslala stavový dotaz, a další dotazy z téže adresy po nastavitelnou dobu ignoruje. Řídí to čtyři nastavení Dvar s těmito výchozími hodnotami:
sv_queryIgnoreMegs 1
sv_queryIgnoreTime 2000
sv_queryBounceIgnoreTime 12000
sv_queryIgnoreDebug 0
sv_queryIgnoreMegs určuje, kolik operační paměti smí zabrat seznam ignorovaných adres. 1 megabajt pojme zhruba 65 000 adres, každý další megabajt asi 87 000 dalších. Hodnota 0 brzdu úplně vypíná, a přesně tak to na mnoha serverech je, protože konfigurace pochází ze staré šablony. sv_queryIgnoreTime je doba blokace v milisekundách. sv_queryBounceIgnoreTime zabírá, když se vrátí odpověď „ICMP Port Unreachable“, tedy právě tehdy, když je váš server zneužíván jako zesilovač proti cizí oběti. sv_queryIgnoreDebug 1 zapisuje zásahy do logu, abyste vůbec viděli, jestli se něco děje.
Kdo používá CoD4X, má navíc pevné horní meze v kódu serveru: nejvýše 20 odpovědí getstatus za 20 sekund, nejvýše 100 odpovědí getinfo za 100 sekund a nejvýše jednu chybovou hlášku RCON za 100 milisekund. Komentář ve zdrojovém kódu záměr pojmenovává jasně: server se klidně smí nechat zaplavit, ale nemá při tom plýtvat odchozí šířkou pásma. To je správné nastavení priorit, filtraci před serverem to ale nenahradí.
Proč je RCON u Call of Duty historicky problém
RCON je vzdálené ovládání serveru a u Call of Duty je to nešifrovaný UDP paket na herním portu. Příkaz RCON vypadá na lince takto: čtyři bajty 0xFF, pak slovo rcon, pak heslo v otevřeném textu, pak samotný příkaz. Neexistuje žádné šifrování, žádná relace, žádný uživatelský účet a žádný druhý faktor. Z toho plynou tři problémy, a všechny jsou reálné:
- Odposlech. Kdo provoz kdekoli na cestě vidí, čte vaše heslo k RCON v otevřeném textu. Platí to pro každou síť mezi vámi a serverem a pro každý nástroj, kterému heslo dáte.
- Hádání. Neexistuje žádné přihlášení, které by se dalo zablokovat, ani zamčení účtu po deseti neúspěšných pokusech. Útočník zkouší hesla libovolnou rychlostí. Originální server to nebrzdí vůbec, CoD4X brzdí jen odpověď na jednu chybovou hlášku za 100 milisekund a pokus zapíše do logu jako „Bad rcon“.
- Reflexe. I chybová hláška RCON je odpověď na podvržený paket. Kdo váš server ostřeluje podvrženými pakety RCON, používá ho jako malý zesilovač, a váš server si přitom zaplňuje log.
Praktický důsledek: nastavujte rcon_password jen tehdy, když RCON skutečně potřebujete. Pokud ano, pak dlouhé a náhodné. CoD4X vyžaduje nejméně osm znaků, to je dolní hranice, ne doporučení. V běžném provozu spravujte server přes SSH a serverovou konzoli místo přes RCON z otevřené sítě. A pokud provozujete správcovský nástroj jako IW4MAdmin, který sám mluví přes RCON, jeho webové rozhraní na portu 1624 do otevřené sítě nepatří.
Co můžete udělat sami, než utratíte peníze
Tento oddíl je nejdelší, a to záměrně. Čistě nakonfigurovaný server Call of Duty ustojí malé a střední útoky vlastními silami, nezávisle na tom, u koho stojí.
1. Inventura: co vůbec naslouchá?
Než napíšete jediné pravidlo, podívejte se, co váš server nabízí navenek. Nehádat, podívat se:
ss -lntup
Zajímavý je sloupec s lokální adresou. 0.0.0.0:28960 a [::]:28960 znamenají „dosažitelné z celého internetu“, 127.0.0.1:3306 znamená „jen lokálně“ a nepotřebuje žádné pravidlo firewallu. Vedle hry se tam často objevují IW4MAdmin, webový server pro Fast Download, databáze pro statistiky a zapomenutá druhá instance hry. Pohled útočníka poskytne sken portů zvenčí:
nmap -Pn -sU -p 28960-28970,4976,27016 VASE.IP.ADRESA.SERVERU
nmap -Pn -p- --min-rate 1000 VASE.IP.ADRESA.SERVERU
2. Nechat otevřené jen to, co hra skutečně potřebuje
Jednomu serveru Call of Duty stačí jediné povolení navenek, všechno ostatní se omezí nebo se vůbec nezveřejní. S UFW to vypadá takto, a to přesně v tomto pořadí, abyste se sami nevyzamkli:
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
Nahraďte 203.0.113.10 svou vlastní adresou. U Plutonium T6 nastupuje na místo 28960/udp port 4976/udp, u Plutonium IW5 je to 27016/udp. Provozujete-li několik instancí, povolte výhradně skutečně používaný rozsah, tedy například 28960:28962/udp, a ne paušálně 28960 až 28970. Každý port, na kterém nic nenaslouchá, sice není vstupní branou, ale při útoku stejně stojí jádro práci. Úplný návod včetně záchranné cesty najdete v článku Jak nastavit firewall UFW, aniž byste se sami vyzamkli.
3. Zapnout brzdu na dotazy v souboru server.cfg
Tyto čtyři řádky patří do každého souboru server.cfg serveru Call of Duty 4 a nestojí nic než několik megabajtů operační paměti:
set sv_queryIgnoreMegs "4"
set sv_queryIgnoreTime "2000"
set sv_queryBounceIgnoreTime "12000"
set sv_queryIgnoreDebug "0"
4 megabajty pojmou zhruba 326 000 adres, to stačí i na vážnou záplavu. Hodnotu sv_queryIgnoreTime zvyšujte nad výchozích 2000 milisekund jen opatrně: seznam serverů a každý prohlížeč serverů se vás ptají stejným mechanismem, a kdo nastaví dobu blokace příliš vysoko, ze seznamu zmizí. Nastavte sv_queryIgnoreDebug dočasně na 1, pokud chcete vědět, jestli brzda vůbec zabírá, a potom zase na 0, aby vám log nezaplnil disk.
4. Vytřídit záplavy dotazů ve firewallu
Brzda v engine působí teprve tehdy, když paket dorazil do herního procesu. Pravidlo firewallu rozhoduje dřív a stojí méně. Tyto dva řádky omezují getstatus podle zdrojové adresy:
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
První řádek si pamatuje každou zdrojovou adresu, která pošle paket v typické délce stavového dotazu. Druhý zahodí každý další dotaz getstatus, jakmile táž adresa poslala během dvou sekund více než čtyři. Čtyři dotazy za dvě sekundy stačí každému prohlížeči serverů. Po fórech kolují i varianty s 20 dotazy za sekundu, které jsou výrazně velkorysejší a působí spíš proti hrubým botům než proti čisté reflexní vlně.
Samotná pravidla iptables jsou po restartu pryč, na Debianu a Ubuntu se ukládají takto:
apt-get install -y iptables-persistent
netfilter-persistent save
Pod UFW patří taková pravidla do /etc/ufw/before.rules, protože jinak při příštím ufw reload zmizí. Zkontrolujte pak pomocí iptables -L INPUT -n -v, jestli stoupají čítače zásahů. Zůstávají-li na nule, pravidlo se nedostane ke slovu.
5. RCON vypnout nebo pevně omezit
Nejbezpečnější přístup k RCON je ten, který neexistuje. Prázdné rcon_password odmítne každý paket RCON:
set rcon_password ""
Všimněte si přitom jedné drobnosti: server i pak ještě odpovídá, totiž chybovou hláškou, a zůstává tím malým zesilovačem. Kdo to chce vyloučit a RCON tak jako tak potřebuje jen z jedné pevné adresy, zahodí pakety už dřív:
iptables -A INPUT -p udp --dport 28960 ! -s 203.0.113.10 -m string --algo bm --string "rcon " -j DROP
Toto pravidlo má vedlejší účinek, o kterém byste měli vědět: řetězec rcon se teoreticky může objevit i v chatovém paketu připojeného hráče a ten paket by byl také zahozen. V praxi se to dá přejít. Kdo ten vedlejší účinek nechce, pravidlo vynechá a pracuje jen s prázdným nebo velmi dlouhým heslem.
6. Odrazit záplavu připojení a vyčerpání slotů
Záplava připojení nemíří na linku, ale na herní logiku: útočník posílá v rychlém sledu pakety getchallenge a connect, dokud nejsou všechny sloty obsazené nedokončenými spojeními. Skuteční hráči pak dostanou „Server is full“, přestože ve hře nikdo nestojí. Proti tomu působí tato nastavení:
set sv_maxclients "32"
set sv_reconnectLimit "3"
set sv_floodProtect "1"
set sv_connectTimeout "30"
set sv_timeout "120"
sv_reconnectLimit omezuje, jak často se smí tentýž hráč po sobě znovu připojit. sv_floodProtect omezuje, kolik příkazů klienta server zpracuje na jednoho hráče, a brání tím tomu, aby jediný klient zahltil server příkazy. sv_connectTimeout a sv_timeout určují, jak dlouho blokuje slot nedokončené, respektive mlčící spojení: kdo tu nechá stát velkorysé hodnoty ze staré šablony, usnadní útočníkovi vyčerpání slotů.
U CoD4X k tomu přistupuje sv_authorizemode. Hodnota 1 pustí dovnitř jen hráče s platnou kopií, 0 jen hráče bez ní a -1 oba. Kdo nastaví 1, vyloučí velkou část jednorázových klientů, ztratí ale i skutečné hráče bez originální kopie. Nejtvrdším prostředkem je heslo serveru přes g_password, které působí proti všemu, co používá regulérní cestu připojení. A jedno musí být jasné: heslo chrání vaši herní logiku, ne vaši linku. Útočník, který váš server zaplavuje, se vůbec nechce připojit. Jeho pakety budou odmítnuty, ale stejně už dorazily, a přesně o to jde.
7. Záznam v seznamu serverů a vaše vlastní adresa
Tady se vyplatí poctivost místo zbožných přání: vaši IP adresu nelze udržet v tajnosti. Zná ji každý hráč, který se jednou připojil, a záznam v seznamu ji tak jako tak zveřejňuje, i s portem. Záznam můžete vypnout tím, že v souboru server.cfg nenastavíte žádný master server (příslušná nastavení se jmenují sv_master1, sv_master2 a tak dále). To ale stojí veškerou viditelnost pro nové hráče a pomůže jen proti tomu nejpohodlnějšímu ze všech útočníků.
Poznámka ke stavu seznamů: původní master servery Activisionu (codmaster.activision.com na 20510, cod2master.activision.com na 20710, cod4master.activision.com na 20810) už pro staré tituly nic neodpovídají. Kdo chce být dnes vypsaný, používá komunitní seznamy: CoD4X provozuje vlastní a vyžaduje k tomu token v sv_authtoken, Plutonium si přináší vlastní seznam serverů. Na věci samé to nic nemění, adresa tam stojí stejně v otevřeném textu.
Dva zvyky přesto zabírají. Nezveřejňujte surovou IP adresu nikde sami, tedy ani na kanálu Discordu, ani na stránce klanu. A připojujte své hráče přes jméno hostitele, abyste v nouzi mohli adresu vyměnit, aniž by se rozbily všechny odkazy. Klasikou je přitom zapomenutý záznam A na starou adresu: znehodnotí každou výměnu.
8. Vzít webová rozhraní, databázi a Fast Download z otevřené sítě
Kromě hry běží na většině serverů Call of Duty ještě další věci: IW4MAdmin se svým webovým rozhraním na portu 1624, webový server pro Fast Download map, někdy databáze pro statistiky. Každá z těchto služeb je vlastní útočná plocha a žádná z nich do otevřené sítě bez omezení nepatří.
Omezte 1624 na svou vlastní adresu, nebo se k rozhraní dostaňte přes přesměrování portu v SSH a otevřete pak lokálně http://127.0.0.1:1624:
ssh -N -L 1624:127.0.0.1:1624 root@VASE.IP.ADRESA.SERVERU
Databázi navažte na 127.0.0.1, v otevřené síti nemá v žádném případě co dělat. A položte Fast Download na vlastní webový server místo do herního procesu: webový server pod zátěží jinak bere hře přesně ten výpočetní čas, který potřebuje pro simulaci.
9. Logování, abyste v nouzi měli data
Nejdůležitější krok je ten, který skoro nikdo neudělá předem: založit si srovnávací základnu, dokud všechno běží normálně. Bez normální hodnoty nedokážete po incidentu říct, jestli bylo 40 000 paketů za sekundu hodně, nebo jestli to byl prostě pátek večer. S apt-get install -y vnstat sysstat běží měření trvale. Během incidentu stačí čtyři příkazy:
sar -n DEV 1 10
ip -s link show eth0
dmesg -T | tail -50
tcpdump -ni eth0 udp port 28960 -c 200 -q
U Call of Duty existuje pátý, který odpovídá na rozhodující otázku. Tento záznam ukazuje výhradně pakety bez spojení, tedy přesně getstatus, getinfo, getchallenge, connect a rcon:
tcpdump -ni eth0 'udp port 28960 and udp[8:4] = 0xffffffff' -c 200 -A
Stojí-li tam stokrát getstatus ze stále nových adres, máte záplavu dotazů. Stojí-li tam rcon, někdo se snaží uhodnout vaše heslo. Stojí-li tam jen getchallenge a connect, jde o záplavu připojení. U tcpdump platí vždy: omezit pomocí -c, záznam při plném zatížení dodatečně zatěžuje už tak přetížený server. Jak naměřené hodnoty vyhodnotit, stojí v článku Jak poznat DDoS útok.
Kde tato opatření končí
Teď část, kterou nevyřeší žádný konfigurační soubor. Všechna dosavadní opatření běží na vašem serveru, tedy na konci linky. Pravidlo firewallu rozhoduje o paketu, který už po kabelu proběhl. Můžete ho zahodit, ale nemůžete ho udělat neodeslaným.
Spočítejte si to jednou. Plný server s 32 sloty vytváří odchozím směrem zhruba 6,4 Mbit/s, to je méně než procento gigabitové linky. Stejná linka je plná, jakmile někdo pošle 125 megabajtů za sekundu, a přesně na to jsou útoky, které se dají objednat za deset eur měsíčně, postavené. Jestli je vaše pravidlo iptables za tím dobré, už pak nehraje roli, protože pakety vašich hráčů se neprotlačí už dřív.
Druhou veličinou je paketová rychlost a u Call of Duty udeří pravidelně dřív než šířka pásma. U malých paketů o velikosti 64 bajtů se do linky s 1 Gbit/s vejde zhruba 1,49 milionu paketů za sekundu. Běžné jádro serveru jich podle CPU a síťové karty zpracuje několik set tisíc, než začne zahazovat. Dotaz getstatus je se 41 bajty ještě menší: útok, který vaši linku nezaplní ani do třetiny, přesto váš server položí, protože veškerý výpočetní čas padne na zahazování. Provozovatelé to zažívají jako „vytížení přece vůbec nebylo vysoké, a stejně bylo všechno pryč“.
U Call of Duty k tomu přistupuje zvláštnost, která výpočet zpřísňuje. Protože hra, dotazy a RCON leží na stejném portu, nemůžete 28960 v nouzi zavřít: bylo by to totéž, jako byste server vypnuli. A protože engine odpovídá na každý stavový dotaz násobkem velikosti dotazu, spotřebuje útočník na stejný účinek méně vlastní šířky pásma než u jiných her.
Pro zařazení, jaké řádové hodnoty se reálně vyskytují: na serverech KernelHost byl mimo jiné odfiltrován útok s více než 473,4 Gbit/s při více než 41,5 milionu paketů za sekundu na hlasový server a záplava UDP s více než 112,2 Gbit/s na herní server. Na to neexistuje žádné lokální nastavení. Volumetrické útoky musí skončit v síti před serverem.
Co proti tomu staví KernelHost
Trvalá ochrana, která je v ceně každého serveru
Ochrana proti DDoS od KernelHost je postavená dvoustupňově a je trvale aktivní, aniž byste museli cokoli zapínat, objednávat nebo konfigurovat:
- Stupeň 1: 17 Tbps mitigační kapacity v globální scrubbingové síti. Volumetrické útoky se čistí blízko svého zdroje, ještě než dorazí do datacentra.
- Stupeň 2: filtrace Arbor v reálném čase s 3,2 Tbps ve Frankfurtu nad Mohanem. Přímo před serverem se rozpoznávají a zahazují vzory specifické pro jednotlivé protokoly, paket po paketu.
Rozhodující jsou dvě vlastnosti. Ochrana běží trvale a nemusí na útok teprve reagovat, nejsou tedy žádné minuty na začátku, kdy je server pryč. A nepoužívá se nullrouting: vaše IP adresa zůstává v síti, zahazují se jen škodlivé pakety. Kdo IP adresu ze sítě stáhne, dosáhne pro vás stejného výsledku jako útočník. Které hry a protokoly jsou pokryté, vypisuje článek Ochrana herních serverů proti DDoS v reálném čase.
Advanced DDoS Protection pro trvale ostřelované projekty
Některé klany a komunity nejsou napadány příležitostně, ale cíleně a celé týdny. Pro ně existuje Advanced DDoS Protection od 50,00 EUR měsíčně, PrePaid a bez minimální doby trvání. Rozdíl neleží ve větší kapacitě, ale v kontrole:
- Dedikovaná chráněná IP z frankfurtského jádra, na kterou se váš server ve vlastní síti přepne. Na vaší straně není žádná přestavba nutná.
- Vlastnoručně spravovatelná ochranná pravidla podle portu a protokolu v zákaznické sekci: nastavíte, co je povolené na 28960 UDP, aniž byste k tomu museli psát ticket, a při více instancích odděleně pro každý port.
- Změny se projeví v reálném čase, můžete tedy doladit nastavení i během probíhajícího útoku.
- Ochranný profil odpovídající dané hře, stejně tak pro upravené a vlastní aplikace na libovolných TCP nebo UDP portech. To je pro Plutonium a CoD4X ten podstatný bod, protože jejich porty se mohou od výchozích hodnot odchylovat.
Advanced DDoS Protection je určená serverům, které stojí u KernelHost. Pokud váš server Call of Duty běží momentálně jinde a je tam pravidelně stahován ze sítě, je cestou, která něco změní, přesun ke KernelHost.
Srovnání obou stupňů
| Vlastnost | Zahrnutá trvalá ochrana proti DDoS | Advanced DDoS Protection |
|---|---|---|
| Cena | obsažena v každém serverovém balíčku, bez příplatku | od 50,00 EUR měsíčně, PrePaid |
| Filtrační kapacita | 17 Tbps globální scrubbing plus filtrace Arbor v reálném čase s 3,2 Tbps ve Frankfurtu nad Mohanem | stejná dvoustupňová filtrace |
| IP adresa | IP adresa vašeho serveru | navíc dedikovaná chráněná IP |
| Sada pravidel | automatické profily, žádná konfigurace není nutná | vlastní pravidla podle portu a protokolu v zákaznické sekci |
| Změny | probíhají automaticky | projeví se v reálném čase, i během útoku |
| Herní profil | optimalizované profily pro běžné hry | profil odpovídající hře, i pro Plutonium, CoD4X a vlastní porty |
| Nullrouting | ne | ne |
| Doba trvání | vázaná na serverový balíček | PrePaid, žádná minimální doba trvání, žádná výpovědní lhůta, žádný zřizovací poplatek |
Většině serverů Call of Duty stačí zahrnutá trvalá ochrana spolu s čistým souborem server.cfg. Advanced DDoS Protection je odpovědí na to, že si to někdo vzal osobně.
Časté chyby a jejich řešení
„Vyměnil jsem IP adresu a za dvě hodiny jsem byl znovu offline“: útočník má novou adresu ze stejného zdroje jako starou, většinou ze záznamu v seznamu, z Discord bota se stavovým ukazatelem nebo ze starého záznamu DNS. Výměna adresy je zisk času, ne řešení.
„Poskytovatel mi posílá hlášení o zneužití, přitom jsem přece oběť“: pak váš server není cíl, ale zesilovač. Někdo posílá podvržené dotazy getstatus a váš server poslušně odpovídá cizí oběti. Zkontrolujte nejdřív, jestli sv_queryIgnoreMegs nestojí na 0, a nastavte ta čtyři nastavení Dvar pro dotazy i pravidlo firewallu z oddílu 4.
„Server je v seznamu vypsaný jako plný, ale je prázdný“: to je záplava připojení a zasahuje herní logiku, ne linku. Proti tomu působí sv_reconnectLimit, kratší hodnoty pro sv_connectTimeout a sv_timeout a v případě nouze heslo serveru.
„Server během útoku mizí ze seznamu serverů“: to je následek, ne příčina. Seznam serverů si přes tytéž stavové dotazy ověřuje, jestli váš server žije. Pokud odpovědi neprojdou nebo je zahodila vaše vlastní brzda, považuje se server za offline. Zkontrolujte, jestli sv_queryIgnoreTime nestojí příliš vysoko, než začnete podezírat firewall.
„Moje pravidla iptables nezabírají“: časté jsou tři příčiny. Pravidla stojí až za řetězci UFW a nikdy se na ně nedojde, po posledním restartu byla pryč (pak pomůže netfilter-persistent save nebo záznam v /etc/ufw/before.rules), nebo je útok volumetrický a pravidlo pracuje správně na lince, která je už plná. Zkontrolujte pomocí iptables -L INPUT -n -v, jestli stoupají čítače zásahů.
„Server běží, ale všichni hráči mají lag špičky“: podívejte se nejdřív na paketovou rychlost rozhraní, ne na vytížení CPU. Zůstává-li sar -n DEV 1 10 nenápadný a přesto to seká, bývá za tím mod, přestřelená sv_maxRate nebo jednoduše příliš mnoho botů v kole.
„Můj dosavadní poskytovatel zablokoval moji IP adresu“: to je nullrouting. Poskytovatel tím chrání vlastní síť, pro vás je výsledek totožný s úspěšným útokem, většinou ještě hodiny poté. V případě pochybností se ptejte, zda se filtruje, nebo nulluje. Odpověď rozhoduje o vaší dostupnosti víc než jakýkoli údaj o hardwaru.
„V tcpdump nevidím nic nápadného“: když se provoz filtruje už v síti před serverem, na server podle očekávání nic nedorazí. To je při funkční filtraci normální stav. Naopak platí: je-li linka nasycená, nemusí se k vám dostat ani SSH relace, kterou jste chtěli měřit. Použijte pak VNC konzoli v zákaznické sekci, která funguje nezávisle na síti hostovaného systému.
Stručné shrnutí
- Klasický server Call of Duty potřebuje přesně jeden otevřený port: 28960 UDP. U Plutonium T6 je to 4976 UDP, u Plutonium IW5 27016 UDP.
- Hra, stavový dotaz a RCON leží u Call of Duty na stejném portu. RCON nemůžete od hry oddělit pravidlem podle portu, k tomu potřebujete pravidlo, které se dívá do obsahu paketu.
- Reflexe getstatus je zesilovací vektor typický pro tuto hru: 41 bajtů dotaz, podle výstrahy CISA TA14-017A faktor 63,9 u síťového protokolu Quake, tedy zhruba 2 600 bajtů odpověď.
- Zapněte brzdu na dotazy:
sv_queryIgnoreMegs 4,sv_queryIgnoreTime 2000,sv_queryBounceIgnoreTime 12000. Na mnoha serverech stojí na 0 a je tím vypnutá. - Nastavujte
rcon_passwordjen tehdy, když RCON skutečně potřebujete: heslo běží nešifrovaně přes UDP a dá se bez zamčení účtu hádat libovolně dlouho. - Porty master serverů 20810 a 20800 jsou odchozí cílové porty a do vašich příchozích povolení nepatří.
- Od asi 1 Gbit/s nebo několika set tisíc paketů za sekundu rozhoduje výhradně síť před serverem, a ne už vaše konfigurace.
Běží-li váš server už u KernelHost, je filtrace aktivní, aniž byste museli cokoli dělat. Pokud přesto zaznamenáte nesrovnalosti, otevřete ticket na podporu, aby se filtrační pravidla pro vaši IP adresu doladila. Během probíhajícího útoku nás navíc zastihnete přes nouzový chat na WhatsAppu na čísle +43 650 8209883.
Časté dotazy
Které porty potřebuje server Call of Duty?
Platí tento článek i pro Warzone, Modern Warfare nebo Black Ops 6?
Co je reflexe getstatus u Call of Duty?
Můj server je zneužíván jako zesilovač útoků na třetí strany. Co dělat?
Proč je rcon_password u Call of Duty riziko?
Můj server Call of Duty je právě offline. Jak poznám DDoS útok?
Můžu se proti DDoS útoku bránit pomocí iptables nebo UFW?
Půjde můj server u KernelHost během útoku offline?
Stojí ochrana proti DDoS něco navíc a kdy potřebuji Advanced DDoS Protection?
2026 KernelHost GmbH. Všechna práva vyhrazena. Tento návod je chráněn autorským právem. Jeho zveřejnění na jiných webech, a to i po částech nebo v upravené podobě, není bez našeho písemného souhlasu dovoleno. Citace s uvedením zdroje a odkazem jsou výslovně vítány.

