Ochrana serveru Unturned před DDoS útoky

Publikováno 21 min čtení

Které porty server Unturned skutečně potřebuje, proč je 27017 od roku 2021 zbytečný, jak omezit záplavu dotazů, záplavu připojení a zátěž z pluginů, a od jaké velikosti útoku pomůže už jen filtrace v síti před serverem.

Server Unturned, který večer na několik minut zmizí ze seznamu serverů a přitom vyhodí všechny hráče s vypršením časového limitu, má jen zřídka problém s hardwarem. Většinou běží útok, a to přesně ve chvíli, kdy je na serveru nejvíc hráčů. Tento článek nejprve ukazuje, co si můžete bez dalších nákladů zabezpečit sami, poté, kde tato opatření technicky končí, a nakonec, co se musí odehrát v síti před serverem.

Všechny údaje se vztahují k dedikovanému serveru Unturned (U3DS, aplikace SteamCMD 1110390) na Debianu 12, Debianu 13, Ubuntu 22.04 LTS nebo Ubuntu 24.04 LTS. Příkazy jsou psané pro uživatele root, jako běžný uživatel před ně předřaďte sudo. Pokud útok právě probíhá, neměňte zatím nic v konfiguraci a server nerestartujte: nejdřív si zajistěte naměřené hodnoty (oddíl 10), po útoku už budou pryč.

Proč jsou napadány právě servery Unturned

Servery Unturned jsou napadány proto, že jejich adresa je veřejná, herní provoz jde přes UDP a útok nestojí toho, kdo ho spustí, ani schopnosti, ani znatelné peníze. Všechny tři body zde platí silněji než u většiny ostatních her.

Veřejný server Unturned zveřejňuje svou IP adresu sám od sebe. Musí to udělat, jinak by ho nikdo nenašel: prohlížeč serverů ve Steamu se ho ptá přímo a seznamy třetích stran jako unturned-servers.net nebo BattleMetrics vedou IP adresu i port v otevřeném textu. unturned-servers.net podle vlastního údaje každých pět minut kontroluje, zda server na serverovém portu přijímá UDP spojení. Pro útočníka to není námaha, ale formulář.

K tomu přistupuje hráčská základna. Unturned je zdarma, vstupní překážka je nulová a mezi roleplay a survival projekty existuje skutečná konkurence o tytéž hráče. Zabanovaný hráč, dotčený bývalý administrátor nebo sousední projekt nepotřebují přístup k vašemu serveru, aby ho na hodinu udělali nepoužitelným. Co je DDoS útok technicky a proč ho podvržené adresy odesílatele činí tak obtížně dohledatelným, vysvětluje článek Co je DDoS útok?.

Porty, o které ve skutečnosti jde

Server Unturned zabírá přesně dva po sobě jdoucí UDP porty: hodnotu nastavenou v Commands.dat a tuto hodnotu plus jedna. Ve výchozím nastavení jsou to 27015 a 27016. Oficiální dokumentace studia Smartly Dressed Games popisuje rozdělení takto: první port nese dotazy ze seznamu serverů, druhý herní provoz. Nastavuje se jen první, druhý z něj vyplývá automaticky.

Name Muj server Unturned
Port 27015
MaxPlayers 24
Map PEI
Mode Normal
Perspective Both
Owner 76561198000000000

Soubor Commands.dat leží v U3DS/Servers/<instance>/Server/Commands.dat. Jeho formát je svérázný a bývá častým zdrojem chyb: jeden příkaz na řádek, žádné rovnítko, hodnota oddělená mezerou, a příkazy rozlišují velká a malá písmena. Řádky, které začínají na //, jsou komentáře.

Nejdůležitější bod pro firewall zní: port 27017 už není od verze 3.21.30.0 z 21. listopadu 2021 potřeba. Předtím vyžadoval server Unturned tři porty, protože dotaz Steamu ležel na portu plus dva. Touto aktualizací se dotaz dělí o port se samotným serverem a třetí port odpadl. Návody k routerům, wiki hostingů a příspěvky na fórech přesto 27017 uvádějí až dodnes. Otevřený 27017 vám už žádnou výhodu nepřinese, je to čistě jen útočná plocha.

