Team Fortress 2: jak ochránit server TF2 před DDoS útoky

Publikováno 20 min čtení

Které porty server Team Fortress 2 skutečně potřebuje, jak omezit A2S dotazy, rozdělené pakety, RCON a rychlosti, aniž byste vypadli z prohlížeče serverů, a od jaké velikosti útoku pomůže už jen filtrace v síti před serverem.

Komunitní server Team Fortress 2, který večer uprostřed kola naráz ztratí všechny hráče a potom na několik minut zmizí z prohlížeče serverů, má jen zřídka problém s hardwarem. Ve většině případů běží útok na 27015/UDP. Tento článek ukazuje, jak ochránit server TF2 před DDoS útoky: nejdřív to, co můžete v následujících deseti minutách bez dalších nákladů udělat sami, poté místo, kde tato opatření fyzikálně končí, a nakonec to, co se musí odehrát v síti před serverem.

Všechny údaje se vztahují k dedikovanému serveru Source nainstalovanému přes SteamCMD (srcds_run -game tf) 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 nejdřív nic a server nerestartujte, ale zajistěte si naměřené hodnoty z oddílu 9. Po útoku už budou pryč.

Proč servery Team Fortress 2 potřebují ochranu proti DDoS

Team Fortress 2 se dá od roku 2011 hrát zdarma, a přesně to posouvá ekonomiku útoků. Útočník má neomezeně mnoho jednorázových účtů, za žádný z nich nemusí platit a při zabanování neriskuje nic. Co u placené hry stojí peníze, stojí tady minutu.

K tomu přistupuje zvláštnost, která TF2 odlišuje od většiny ostatních her: od aktualizace „Meet Your Match“ v červenci 2016 už neexistuje Quickplay, které nové hráče automaticky rozdělovalo na komunitní servery. Noví hráči přistávají v režimu Casual na serverech Valve. Komunitní servery jsou dohledatelné výhradně přes prohlížeč serverů. Kdo z tohoto seznamu vypadne, pro nové hráče prakticky neexistuje, i když serverový proces běží bezvadně. Útok, který váš server jen vytlačí ze seznamu, tedy svého cíle už dosáhl.

Typické cíle jsou podle toho: trvale běžící komunitní servery se stálými hráči (2Fort nonstop, Trade, Jailbreak, Surf, Dodgeball, Mann vs. Machine), ligové servery s pevným termínem zápasu v ligovém provozu ETF2L, RGL a ozfortress, a také servery, jejichž provozovatel právě někoho zabanoval. Spouštěč téměř nikdy není technický. Co DDoS útok vůbec je, vysvětluje článek Co je DDoS útok?.

Porty, o které u serveru TF2 ve skutečnosti jde

Server TF2 potřebuje navenek přesně jeden port: 27015/UDP. Všechno ostatní se dá buď vypnout, nebo patří omezit, případně tak jako tak běží jen odchozím směrem. Tato tabulka je základem pro každé pravidlo firewallu níže:

Port Protokol K čemu slouží Dosažitelný zvenčí?
27015 UDP Herní provoz a A2S dotaz na server na stejném portu, nastaveno přes -port ano, povinně
27015 TCP RCON, vzdálená správa serveru přes rcon_password ne, jen z vaší vlastní adresy
27020 UDP SourceTV (STV), nastaveno přes tv_port, vypnutelné pomocí -nohltv jen pokud skutečně vysíláte
27005 UDP Klientský port, který hráč používá odchozím směrem (+clientport) ne, na serveru není povolení potřeba
26900 a výš UDP Port Steamu serverového procesu (-steamport), s každou další instancí se počítá výš ne, jen odchozím směrem ke Steamu
80 a 443 TCP FastDL pro mapy a obsah (sv_downloadurl), pokud je na stejném hostiteli jen pokud tam stahování leží

Při několika instancích na jednom stroji se čísla počítají výš: 27016, 27017 a tak dál pro hru, 27021 a 27022 pro SourceTV. Konfigurační soubor leží v tf/cfg/server.cfg a načítá se znovu při každé změně mapy.