Stejně důležité: Unturned nemá vestavěný RCON port. Oficiální dokumentace zná jen vstup a výstup konzole, které se dají nahradit přes rozhraní ICommandInputOutput. Každá vzdálená správa, kterou na serveru Unturned uvidíte, pochází z pluginu a přináší si vlastní TCP port. Tento port si musíte najít a omezit sami, protože ho za vás nikdo nezabezpečil.

Ukazatel Hodnota (výchozí nastavení) Protokol Kde se nastavuje
Dotazovací port (Steam A2S, seznam serverů) 27015 UDP Port v Commands.dat
Herní port 27016 (port plus jedna) UDP nelze nastavit samostatně
Třetí port 27017 odpadá od 3.21.30.0 (21. 11. 2021) žádný zavřít
Druhý server na stejném stroji 27017, třetí 27019 UDP Port, odstup dva
RCON žádný vestavěný port TCP jen přes plugin konfigurace pluginu
Vazebná adresa všechna rozhraní žádný Bind v Commands.dat
Pakety na hráče a sekundu 50,0 UDP Max_Packets_Per_Second
Maximální povolený ping 750 ms žádný Max_Ping_Milliseconds
Rychlost připojování na časové okno 10 pokusů za 40,0 sekundy žádný Rate_Limit_Kick_Threshold
Čekací fronta 8 míst, nejvýše 64 žádný Queue_Size v Commands.dat
Anti-cheat VAC a BattlEye, oba aktivní žádný VAC_Secure, BattlEye_Secure
Faktor zesílení dotazu Steamu 5,5 (US-CERT TA14-017A) UDP vlastnost protokolu
Normální příchozí paketová rychlost při 24 hráčích zhruba 1 200 paketů za sekundu UDP 24 krát 50
Nasycení linky 1 Gbit/s 125 MB/s, zhruba 1,49 milionu paketů za sekundu při 64 bajtech žádný fyzika linky
Útoky odfiltrované na serverech KernelHost 473,4 Gbit/s při 41,5 milionu paketů za sekundu; UDP flood se 112,2 Gbit/s UDP naměřené hodnoty z provozu

Co můžete udělat sami, než utratíte peníze

Tento oddíl je nejdelší, a to záměrně. Čistě nakonfigurovaný server Unturned ustojí malé a střední útoky vlastními silami, nezávisle na tom, u koho stojí.

1. Inventura: co skutečně naslouchá?

Než napíšete jediné pravidlo, podívejte se, co váš server nabízí navenek. Nehádat, podívat se:

ss -lnup
ss -lntp

První příkaz ukáže naslouchající UDP sockety, druhý TCP sockety. Zajímavý je sloupec s lokální adresou. 0.0.0.0:27015 a [::]:27015 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 najde plugin pro RCON, webový panel, databáze a starý testovací server na 27017, který už nikdo nepoužívá. Pohled útočníka poskytne sken portů zvenčí, u Unturned výslovně s UDP:

nmap -Pn -sU -p 27000-27050 VASE.IP.ADRESA.SERVERU
nmap -Pn -p- --min-rate 1000 VASE.IP.ADRESA.SERVERU

2. Nechat otevřené jen 27015 a 27016

Pro Unturned stačí dvě UDP povolení navenek. Pro samotnou hru není potřeba jediný TCP port: oficiální dokumentace výslovně vyžaduje u obou portů UDP a síťová vrstva hry (Steam Networking Sockets, od jedné aktualizace výchozí nastavení) pracuje výhradně přes UDP. Kdo navíc povolí TCP, řídí se zastaralým návodem.

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

Pořadí je důležité, jinak se sami vyzamknete. Úplný návod včetně záchranné cesty najdete v článku Jak nastavit firewall UFW, aniž byste se sami vyzamkli. Pokud provozujete několik instancí, držte doporučený odstup dva (27015, 27017, 27019) a pro každou instanci povolte přesně ty dva porty, které skutečně zabírá.

Webový panel, databáze nebo plugin pro RCON do otevřené sítě nepatří. Příslušný port omezte pomocí ufw allow from 203.0.113.10 to any port 8080 proto tcp na svou vlastní adresu, nebo se k rozhraní dostaňte přes lokální přesměrování SSH pomocí ssh -N -L 8080:127.0.0.1:8080 root@VASE.IP.ADRESA.SERVERU. Databáze se váže na 127.0.0.1.