Proč je společný port 27015 nejcitlivější místo

Herní provoz a dotaz na server se u TF2 dělí o stejný UDP port, oddělený query port neexistuje. Dotaz A2S_INFO je přitom dlouhý přesně 25 bajtů: čtyři bajty FF FF FF FF, jeden bajt 0x54 a 20 bajtů dlouhý řetězec Source Engine Query se zakončující nulou. Odpověď se jménem serveru, mapou, počtem hráčů a tagy je jeho násobkem. Americký úřad CISA uvádí ve výstraze TA14-017A faktor zesílení protokolu Steamu jako 5,5.

Protože UDP nezná navázání spojení a adresy odesilatele se dají podvrhnout, byla to po léta otevřená mezera pro zesílení: útočník se dotazoval cizích serverů Source s adresou své oběti jako odesilatelem a servery posílaly své odpovědi oběti. A2S_PLAYER a A2S_RULES odjakživa vyžadovaly předem vyzvednutou výzvu, A2S_INFO ne. Teprve v prosinci 2020 doplnilo Valve výzvu i pro A2S_INFO: server smí místo odpovědi poslat zpět S2C_CHALLENGE, které musí dotazující zopakovat, čímž dokáže, že adresu odesilatele nepodvrhl.

To reflexi zmírňuje, ale problém neukončuje. Každý dotazovací paket k vám nadále dorazí a stojí výpočetní čas, ještě než je odpovězen nebo zahozen. A útočník, který váš server zaplavuje přímo, žádné zesílení nepotřebuje.

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

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

1. Inventura: co naslouchá a s jakým startovacím řádkem

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

ss -lntup

Všechno, co je navázané na 127.0.0.1 nebo ::1, žádné povolení nepotřebuje. Všechno na 0.0.0.0 nebo [::] je dosažitelné z internetu, včetně databáze MySQL, kterou si přinesl statistický plugin, a webového serveru, na kterém leží vaše soubory pro FastDL. Srovnejte výsledek se svým startovacím řádkem:

./srcds_run -game tf -console \
  -port 27015 -steamport 26901 -nohltv \
  +maxplayers 24 +map ctf_2fort +sv_pure 1 \
  +sv_setsteamaccount VAS_GSLT_TOKEN

Každý port v tomto řádku je uvědomělé rozhodnutí. Jak se instaluje podloží, stojí v článku Instalace herního serveru pomocí SteamCMD.

2. Nechat otevřené jen porty, které TF2 skutečně potřebuje

Veřejný server TF2 potřebuje navenek přesně jedno povolení, plus RCON pro vaši vlastní adresu. S UFW, a to v tomto pořadí, abyste se sami nevyzamkli:

ufw allow 22/tcp comment 'SSH'
ufw allow 27015/udp comment 'TF2 hra a A2S'
ufw allow from 203.0.113.10 to any port 27015 proto tcp comment 'RCON'
ufw default deny incoming
ufw default allow outgoing
ufw --force enable
ufw status verbose

Nahraďte 203.0.113.10 svou vlastní adresou. SourceTV se tady záměrně neobjevuje: kdo nevysílá, startuje s -nohltv a 27020/UDP vůbec nezabere. To zmenší zvenčí dosažitelnou UDP plochu serveru TF2 na polovinu. Vysíláte-li ligové zápasy, přidá se ufw allow 27020/udp, a pak patří nastavit tv_password.

Úplný návod včetně záchranné cesty stojí v článku Jak nastavit firewall UFW, aniž byste se sami vyzamkli. Pokud se to přesto stane: ke KVM root serverům a dedikovaným serverům od KernelHost se dostanete přes VNC konzoli v zákaznické sekci, která pracuje nezávisle na síti hostovaného systému.

3. Omezit A2S dotazy, aniž byste vypadli z prohlížeče serverů