3. Zabezpečit dotazovací port, aniž byste vypadli ze seznamu serverů

Dotazovací port je nejcitlivější místo serveru Unturned. Přes něj server odpovídá na dotazy Steamu A2S_INFO, A2S_PLAYERS a A2S_RULES. Když ho zablokujete úplně, zmizí server z každého seznamu serverů, i když běží bezvadně.

Odpověď A2S je výrazně větší než dotaz. US-CERT vede protokol Steamu ve svém přehledu zesilovacích útoků přes UDP (TA14-017A) s faktorem zesílení šířky pásma 5,5. Konkrétně to znamená: útočník posílá dotazy s podvrženou adresou odesílatele na cizí herní servery a zhruba pětapůlkrát větší odpovědi směruje na svůj skutečný cíl. Váš server pak není obětí, ale zesilovačem proti třetí straně. V opačném směru stačí záplava dotazů, aby server zmizel z prohlížeče serverů, aniž by vypadl jediný hráč. Provozovatelé hlásí přesně to: server běží, hráči na něm nic nepozorují, ale nedá se najít.

Proti malým záplavám dotazů pomáhá horní mez podle zdrojové adresy. Legitimní dotazy přicházejí zřídka: prohlížeč Steamu se ptá jednou na zobrazení, stavové služby každých několik minut.

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

Druhé číslo se odvozuje přímo ze hry: Unturned omezuje jednoho hráče ve výchozím nastavení na 50 paketů za sekundu (Max_Packets_Per_Second). 300 paketů za sekundu a zdrojovou adresu tedy nechává jedné přípojce dost prostoru, i když za stejnou adresou sedí několik hráčů. Obě hodnoty jsou výchozí hodnoty, ne pravdy. Měřte nejdřív týden v normálním provozu, jinak vyhodíte vlastní hráče.

Samotná pravidla iptables jsou po restartu pryč. Na Debianu a Ubuntu se ukládají pomocí apt-get install -y iptables-persistent a netfilter-persistent save. Pod UFW patří taková pravidla do /etc/ufw/before.rules, protože jinak při příštím ufw reload zmizí.

K tomu přistupuje zvyk, který nic nestojí: pokud vaše webová stránka nebo váš bot na Discordu ukazuje počet hráčů, nedotazujte se serveru ze strany návštěvníka, ale výsledek si v pevných intervalech ukládejte do mezipaměti. Hojně navštěvovaná stavová stránka jinak vytvoří jeden dotaz na návštěvníka místo jednoho na interval.

4. Nastavit vestavěné limity v souboru Config.json

Unturned přináší v souboru Config.json ve stejném adresáři Server jako Commands.dat oddíl, který je pro obranu důležitější, než by jeho název naznačoval. Výchozí nastavení zní:

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

Max_Packets_Per_Second omezuje připojeného hráče na 50 paketů za sekundu. Join_Rate_Limit_Window_Seconds a Rate_Limit_Kick_Threshold vyhodí spojení, které během 40 sekund překročí mez více než desetkrát. VAC_Secure a BattlEye_Secure vyžadují na straně hráče oba anti-cheat systémy a drží tím většinu jednorázových klientů mimo.

Jedno přitom musí být jasné: tyto limity působí proti klientům, kteří se skutečně připojí nebo se o to pokoušejí. Proti záplavě s podvrženými adresami odesílatele nepůsobí, protože tam žádné spojení nikdy nevznikne. Přesto jsou důležité, protože zachytí nejčastější jednotlivý případ: jediného upraveného klienta, který server přetíží sám. Ponechat Max_Ping_Milliseconds na 750 má smysl, při nižším nastavení vyhodí server při každém krátkém zakolísání sítě půl kola.

5. Odlehčit sledování spojení

Tento bod se téměř vždy přehlíží a vysvětluje výpadky, které vypadají jako volumetrický útok, ale žádný to není. Jádro zakládá záznamy ve sledování spojení (conntrack) i pro UDP provoz, a u podvržených adres odesílatele znamená každá nová adresa nový záznam. Když se tabulka naplní, zahazuje jádro pakety bez rozdílu: útok a vaši hráči vypadnou společně. V systémovém logu pak stojí nf_conntrack: table full, dropping packet.

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

Nejúčinnější krok je nenechat provoz Unturned vůbec sledovat. Hra si svá spojení spravuje sama a nepotřebuje sledování stavu v jádře:

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

Dejte pozor na to, že vaše povolení pro tyto dva porty pak už nesmějí jít přes ESTABLISHED,RELATED, ale musí stát jako vlastní pravidla pro přijetí. Teprve potom se vyplatí zvýšit nf_conntrack_max. Kdo nejprve zvětší tabulku, odloží problém jen o minuty a spotřebuje na to operační paměť.

Pokud pakety přicházejí rychleji, než je serverový proces vybírá, přetéká navíc přijímací vyrovnávací paměť socketu. Pro hráče to vypadá jako ztráta paketů, přestože je linka volná:

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

Hodnoty uložte do /etc/sysctl.d/ a aktivujte je příkazem sysctl --system. Zda jsou potřeba, prozradí jádro: stoupá-li UdpRcvbufErrors v nstat -az nebo stojí-li v ss -lunp trvale něco v přijímací frontě, pak zabírají. Zůstávají-li obě na nule, úprava nic nezmění. To je rezerva, ne ochrana.

6. Záplava připojení, čekací fronta a whitelist

Záplava připojení je útok, při kterém útočník využívá běžnou cestu připojení, aby spotřeboval sloty a výpočetní čas, místo aby plnil linku. Unturned proti tomu přináší čtyři nástroje, které všechny stojí v Commands.dat:

  • Queue_Size 32 nastavuje čekací frontu. Ve výchozím stavu je to 8 míst, maximum je 64. Příliš velká fronta pomáhá útočníkovi, příliš malá vyhodí skutečné hráče při každém restartu.
  • Whitelisted přepne server na seznam povolených hráčů. Zapisuje se přes konzoli příkazem permit <SteamID64>, odebírá příkazem unpermit <SteamID64>.
  • Password VaseHeslo vylučuje všechny, kdo mají adresu jen ze seznamu.
  • Filter odmítá hráče s nepřípustnými znaky ve jménu, MaxPlayers 24 drží počet slotů na tom, co hardware skutečně unese.

Whitelist 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 přesto dorazily, a právě o to jde.

7. RocketMod, OpenMod a pluginy

Unturned má dvě rozšířené platformy pro pluginy a obě běží ve stejném procesu jako server. RocketMod je starší: původní správci ukončili jeho údržbu 20. prosince 2019 a zdrojový kód uvolnili pod licencí MIT. Smartly Dressed Games od té doby spravuje odnož Legally Distinct Missile (LDM), která se s dedikovaným serverem už dodává: Rocket.Unturned se zkopíruje z adresáře Extras do adresáře Modules. Vývojáři odnož výslovně doporučují, protože opravuje staré problémy Rocketu, jako jsou chyby ve vláknech a teleportační exploity.

OpenMod je novější následovník, vyvíjený jedním z původních správců Rocketu. RocketMod nenahrazuje, ale běží vedle něj a stávající Rocket pluginy dokáže přes integraci používat spolu s ním. Pro obranu to znamená dvě věci.

Zaprvé: každý plugin je útočná plocha v hlavním procesu. Plugin, který při každé zprávě v chatu nebo při každé herní události spustí databázový dotaz, je vlastnoručně postavený Denial of Service. Jediný hráč, který událost vyvolá ve smyčce, pak server položí bez jakékoli šířky pásma. Držte seznam pluginů krátký, dávejte přednost pluginům s otevřeným zdrojovým kódem a po každém rozšíření měřte snímkovou frekvenci serveru.

Zadruhé: protože Unturned nemá vlastní RCON port, pochází každá vzdálená správa z pluginu. Po instalaci zkontrolujte příkazem ss -lntp, který TCP port otevřel, a omezte ho na svou vlastní adresu. Otevřený port pro vzdálenou správu se slabým heslem není problém DDoS, ale problém převzetí serveru.

8. Obsah z Workshopu a průběh připojení