Tady leží nejdražší chyba v této oblasti: paušálně zablokovat nebo hrubě omezit rychlost na 27015/UDP vyhodí vlastní hráče a ukončí útok ve smyslu útočníka. Protože herní provoz a dotaz zabírají stejný port, musí mez ležet mezi druhy paketů, ne na portu.

Engine k tomu přináší tři konzolové proměnné, které patří do tf/cfg/server.cfg:

sv_max_queries_sec 3
sv_max_queries_sec_global 60
sv_max_queries_window 30

První omezuje odpovězené dotazy podle adresy odesilatele, druhá součet přes všechny adresy, třetí určuje průměrovací okno v sekundách. Chrání CPU před tím, aby zbytečně vytvářelo odpovědi. Výchozí hodnoty se liší podle hry a buildu, find sv_max_queries v serverové konzoli ukáže, které hodnoty váš server zná.

Druhá hodnota je u TF2 ta riskantní: zastropuje odpovědi přes všechny adresy. Nastavíte-li ji příliš nízko, neodpoví váš server během záplavy dotazů ani na dotazy seznamových služeb a zmizí z prohlížeče serverů, tedy z jediné cesty, po které vás noví hráči najdou. Začněte velkoryse a přitahujte teprve tehdy, když dokážete měřit, že legitimní dotazy procházejí.

O úroveň níž se dá stejný provoz čistě oddělit. Všechny nespojované pakety enginu Source začínají čtyřmi nastavenými bajty (0xffffffff), provoz už připojených hráčů tuto hlavičku nemá. Na to se dá položit omezení rychlosti, aniž byste se dotkli herního provozu:

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

Soubor nahrajete pomocí nft -f. Priorita -10 zajistí, že pravidlo zabere před filtračním řetězcem UFW, a @th,64,32 čte první čtyři bajty za hlavičkou UDP.

4. Zachytit záplavy rozdělených paketů, které se v protokolu objevují jako NET_GetLong

Tento útok je zvláštností enginu Source a TF2 zasahuje obzvlášť, protože TF2 běží dodnes na staré větvi enginu. Vedle normálních nespojovaných paketů zná engine rozdělené pakety: začínají FE FF FF FF místo FF FF FF FF a ohlašují, že následuje větší zpráva v několika částech. Server musí části ukládat do mezipaměti a čekat na zbytek.

Právě to se dá zneužít. Útočník posílá masově ohlášené, ale nikdy úplné části paketů s podvrženými adresami odesilatele. Zátěž CPU stoupá, hra seká a v serverovém protokolu se hromadí řádky s NET_GetLong. Stačí na to jediný počítač, šířky pásma je potřeba minimum. Provozovatelé to pravidelně hlásí jako DDoS útok, přestože linka je téměř prázdná.

Protože běžný klient TF2 nemá téměř důvod posílat serveru rozdělené pakety, je tady těsné omezení obhajitelné:

udp dport 27015 @th,64,32 0xfffffffe \
    meter tf2split { ip saddr limit rate over 5/second burst 10 packets } drop

Řádek patří do stejného řetězce jako pravidlo z oddílu 3. Jeden z mála legitimních důvodů pro odesílání souborů od klienta navíc odstraníte pomocí sv_allowupload 0 (viz oddíl 7).

5. Vzít RCON z otevřené sítě

Protokol RCON enginu Source přenáší heslo v otevřeném textu přes TCP. Kdo umí odečítat cestu mezi vámi a serverem, má potom vaše heslo k RCON, a kdo má RCON, může měnit mapu, zabanovat všechny hráče a server zastavit. To není problém DDoS, ale převzetí serveru, hlásí se to však pravidelně jako útok.

Nenastavujte rcon_password nikdy prázdné a nikdy uhodnutelné, hodnota z openssl rand -base64 32 stačí. K tomu patří brzda proti pokusům o přihlášení:

rcon_password "ZDE_NAHODNA_HODNOTA"
sv_rcon_maxfailures 3
sv_rcon_minfailures 3
sv_rcon_minfailuretime 30
sv_rcon_banpenalty 1440

Tím server po třech neúspěšných pokusech během 30 sekund zablokuje adresu na 24 hodin; find sv_rcon ukáže, které proměnné váš build zná. Účinnější přesto zůstává pravidlo firewallu z oddílu 2, protože pokus vůbec nepustí až k aplikaci. Pro přístup z proměnlivých přípojek si zřiďte lokální přesměrování přes SSH a RCON pak oslovujte na 127.0.0.1:

ssh -N -L 27015:127.0.0.1:27015 root@VASE.IP.ADRESA.SERVERU

6. Zastropovat rychlosti a nechat zapnutou hibernaci

Team Fortress 2 běží pevně s 66,67 ticku za sekundu. Kolik z toho vznikne provozu, nerozhoduje tick, ale to, co si smí jeden klient vyžádat. Bez horní meze si každý hráč vyzvedne tolik, kolik jeho klient požaduje, a platíte to svou odchozí šířkou pásma:

sv_minrate 50000
sv_maxrate 100000
sv_mincmdrate 40
sv_maxcmdrate 66
sv_minupdaterate 40
sv_maxupdaterate 66

Spočítejte si to jednou: při sv_maxrate 100000 smí každý hráč odebírat 100 kilobajtů za sekundu, na 24 místech je to 2,4 megabajtu za sekundu, tedy zhruba 19 Mbit/s odchozím směrem. Nastavíte-li sv_maxrate 0, žádná horní mez neexistuje. Ligové servery to dělají uvědoměle, veřejný server s mnoha místy by to dělat neměl. Pluginy, které odemykají tickrate, znásobí paketovou rychlost na hráče a tím i tento výpočet.

Druhý bod se často dělá chybně. TF2 usne, jakmile není nikdo připojen, a v tomto stavu nepotřebuje téměř žádné CPU. Mnoho provozovatelů to vypíná, aby server působil „bděle“. Na stroji s několika instancemi to znamená, že CPU je vytížené už v nečinnosti a útok pak trefí na už plný systém. Nechte výchozí nastavení stát:

sv_hibernate_when_empty 1
sv_hibernate_postgame_delay 5
tf_allow_server_hibernation 1

7. Oddělit FastDL a vypnout odesílání souborů

Komunitní servery žijí z vlastních map, a přesně z toho vzniká druhá útočná plocha. Bez sv_downloadurl stahuje každý hráč obsah přes síťový kanál hry, tedy přes stejný port a stejný proces, který zároveň počítá zápas. To je pár kilobajtů za sekundu a jeden soubor za druhým, a u sbírky map o velikosti 200 megabajtů to váš server blokuje na minuty na každého hráče:

sv_allowdownload 1
sv_allowupload 0
net_maxfilesize 64
sv_downloadurl "https://fastdl.example.org/tf/"

net_maxfilesize stojí standardně na 15 a dá se zvýšit na maximálně 64 megabajtů. sv_allowupload 0 zabrání tomu, aby klienti posílali serveru vlastní soubory (třeba sprejové obrázky), a odebírá tím jeden z mála legitimních důvodů pro rozdělené pakety z oddílu 4.

Rozhodující je, kde stojí hostitel s FastDL. Leží-li na stejné IP adrese jako herní server, stačí HTTP záplava proti 443/TCP k tomu, aby naplnila linku a tím zadusila i 27015/UDP. Položte rychlé stahování na jiného hostitele nebo za obsahovou síť, pak útok na soubory nezasáhne hru.

8. Omezit hlasovací systém, záplavy připojení a pluginy

Ne každý výpadek je šířka pásma. Protože je TF2 zdarma, nestojí útok na herní logiku nic než účty: záplavy připojení, které zaberou každé místo, hlasový a chatový spam, a zneužitá hlasování, která vyhazují běžné hráče. Výchozí nastavení TF2 jsou tady už rozumná, často se ale rozvolňují:

sv_allow_votes 1
sv_vote_issue_kick_allowed 0
sv_vote_allow_spectators 0
sv_vote_creation_timer 150
sv_vote_failure_timer 300
sv_vote_quorum_ratio 0.6