Obsah z Workshopu činí připojení drahým, a to se přímo odráží na zranitelnosti. Řídí se to přes WorkshopDownloadConfig.json ve stejném adresáři Server:

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

V File_IDs stojí identifikátory map a modů z Workshopu. Při startu je server včetně závislostí stáhne a každý hráč si je při připojení automaticky dotáhne. Tři důsledky byste měli znát. Zaprvé trvá připojení u velkých seznamů modů dlouho a po útoku se všichni hráči vracejí současně, což server zatíží podruhé. Zadruhé zastaví Should_Monitor_Updates server, jakmile se aktualizuje nějaký soubor z Workshopu: výchozí Shutdown_Update_Detected_Timer o 600 sekundách pak vede k restartu, který provozovatelé v případě útoku pravidelně považují za úspěch útočníka. Zatřetí je každý mod cizí kód na vašem serveru.

Prakticky to znamená: držte seznam tak krátký, jak je to možné, po každém neočekávaném restartu zkontrolujte nejdřív v logu serveru hlášku o aktualizaci z Workshopu, a Should_Monitor_Updates vypněte jen tehdy, když si aktualizace plánujete sami.

9. Seznam serverů, kód serveru a funkce Fake IP

Vaši IP adresu nelze udržet v tajnosti, dokud je server veřejně uvedený v seznamech. Zná ji každý hráč, který se jednou připojil, a seznamy třetích stran ji zveřejňují tak jako tak. Dvě zvyklosti přesto pomohou: nezveřejňujte surovou adresu nikde sami a připojujte své hráče přes název hostitele, aby změna adresy nerozbila každý odkaz. Klasikou je zapomenutý záznam A na starou adresu, který každou změnu zbaví účinku.

Pro provoz na internetu tak jako tak potřebujete Game Server Login Token (GSLT) ze správy serverů ve Steamu pro identifikátor aplikace 304930. Navíc zajišťuje, že kód serveru zůstane přes restarty stejný, místo aby se při každém startu generoval nově.

Unturned kromě toho nabízí funkci Fake IP. Zapíná se pomocí "Use_FakeIP": true v Config.json a příkaz konzole CopyFakeIP vrátí adresu, kterou pak zveřejníte. Provoz poté jde přes přenosovou síť Steam Datagram Relay, přidělené adresy leží v rozsahu 169.254.0.0 až 169.254.255.255 a skutečná adresa serveru se hráčům už neukazuje. Valve popisuje tento provoz jako ověřený, šifrovaný a omezený v rychlosti.

Cena za to je vysoká a málokdy se zmiňuje: adresa a port se mění při každém restartu, doménové jméno na ni bez vlastních skriptů nenamíříte, a seznamy Steamu „Oblíbené“ a „Historie“ s ní nefungují, funguje jen funkce záložek. Především ale chrání tato funkce jen herní cestu. Váš server si svou skutečnou adresu ponechá a SSH, webový panel, databáze a webová stránka na ní zůstávají dostupné. Kdo adresu zná ze starého záznamu DNS, ze stavové stránky nebo z dřívějšího spojení, útočí na ni dál přímo. Funkce Fake IP tedy nenahrazuje filtraci v síti před serverem, jen zmenšuje počet lidí, kteří vaši adresu vůbec znají.

10. Logování, abyste během útoku nemuseli hádat

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 portrange 27015-27016 -c 200 -q

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 a odlišit útok od softwarové chyby, stojí v článku Jak poznat DDoS útok.

Kde tato opatření končí

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. Typický herní server visí na 1 Gbit/s, to je 125 megabajtů za sekundu, a linka je plná, jakmile někdo pošle více. Normální provoz zůstává hluboko pod tím: při 24 hráčích a 50 paketech na hráče a sekundu povolených ve výchozím nastavení přichází zhruba 1 200 paketů za sekundu. Služba typu booter vytvoří bez jakékoli přípravy mnohonásobek.

Druhou veličinou je paketová rychlost a ta udeří téměř vždy 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 procesoru a síťové karty zpracuje několik set tisíc, než začne zahazovat. Útok, který vaši linku nenaplní ani z jedné třetiny, tedy může váš server i tak položit, protože 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č“.

Pro zařazení do souvislostí, jaké řádové hodnoty se reálně vyskytují: na serverech KernelHost byl mimo jiné odfiltrován útok o více než 473,4 Gbit/s při více než 41,5 milionu paketů za sekundu na hlasový server a UDP flood o 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. Lokalita je Frankfurt nad Mohanem. 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é projekty nejsou napadány příležitostně, ale cíleně a celé týdny. Pro ty existuje Advanced DDoS Protection od 50,00 EUR měsíčně, PrePaid, bez minimální doby trvání a bez zřizovacího poplatku. 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 odděleně, co je povolené na 27015 UDP (dotazy) a co na 27016 UDP (herní provoz), aniž byste k tomu museli psát ticket.
  • Změny se projeví v reálném čase, můžete tedy doladit nastavení i během probíhajícího útoku, například dotazy sevřít těsněji a herní provoz nechat nedotčený.
  • Ochranný profil odpovídající dané hře, stejně tak pro upravené a vlastní aplikace na libovolných TCP nebo UDP portech, tedy i pro plugin s vlastním portem.

Oba stupně ve srovnání

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, včetně Unturned profil odpovídající hře, i pro upravené aplikace
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ě projektů Unturned stačí zahrnutá trvalá ochrana spolu s čistou konfigurací serveru. Advanced DDoS Protection je odpovědí na to, že si to někdo vzal osobně.

Časté chyby a jejich řešení

„Můj návod říká, že musím povolit 27015 až 27017“: Ten návod je starší než listopad 2021. Od verze 3.21.30.0 potřebuje server Unturned už jen dva porty, protože dotaz Steamu neleží na portu plus dva. Zavřete 27017, ledaže by tam běžela druhá instance.

„Server běží, ale nestojí už v žádném seznamu serverů“: To je typický obraz záplavy dotazů nebo příliš ostrého vlastního pravidla na 27015 UDP. Zkontrolujte pomocí iptables -L INPUT -n -v, zda vaše vlastní pravidlo počítá zásahy. Pokud čítače prudce stoupají, filtrujete právě vlastní záznamy v seznamech. Nikdy 27015 neblokujte úplně.

„Všichni hráči vypadnou naráz s vypršením časového limitu“: Nejdřív se podívejte, jestli nepřeteklo sledování spojení (dmesg -T | grep -i conntrack). Je-li tabulka plná, zahazuje jádro bez rozdílu. Timeout_Game_Seconds stojí ve výchozím nastavení na 30 sekundách: kdo se v této době vrátí, ponechá si své místo.

„Server se restartuje uprostřed provozu“: To je zřídka útok. Zkontrolujte v logu hlášku o rozpoznané aktualizaci z Workshopu. Should_Monitor_Updates server po výchozí době 600 sekund vypne.

„Změnil jsem IP adresu a o dvě hodiny později jsem byl znovu offline“: Útočník má novou adresu ze stejného zdroje jako tu starou, většinou ze seznamu serverů, z bota na Discordu nebo ze starého záznamu DNS. Změna adresy je získaný čas, ne řešení.

„Zapnul jsem funkci Fake IP a přesto jsem napadán“: Skrývá adresu před novými hráči, ale serveru ji nebere. Kdo ji zná ze starého záznamu v seznamu, ze stavové stránky nebo z dřívějšího spojení, dosáhne na váš server dál přímo, stejně tak na SSH a na každý webový panel na něm.