To jsou standardní hodnoty: hlasování jsou povolená, hlasování o vyhození ne, diváci nehlasují, mezi dvěma hlasováními leží 150 sekund, po neúspěšném 300, a hlasování potřebuje 60 procent souhlasu. Kdo nastaví sv_vote_issue_kick_allowed 1, měl by vědět, že tím otevírá nástroj, který se na veřejném serveru spolehlivě zneužije.

Všechno, co jde nad to, přichází u TF2 ze SourceModu a Metamod:Source. Oba leží v tf/addons/ a v konzoli se hlásí pomocí meta version a sm version. Na rozdíl od Counter-Strike 2 je tady podloží vyzrálé a pluginy pro seznamy blokovaných, kontrolu při připojení a omezení chatu jsou běžnou cestou. Dvě pravidla k tomu: každý plugin je kód ve stejném procesu, padající plugin vezme server s sebou. A pluginy, které přinášejí vlastní webové služby, otevírají další porty a někdy zveřejní právě tu adresu, kterou chcete chránit. sm plugins list ukáže, co skutečně běží.

Jak vážně se má brát strana enginu, ukazuje duben 2020: po prosáknutí starších stavů zdrojového kódu TF2 a CS:GO velcí komunitní provozovatelé jako Creators.TF a Red Sun své servery z obavy před zneužitím přechodně vypnuli. Držte serverový binární soubor aktuální a rozšíření odpovídající verzi enginu.

9. Měřit a logovat, než začne hořet

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áteční večer. Během incidentu stačí čtyři příkazy:

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

První příkaz ukáže pakety, chyby a zahozené na každé rozhraní; spusťte ho dvakrát v odstupu deseti sekund, pak máte rychlost místo absolutní hodnoty. Oba záznamy oddělují záplavu dotazů od záplavy rozdělených paketů a odpovídají tím na otázku, které z obou pravidel z oddílů 3 a 4 vůbec musí zabrat. Omezujte je vždy pomocí -c, záznam při plném zatížení sám stojí výpočetní čas.

Uvnitř serveru dodá konzolový příkaz stats v jednom řádku zátěž CPU, příchozí a odchozí síťovou zátěž v kilobajtech za sekundu, FPS serveru a počet hráčů. Padnou-li FPS serveru výrazně pod hodnotu ticku, zatímco počet hráčů je normální, pracuje server na něčem jiném než na hře. Jak hodnoty zařadit, stojí v článku Jak poznat DDoS útok na serveru.

Kde tato opatření končí: šířka pásma a paketová rychlost

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.

Postavte normální provoz plného serveru TF2 vedle skutečného útoku, a poměr bude zřetelný:

Ukazatel Plný server TF2, 24 míst, 66,67 ticku Útok
Příchozí pakety zhruba 1 600 za sekundu (24 hráčů krát 66 příkazů) několik milionů za sekundu
Příchozí šířka pásma výrazně pod 2 Mbit/s obvykle 5 až 50 Gbit/s proti komunitním herním serverům
Odchozí šířka pásma zhruba 19 Mbit/s při sv_maxrate 100000 není problém
A2S dotazy několik za minutu na každou seznamovou službu několik tisíc za sekundu
Fyzikální horní mez 1 Gbit/s unese zhruba 1,49 milionu nejmenších paketů za sekundu 10 Gbit/s unese zhruba 14,88 milionu

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. Druhou veličinou je paketová rychlost a udeří většinou dřív než šířka pásma: každý paket stojí jeden průchod síťovým zásobníkem, i když se pak zahodí. Útok, který vaši linku nenaplní ani z jedné třetiny, proto váš server ochromí i tak. Provozovatelé to zažívají jako „vytížení přece vůbec nebylo vysoké, a stejně bylo všechno pryč“.