„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í

  • Server Unturned potřebuje přesně dva otevřené UDP porty: Port nastavený v Commands.dat (ve výchozím stavu 27015) a tuto hodnotu plus jedna (27016). TCP samotná hra nepotřebuje.
  • Port 27017 je od verze 3.21.30.0 z 21. listopadu 2021 zbytečný, protože dotaz Steamu už neleží na portu plus dva. Kdo ho má ještě otevřený, řídí se zastaralým návodem.
  • Unturned nemá vestavěný RCON port. Každá vzdálená správa pochází z pluginu, přináší si vlastní TCP port a musíte ji omezit sami.
  • Dotazovací port 27015 je nejcitlivější místo: záplava dotazů udělá server v seznamu serverů neviditelným, aniž by zasáhla jediného hráče, a protokol Steamu má podle US-CERT TA14-017A faktor zesílení 5,5.
  • Limity v Config.json (Max_Packets_Per_Second 50,0, Rate_Limit_Kick_Threshold 10 za 40 sekund) působí jen proti klientům, kteří se skutečně připojí, ne proti podvrženým adresám odesílatele.
  • Linka 1 Gbit/s je plná při 125 megabajtech za sekundu, u paketů o velikosti 64 bajtů už při zhruba 1,49 milionu paketů za sekundu. Normální provoz s 24 hráči leží na zhruba 1 200 paketech za sekundu. O všem nad tím rozhoduje síť před serverem, ne váš firewall.
  • U KernelHost je dvoustupňová trvalá ochrana obsažena v každém serverovém balíčku bez příplatku a je aktivní od zřízení serveru, bez nullroutingu. Kdo chce filtrační pravidla řídit sám, doplní si Advanced DDoS Protection od 50,00 EUR měsíčně.

Běží-li váš projekt 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 musím pro server Unturned nechat otevřené?
Přesně dva UDP porty: hodnotu nastavenou v Commands.dat a tuto hodnotu plus jedna, ve výchozím nastavení tedy 27015 a 27016. Nastavuje se jen první přes řádek Port 27015, druhý vyplyne automaticky. Podle oficiální dokumentace nese první port dotazy ze seznamu serverů a druhý herní provoz. Pro samotnou hru není potřeba žádný TCP port. Pokud provozujete několik instancí na jednom stroji, doporučuje dokumentace odstup dva, tedy 27015, 27017, 27019.
Musím pro Unturned povolit port 27017?
Ne, od verze 3.21.30.0 z 21. listopadu 2021 už ne. Do té doby potřeboval server Unturned tři porty, protože dotaz Steamu ležel na portu plus dva. Touto aktualizací se dotaz dělí o port se serverem a třetí port odpadl. Velmi mnoho návodů k routerům, wiki hostingů a příspěvků na fórech přesto 27017 stále uvádí. Otevřený 27017 dnes nepřináší žádnou výhodu, je to čistá útočná plocha a měl by se zavřít, pokud tam neběží druhá instance serveru.
Můj server Unturned běží, ale nestojí už v žádném seznamu serverů. Je to útok?
Většinou ano, a to záplava dotazů na port 27015 UDP. Přes tento port odpovídá server na dotazy Steamu A2S_INFO, A2S_PLAYERS a A2S_RULES. Když se zasype, zmizí server z prohlížeče serverů, zatímco už připojení hráči hrají nerušeně dál. Druhou častou příčinou je příliš ostré vlastní pravidlo firewallu na 27015. Zkontrolujte pomocí iptables -L INPUT -n -v, zda vaše pravidlo počítá zásahy. Port 27015 nikdy neblokujte úplně, jinak server nenajdete v žádném seznamu.
Má Unturned vestavěný RCON port?
Ne. Oficiální dokumentace zná jen vstup a výstup konzole, které lze přes rozhraní ICommandInputOutput nahradit vlastní implementací. Každá vzdálená správa na serveru Unturned proto pochází z pluginu a přináší si vlastní TCP port. Po instalaci zkontrolujte pomocí ss -lntp, který port se otevřel, a omezte ho na svou vlastní adresu. Otevřený port pro vzdálenou správu se slabým heslem není problém DDoS, ale problém převzetí serveru.
Chrání funkce Fake IP v Unturned před DDoS útoky?
Jen částečně. S Use_FakeIP true v Config.json jde herní provoz přes přenosovou síť Steam Datagram Relay a skutečná adresa se novým hráčům už neukazuje. Ochrana ale končí u herní cesty: váš server si svou skutečnou adresu ponechá, SSH, webový panel a webová stránka na ní zůstávají dostupné, a kdo adresu zná ze starého záznamu DNS nebo z dřívějšího spojení, útočí dál přímo. K tomu se adresa a port mění při každém restartu a doménové jméno na ni bez vlastních skriptů nenamíříte.
Mohu se proti DDoS útoku bránit pomocí iptables nebo UFW?
Proti malým útokům a nečistým botům ano, proti volumetrickým útokům ne. Pravidlo firewallu na serveru rozhoduje o paketech, které už po vaší lince proběhly. Je-li linka nasycená, pakety vašich hráčů se přes ni nedostanou už dřív, a to úplně nezávisle na tom, jak dobrá je vaše sada pravidel. Smysl mají meze rychlosti podle zdrojové adresy na 27015 a 27016 a také NOTRACK pro oba porty, aby nepřetékalo sledování spojení v jádře. Volumetrické útoky musí skončit v síti před serverem.
Od jaké velikosti útoku to můj server Unturned nezvládne sám?
Typický herní server visí na 1 Gbit/s, to odpovídá 125 megabajtům za sekundu. Normální provoz leží hluboko pod tím: při 24 hráčích a 50 paketech na hráče a sekundu povolených ve výchozím nastavení přichází zhruba 1 200 paketů za sekundu. Důležitější než šířka pásma je paketová rychlost. Do 1 Gbit/s se při velikosti paketu 64 bajtů vejde zhruba 1,49 milionu paketů za sekundu, běžné jádro serveru jich zpracuje jen několik set tisíc. Útok vás tedy může položit, přestože šířka pásma není vyčerpaná.
Proč jsou servery Unturned napadány tak často?
Protože jejich adresa je veřejná, herní provoz jde přes UDP a útok nestojí toho, kdo ho spustí, ani schopnosti, ani znatelné peníze. Veřejně uvedený server musí prozradit svou IP adresu a svůj port, jinak ho nikdo nenajde: prohlížeč serverů ve Steamu se ptá přímo, seznamy třetích stran vedou obojí v otevřeném textu. UDP zase nezná navázání spojení, které by se dalo vyžadovat, a adresy odesílatele se dají podvrhnout. Útočník tedy nemusí na váš server vstoupit ani ho správně oslovit, aby vytvořil zátěž.
Pomohou pluginy RocketMod nebo OpenMod proti DDoS útokům?
Ne, situaci mohou dokonce zhoršit. Obě platformy běží ve stejném procesu jako server. Plugin, který při každé zprávě v chatu nebo při každé herní události spustí databázový dotaz, je vlastnoručně postavený Denial of Service: jediný hráč pak server položí bez jakékoli šířky pásma. Držte seznam pluginů krátký a po každém rozšíření měřte. RocketMod už původní správci od 20. prosince 2019 neudržují, doporučená je odnož Legally Distinct Missile spravovaná studiem Smartly Dressed Games nebo následovník OpenMod.
Půjde můj server u KernelHost během útoku offline?
Ne. Nullrouting se nepoužívá. Vaše IP adresa zůstává v síti, zahazují se jen škodlivé pakety. Ochrana je dvoustupňová: 17 Tbps mitigační kapacity v globální scrubbingové síti a filtrace Arbor v reálném čase s 3,2 Tbps ve Frankfurtu nad Mohanem. Běží trvale a nemusí na útok teprve reagovat, nejsou tedy žádné minuty na začátku, kdy je server pryč.
Stojí ochrana proti DDoS u KernelHost něco navíc?
Ne. Dvoustupňová trvalá ochrana je u každého serverového balíčku obsažena bez příplatku a je aktivní od zřízení serveru. Nemusíte ji objednávat, zapínat ani konfigurovat. To platí pro server Unturned stejně jako pro každou jinou aplikaci na tomtéž serveru, nezávisle na tom, které porty obsadíte.
Kdy potřebuji pro svůj server Unturned navíc Advanced DDoS Protection?
Pokud váš projekt není napadán příležitostně, ale cíleně a celé týdny, a chcete filtraci řídit sami. Dostanete dedikovanou chráněnou IP a ochranná pravidla podle portu a protokolu spravujete sami v zákaznické sekci, tedy odděleně pro dotazy na 27015 UDP a herní provoz na 27016 UDP. Změny se projeví v reálném čase, můžete tedy doladit nastavení i během probíhajícího útoku. Cena začíná na 50,00 EUR měsíčně, PrePaid, bez minimální doby trvání a bez zřizovacího poplatku.

Unturned Ochrana Unturned před DDoS Ochrana herního serveru Port 27015 Port 27016 Steam Query RocketMod OpenMod Advanced DDoS Protection