Pro zařazení, jaké řádové velikosti se skutečně vyskytují: na serverech KernelHost byly v reálném čase odfiltrovány mimo jiné UDP flood proti hernímu serveru s více než 112,2 Gbit/s při více než 8,7 milionu paketů za sekundu a multivektorový útok proti hlasovému serveru s více než 473,4 Gbit/s při více než 41,5 milionu paketů za sekundu. 473,4 Gbit/s je zhruba 470násobek přípojky s 1 Gbit/s. Na to neexistuje žádné lokální nastavení.

Dvě rozšířené záchranné brzdy dál nepomohou. Nullrouting vezme napadenou IP adresu ze sítě a útok ukončí, ale s ním i váš server. Reaktivní přesměrování stojí v době přepnutí přesně ty minuty, ve kterých se zápas rozhoduje. Účinná je jen filtrace, která běží trvale v síti před serverem.

Co KernelHost staví proti útokům na servery TF2

Trvalá ochrana, která je obsažená v každém serverovém balíčku

Ochrana proti DDoS od KernelHost je postavená dvoustupňově a je od zřízení serveru trvale aktivní, aniž byste museli cokoli objednávat, zapínat 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.

Pro server TF2 jsou rozhodující dvě vlastnosti. Filtrace běží trvale a nemusí na útok teprve reagovat, není tedy žádná doba přepnutí, ve které vaši hráči vypadnou a váš server vypadne z prohlížeče serverů. A nepoužívá se nullrouting: vaše IP adresa zůstává v síti, zahazují se jen škodlivé pakety. 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é servery

Některé projekty nejsou napadány příležitostně, ale cíleně a celé týdny, s proměnlivými vzory a vždy přesně na termín zápasu. Pro takové případy 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 v naší 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, co na 27020/UDP a co na 27015/TCP, aniž byste kvůli tomu psali ticket.
  • Změny se projeví v reálném čase, můžete tedy doladit nastavení i během probíhajícího útoku, místo abyste čekali na konec zápasu.
  • Ochranný profil odpovídající hře, pro Team Fortress 2 a ostatní tituly na enginu Source stejně jako volné profily TCP a UDP pro vlastní aplikace.

Nabídka se vztahuje na servery, které běží u KernelHost. Pokud váš server TF2 momentálně stojí jinde a je pravidelně ostřelován, je přestěhování cestou k této ochraně.

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
Aktivace aktivní od zřízení serveru, není co nastavovat objednat, obdržet chráněnou IP, server se přepne
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, doladění přes ticket 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, Team Fortress 2 včetně profil volitelný podle portu, i pro upravené servery
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ě komunitních serverů TF2 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í

„Server běží, ale už nestojí v prohlížeči serverů“: Zkontrolujte nejdřív Game Server Login Token. Servery TF2 potřebují pro veřejný záznam token, nastavuje se přes sv_setsteamaccount a vytváří se pro App ID 440. Steam stahuje tokeny, které nebyly 30 dní použité. Server, který po delší pauze zmizí, tedy často potřebuje jen nový token a není vůbec napadán. Teprve potom přicházejí v úvahu příliš nízké sv_max_queries_sec_global nebo příliš hrubé pravidlo firewallu na 27015/UDP.

„CPU stojí na 100 procentech, linka je téměř prázdná“: To je typický obraz záplavy dotazů nebo záplavy rozdělených paketů. Vyhledejte v serverovém protokolu řádky s NET_GetLong a změřte oběma řádky s tcpdump z oddílu 9, který druh paketů dorazí.

„Moje pravidla nftables nebo iptables nezabírají“: Časté jsou tři příčiny. Pravidlo stojí až za řetězci UFW a nikdy se na něj nedojde (proto ta priorita -10), po posledním restartu bylo pryč, nebo je útok volumetrický a pravidlo pracuje správně na lince, která je už plná. Zkontrolujte pomocí nft list ruleset, zda stoupají čítače. Zůstávají-li na nule, pravidlo se nedostane ke slovu.

„Vyměnil jsem IP adresu a druhý den jsem byl znovu offline“: Útočník najde novou adresu ze stejného zdroje jako tu starou. Váš server ji zveřejní sám, jakmile znovu stojí v prohlížeči serverů, a staré záznamy DNS i stavoví boti na Discordu udělají zbytek. Výměna adresy získá hodiny, ne řešení.

„Server padá reprodukovatelně, aniž by byla šířka pásma nápadná“: Většinou to není DDoS útok, ale plugin, který neodpovídá verzi enginu, nebo zastaralý serverový binární soubor. sm plugins list a srovnání verzí jsou tady rychlejší než jakékoli filtrační pravidlo.

„Server po nečinnosti reaguje se zpožděním“: To je hibernace a ne chyba. Snižuje zátěž CPU téměř na nulu, dokud není nikdo připojen, a to je přesně ten stav, ve kterém chcete mít rezervy.

„Na serveru běží cizí administrační příkazy“: Žádný DDoS útok, ale kompromitovaný přístup k RCON. Heslo okamžitě nastavit znovu, port omezit na vlastní adresu, a myslet na to, že heslo jde po lince v otevřeném textu.

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

Stručné shrnutí

  • Server TF2 potřebuje navenek přesně 27015/UDP. RCON na 27015/TCP patří omezit na vlastní adresu, SourceTV na 27020/UDP se vypne pomocí -nohltv, pokud nevysíláte.
  • Herní provoz a A2S dotaz se dělí o stejný port. Kdo 27015/UDP paušálně zablokuje nebo omezí rychlostí, vyhodí vlastní hráče. Mez musí ležet mezi druhy paketů, rozpoznatelnými podle prvních čtyř bajtů za hlavičkou UDP.
  • Záplavy rozdělených paketů s hlavičkou FE FF FF FF vytvářejí zátěž CPU místo šířky pásma a v protokolu stojí jako NET_GetLong. Těsné omezení tohoto druhu paketů je u TF2 obhajitelné.
  • Od „Meet Your Match“ najdou noví hráči komunitní servery už jen přes prohlížeč serverů. Každé opatření, které vás ze seznamu vytlačí, působí jako útok sám.
  • Plný server s 24 místy zpracuje zhruba 1 600 příchozích paketů za sekundu. Útoky proti komunitním herním serverům leží obvykle na 5 až 50 Gbit/s a několika milionech paketů za sekundu.
  • 1 Gbit/s unese u nejmenších paketů zhruba 1,49 milionu paketů za sekundu. Nad touto hranicí rozhoduje výhradně síť před serverem, žádné pravidlo na serveru.
  • 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. Advanced DDoS Protection se přidává od 50,00 EUR měsíčně, pokud chcete pravidla podle portu řídit sami.

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. Uveďte přitom hned čtyři údaje: IP adresu, port, časové rozmezí ve své časové zóně a to, co vidíte. To ušetří jedno kolo dotazů, a to se počítá, když běží zápas.

Časté dotazy

Můj server TF2 je právě offline. Jak poznám, jestli jde o DDoS útok?
Podívejte se na paketovou rychlost rozhraní, ne na zátěž CPU. Pomocí ip -s link show eth0, spuštěného dvakrát v odstupu deseti sekund, získáte rychlost místo absolutní hodnoty, pomocí nstat -az čítače UDP. Stoupají-li příchozí pakety daleko nad normální hodnotu, zatímco je připojen téměř nikdo, běží útok. Zůstávají-li síťové čítače nenápadné a server přesto padá, je příčinou většinou plugin nebo zastaralý serverový binární soubor, ne útok.
Které porty musím pro server Team Fortress 2 nechat otevřené?
Přesně jeden: 27015/UDP. Přes tento port běží společně herní provoz a A2S dotaz na server, oddělený query port u TF2 neexistuje. 27015/TCP je RCON a patří omezit na vaši vlastní adresu. 27020/UDP je SourceTV a se startovacím parametrem -nohltv se vůbec nezabere, pokud nevysíláte. 27005/UDP je klientský port hráče a na serveru povolení nepotřebuje, port Steamu od 26900 jen odchozím směrem.
Můžu port 27015 prostě zablokovat nebo omezit rychlostí?
Ne. Protože herní provoz a A2S dotaz zabírají stejný port, zasáhne hrubé pravidlo obojí: vaši vlastní hráči vypadnou a server zmizí z prohlížeče serverů. Mez musí ležet mezi druhy paketů. Všechny nespojované pakety enginu Source začínají čtyřmi nastavenými bajty (0xffffffff), provoz připojených hráčů ne. Přesně na to se dá pomocí nftables položit omezení rychlosti podle adresy odesilatele, aniž byste se dotkli herního provozu.
Co znamenají řádky s NET_GetLong v serverovém protokolu?
To je poukaz na záplavu rozdělených paketů, zvláštnost enginu Source. Rozdělené pakety začínají čtyřmi bajty FE FF FF FF a ohlašují, že následuje větší zpráva v částech. Útočník posílá masově ohlášené, ale nikdy úplné části s podvrženými adresami odesilatele, a server čeká a ukládá do mezipaměti. To vytváří zátěž CPU místo šířky pásma: linka zůstává téměř prázdná, hra přesto seká. Těsné omezení rychlosti na tento druh paketů je u TF2 obhajitelné.
Server běží, ale už nestojí v prohlížeči serverů. Jsem napadán?
Nemusí to tak být. Zkontrolujte nejdřív Game Server Login Token, který potřebuje každý veřejně vypsaný server TF2 a který se nastavuje přes sv_setsteamaccount, vytvořený pro App ID 440. Steam stahuje tokeny, které nebyly 30 dní použité. Teprve potom přicházejí v úvahu příliš nízko nastavené sv_max_queries_sec_global, příliš hrubé pravidlo firewallu na 27015/UDP nebo skutečná záplava dotazů. Od aktualizace Meet Your Match je prohlížeč serverů jediná cesta, po které noví hráči komunitní servery najdou.
Pomůže teď rychle vyměnit IP adresu?
Jen krátce. Váš server novou adresu zveřejní sám, jakmile je znovu zapsaný v prohlížeči serverů, protože právě to je předpoklad k tomu, aby ho hráči našli. K tomu přicházejí staré záznamy DNS, stavoví boti na Discordu a seznamové stránky, které záznam přepisují. Výměna adresy získá hodiny až dny, problém ale nevyřeší. Kdo je ostřelován trvale, potřebuje filtraci v síti před serverem.
Od jaké velikosti útoku to můj server TF2 nezvládne sám?
Plný server s 24 místy zpracuje zhruba 1 600 příchozích paketů za sekundu a výrazně méně než 2 Mbit/s. Typický herní server visí na 1 Gbit/s, to odpovídá 125 megabajtům za sekundu. Útoky proti komunitním herním serverům leží obvykle mezi 5 a 50 Gbit/s. Stejně důležitá je paketová rychlost: do 1 Gbit/s se u nejmenších paketů 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 ochromit, přestože šířka pásma vyčerpaná není.
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 postavená 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. Pro server TF2 je to rozhodující, protože není žádná doba přepnutí, ve které hráči vypadnou a server vypadne z prohlížeče serverů.
Stojí ochrana proti DDoS u KernelHost něco navíc a kdy potřebuji Advanced DDoS Protection?
Dvoustupňová trvalá ochrana je v každém serverovém balíčku obsažena bez příplatku a je aktivní od zřízení serveru, nemusíte ji objednávat ani zapínat. Advanced DDoS Protection potřebujete, když je váš server napadán 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 v zákaznické sekci, tedy 27015/UDP odděleně od 27020/UDP. Změny se projeví v reálném čase. Cena začíná na 50,00 EUR měsíčně, PrePaid, bez minimální doby trvání a bez zřizovacího poplatku.

Team Fortress 2 Ochrana TF2 proti DDoS Komunitní server SourceTV SourceMod Port 27015 Ochrana herních serverů Advanced DDoS Protection