Jak ochránit server Garry's Mod před DDoS útoky
U Garry's Mod běží herní provoz a serverový dotaz přes stejný port 27015. Která pravidla na serveru skutečně účinkují, jak zabezpečíte RCon a síťové události v Lua, a od jaké velikosti útoku pomůže už jen filtrace v síti před serverem.
Server Garry's Mod, který večer v osm na tři minuty zmizí a pak se zase vrátí, má jen zřídka problém s hardwarem. V naprosté většině případů běží útok, a běží právě tehdy, když je připojeno nejvíc hráčů. Ochrana proti DDoS u Garry's Mod proto znamená nejdřív jedno: vědět, které pakety vůbec smějí na váš server dorazit. Tento článek ukazuje v tomto pořadí, co si v následujících deseti minutách bez jediné koruny zabezpečíte sami, kde tato opatření fyzikálně končí a co se potom musí odehrát v síti před serverem.
Všechny údaje se vztahují k serveru srcds na Debianu 12, Debianu 13, Ubuntu 22.04 LTS nebo Ubuntu 24.04 LTS. Konfigurační soubor leží v garrysmod/cfg/server.cfg, příkazy jsou psané pro uživatele root, jako běžný uživatel před ně předřaďte sudo. Vždy je míněn provoz na vlastním root serveru nebo dedikovaném serveru, ne slot u poskytovatele herních serverů.
Pokud útok právě probíhá: teď neměňte nic v souboru server.cfg a nerestartujte srcds. Nejdřív si zajistěte naměřené hodnoty (oddíl 9), po útoku už budou pryč. Restart vás připraví o čítače a server pak vrátí zpátky do téže záplavy.
Proč server Garry's Mod potřebuje ochranu proti DDoS
Server Garry's Mod svou IP adresu a svůj port zveřejňuje sám. To není omyl, ale předpoklad: kdo nestojí v prohlížeči serverů, nedostane nové hráče. Záznam vzniká tím, že se server přihlásí u Steam master serveru a potom odpovídá na každý dotaz A2S, který přijde zvenčí. Otázka tedy nikdy nezní, jestli útočník vaši adresu najde, ale jen co se stane, když na ni začne střílet.
K tomu přistupuje povaha komunit. Garry's Mod se převážně nehraje v kolech, ale v trvalých světech: komunita DarkRP vede hráčské účty, majetek, profese a postup celé měsíce v databázi. Výpadek v pátek večer proto stojí víc než prohraný zápas, stojí stálé hráče. Právě proto jsou konkurenční komunity, zabanovaní hráči a koupené server booter služby (služby, které za pár eur měsíčně spustí útok na libovolnou adresu) třemi nejčastějšími spouštěči. Útočník k tomu nepotřebuje ani schopnosti, ani znatelné peníze.
Technicky se sbíhají tři zvláštnosti. Herní provoz jede přes UDP, a UDP nezná navázání spojení, které by se dalo vyžadovat: zdrojové adresy se dají podvrhnout. Serverový dotaz leží na stejném portu jako hra, hrubá blokace tedy vždy zasáhne obojí. A nad tím vším leží Lua: každý doplněk z Workshopu přináší vlastní kód do téhož procesu a stačí jediná nechráněná síťová událost, aby jediný klient zpomalil server bez jakékoli šířky pásma. Co je DDoS útok obecně, vysvětluje článek Co je DDoS útok?.
Porty, o které u Garry's Mod ve skutečnosti jde
Server Garry's Mod startuje ve výchozím stavu na portu 27015, a to na UDP pro hru včetně serverového dotazu a na TCP pro RCON. Číslo se mění při spuštění parametrem -port, u více instancí se počítá nahoru (27016, 27017 a tak dále). Typický startovací příkaz vypadá takto:
./srcds_run -game garrysmod -console \
-port 27015 \
+maxplayers 64 \
+gamemode darkrp \
+map rp_downtown_v4c_v2 \
+sv_setsteamaccount VAS_GSLT_TOKEN \
+host_workshop_collection 123456789 \
-authkey VAS_STEAM_WEB_API_KLIC
Z toho vyplývá celá útočná plocha. Následující tabulka je základem pro každé pravidlo firewallu dál v textu:
| Port a protokol | K čemu slouží | Nastavitelné přes | Patří do otevřené sítě |
|---|---|---|---|
| 27015/UDP | herní provoz a dotaz A2S na stejném portu | -port |
ano, to je jediný port, který skutečně musí být otevřený |
| 27015/TCP | RCON, protokol Source RCON | -port (stejné číslo jako hra) |
ne, jen pro vaši vlastní adresu |
| 27005/UDP | klientský port, vychází od hráče | -clientport |
ne, na serveru není žádné pravidlo potřeba |
| 27020/UDP | SourceTV | +tv_port |
jen pokud skutečně vysíláte |
| 26901/UDP | přihlášení u Steam master serveru | odchozí | ne, žádné příchozí pravidlo není potřeba |
| 80/TCP a 443/TCP | FastDL přes sv_downloadurl, pokud webový server leží na stejném stroji |
webový server | jen pokud tam FastDL leží (lepší je oddělit) |
| 3306/TCP | MySQL pro DarkRP a hráčská data (přes modul mysqloo) | bind-address |
ne, výhradně 127.0.0.1 |
| 22/TCP | přístup SSH | sshd_config |
ano, ale omezeně |
Z těchto osmi záznamů patří do otevřené sítě bez omezení přesně jeden: 27015/UDP. Všechno ostatní se buď omezí na vaši vlastní adresu, naváže na 127.0.0.1, nebo se vůbec nespustí. Nejdražší myšlenkovou chybou v této oblasti je domněnka, že u Garry's Mod existuje oddělený query port, který se dá jednoduše zavřít. Ten neexistuje.
Co můžete udělat sami, než utratíte peníze
Tento oddíl je nejdelší, a to záměrně. Čistě nakonfigurovaný server Garry's Mod ustojí malé a střední útoky vlastními silami, nezávisle na tom, u koho stojí. Nic z toho nestojí peníze a většina je hotová za čtvrt hodiny.
1. Inventura: co vlastně 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: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. Na vzrostlém DarkRP serveru se tam téměř vždy najde víc služeb, než se čekalo: MariaDB, webový server pro FastDL, panel, Discord bot, druhý testovací server na 27016 a zapomenutá hlasová služba. Pohled útočníka poskytne sken portů zvenčí:
nmap -Pn -sU -sT -p- --min-rate 1000 VASE.IP.ADRESA.SERVERU
2. Nechat otevřené jen porty, které srcds skutečně potřebuje
Garry's Modu stačí jediné uvolnění navenek, k tomu SSH a omezený přístup k RCon. 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 27015/udp comment 'Garrys Mod 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 na 27020/UDP uvolňujte jen tehdy, když skutečně vysíláte. Úplný návod včetně záchranné cesty najdete v článku Jak nastavit firewall UFW, aniž byste se sami vyzamkli. Pokud se to přesto stane: KVM root servery a dedikované servery od KernelHost nemají IPMI ani iDRAC, zpátky se dostanete přes VNC konzoli v zákaznické sekci. Ta nevisí na síťovém stacku hostovaného systému, pravidlo firewallu uvnitř ji zablokovat nemůže.
Databáze do otevřené sítě v žádném případě nepatří. Zkontrolujte v /etc/mysql/mariadb.conf.d/50-server.cnf, že tam stojí:
bind-address = 127.0.0.1
3. Omezit dotaz A2S, aniž byste vypadli ze seznamu serverů
Tady leží chyba, která stojí většinu serverů Garry's Mod. Protože herní provoz a serverový dotaz zabírají stejný port, vyhodí paušální blokace nebo příliš těsné omezení rychlosti na 27015/UDP vaše vlastní hráče a dokoná útok za útočníka. Správným bodem pro zásah je rozlišení mezi dotazovacími a herními pakety.
Engine k tomu přináší tři konzolové proměnné, které patří do souboru server.cfg. Jejich výchozí hodnoty jsou konzervativní, ale jsou nastavené:
sv_max_queries_sec 3
sv_max_queries_sec_global 60
sv_max_queries_window 30
sv_max_queries_sec omezuje zodpovězené dotazy na jednu zdrojovou adresu (výchozí 3 za sekundu), sv_max_queries_sec_global zastropuje součet přes všechny adresy (výchozí 60 za sekundu), sv_max_queries_window určuje okno pro průměrování (výchozí 30 sekund). Tyto hodnoty chrání procesor před tím, aby zbytečně vytvářel odpovědi. Nezabrání tomu, aby pakety dorazily, a kdo globální hodnotu nastaví velmi těsně, zmizí během útoku z prohlížeče serverů, protože nezodpovězené zůstanou i dotazy stránek se seznamy.
O úroveň níž se dá dotazovací provoz čistě oddělit. Všechny pakety bez spojení u Source Engine začínají čtyřmi nastavenými bajty (0xffffffff), provoz už připojených hráčů tuto hlavičku nemá. Přesně na to se dá pomocí nftables položit omezení rychlosti podle zdrojové adresy:
table inet gmod {
chain input {
type filter hook input priority -10; policy accept;
udp dport 27015 @th,64,32 0xffffffff \
meter a2sflood { ip saddr limit rate over 8/second burst 20 packets } drop
}
}
Soubor nahrajete pomocí nft -f. Priorita -10 zajistí, že pravidlo zabere před filtrovacím řetězcem UFW, a @th,64,32 čte první čtyři bajty za hlavičkou UDP. S klasickým iptables odvede totéž porovnání pomocí u32:
iptables -A INPUT -p udp --dport 27015 \
-m u32 --u32 "0>>22&0x3C@8=0xFFFFFFFF" \
-m hashlimit --hashlimit-name gmod_a2s --hashlimit-mode srcip \
--hashlimit-above 8/sec --hashlimit-burst 20 -j DROP
Jeden bod, který skoro každý návod na internetu zamlčuje: bez spojení není jen serverový dotaz, ale i navázání spojení. Přicházející hráč posílá několik paketů se stejnou hlavičkou, než je ve hře. Příliš těsná mez proto vyzamkne nové hráče, přestože server zůstane dosažitelný. Začněte velkoryse (8 až 15 paketů za sekundu a adresu) a mez přitáhněte teprve tehdy, když jste měřili týden normálního provozu.
4. Zabezpečit RCon, nebo ho úplně vypnout
RCon je u serverů na Source oblíbeným cílem, a to ze tří důvodů zároveň. Zaprvé leží na stejném čísle portu jako hra, jen na TCP, a je tedy nalezený bez hledání. Zadruhé protokol Source RCON přenáší heslo v otevřeném textu, bez TLS a bez výměny klíčů: kdo provoz odposlouchává, má ho. Zatřetí je zisk maximální, protože kdo má RCon, může měnit mapu, zabanovat všechny hráče, změnit konfiguraci a server zastavit. Útočník, který přebere RCon, už žádnou šířku pásma nepotřebuje.
rcon_password nikdy nenechávejte prázdné a nikdy uhodnutelné, hodnota z openssl rand -base64 32 stačí. Proti pokusům o přihlášení přináší engine vlastní brzdu:
rcon_password "ZDE_DLOUHE_NAHODNE_HESLO"
sv_rcon_minfailures 3
sv_rcon_maxfailures 5
sv_rcon_minfailuretime 30
sv_rcon_banpenalty 1440
Tím se adresa po třech neúspěšných pokusech během 30 sekund zablokuje na jeden den. Dvě varování k tomu. Zaprvé přesně tento mechanismus vyzamkne i váš vlastní administrátorský panel, pokud je tam uložené staré heslo: to, co provozovatelé hlásí jako „RCon najednou nefunguje“, je většinou vlastní blokace. Zadruhé zůstává omezení ve firewallu z kroku 2 účinnější, protože pokus vůbec nepustí až k aplikaci. Kdo RCon potřebuje jen občas, nechá port úplně zavřený a pracuje přes přesměrování portu v SSH:
ssh -N -L 27015:127.0.0.1:27015 root@VASE.IP.ADRESA.SERVERU
5. Omezit síťové zprávy v Lua, nejčastější vlastní výpadek
Značná část výpadků serverů Garry's Mod hlášených jako DDoS žádným DDoS není. Jsou to přetížení v Lua, vyvolaná jediným připojeným klientem s několika kilobity za sekundu. Důvod leží ve stavbě knihovny net: jakmile doplněk zaregistruje pomocí util.AddNetworkString síťovou událost a pomocí net.Receive na ni naslouchá, může každý klient tuto událost vyvolávat ve smyčce. Bez vlastního omezení server provede každou jednotlivou zprávu. Facepunch to ve svých hlášeních o chybách několikrát zdokumentoval a řešení v engine nepředpokládal, omezení je výslovně úkolem autora doplňku.
Zkontrolujte proto každý vlastní i každý zakoupený doplněk na tři věci: horní mez na hráče a sekundu, kontrolu délky zprávy a to, že se hráč zjišťuje na straně serveru z druhého parametru, a ne z obsahu zprávy. Nosný vzor vypadá takto:
util.AddNetworkString("khrp_buy")
local budget = {}
net.Receive("khrp_buy", function(len, ply)
if not IsValid(ply) then return end
if len > 256 then return end
local now = CurTime()
local b = budget[ply]
if not b or now - b.start >= 1 then
b = { start = now, count = 0 }
budget[ply] = b
end
b.count = b.count + 1
if b.count > 10 then return end
KHRP.HandleBuy(ply, net.ReadString())
end)
hook.Add("PlayerDisconnected", "khrp_budget_cleanup", function(ply)
budget[ply] = nil
end)
K tomu patří dva řádky v souboru server.cfg. sv_allowcslua je v Garry's Mod ve výchozím stavu na 1 a dovoluje klientům spouštět vlastní kód pomocí lua_run_cl a lua_openscript_cl: u veřejného serveru patří hodnota na 0. A sv_kickerrornum odpojí klienty, kteří vytvoří více než uvedený počet chyb na straně klienta (výchozí 0, tedy vypnuto):
sv_allowcslua 0
sv_kickerrornum 25
6. Oddělit obsah z Workshopu a FastDL od herního serveru
Doplňky z Workshopu nejsou u Garry's Mod okrajové téma, ale běžný stav: komunita DarkRP připojuje svou kolekci pomocí +host_workshop_collection a klienti si tento obsah stahují přímo ze Steamu. Vaši linku to nezatěžuje. Klíč z -authkey je klíč Steam Web API a patří s ním zacházet jako s heslem: do spouštěcího skriptu, ne do veřejného repozitáře a ne do kanálu na Discordu.
Šířku pásma stojí druhá cesta. Všechno, co nepřichází z Workshopu (vlastní mapy, zvuky, materiály), jde přes stahovací kanál. Bez sv_downloadurl běží tento kanál přes samotný herní port a soutěží přímo s herním provozem. S FastDL běží přes HTTP. Když tento webový server leží na stejném stroji a na stejné IP adrese, dělí se oba o stejnou linku: vlna připojení nebo útok na 80/TCP tím zasáhne i hru. Rozumné jsou tyto hodnoty:
sv_downloadurl "https://fastdl.vase-domena.cz/garrysmod/"
sv_allowdownload 1
sv_allowupload 0
net_maxfilesize 64
sv_allowupload 0 bere klientům možnost posílat vlastní soubory na server a zavírá tím cestu, která není ani potřeba, ani pod kontrolou. net_maxfilesize omezuje v megabajtech velikost souborů přenášených herním kanálem. Pokud to jde, položte FastDL na jiný stroj nebo za vlastní jméno, pak zátěž neleží na stejné adrese jako herní port.
7. Zachytit záplavu připojení a vyčerpání slotů
Vyčerpání slotů je útok, který nepotřebuje šířku pásma: útočník obsadí automatizovanými spojeními všechna volná místa, takže skuteční hráči vidí plný server. U Garry's Mod k tomu přitěžuje, že každé připojení stojí server práci, protože se vyjednává seznam prostředků a herní režim, dávno předtím, než je hráč ve hře.
Proti tomu působí čtyři věci. Zaprvé realistická horní mez: nastavit +maxplayers výš, než váš herní režim snese, jen zvětšuje útočnou plochu. Zadruhé sv_timeout, které určuje, po kolika sekundách bez zprávy se klient odpojí (v rozšířených konfiguracích 120): kdo se chce visících polovičních spojení zbavit rychleji, nastaví hodnotu nižší. Zatřetí omezení rychlosti paketů bez spojení z kroku 3, protože navázání spojení jde právě přes ně. Začtvrté, pro zavřené skupiny, heslo serveru:
sv_password "stala_skupina_2026"
sv_timeout 90
sv_filterban 1
sv_region 3
Skutečnou whitelist Garry's Mod nepřináší, ta přichází přes rozšíření jako ULX nebo přes vlastní kontrolu v hooku CheckPassword. A jedno musí být jasné: whitelist chrání vaši herní logiku, ne vaši linku. Útočník, který váš server zaplavuje, vůbec nechce vstoupit. Jeho pakety budou odmítnuty, ale přesto dorazily, a právě v tom je ten bod.
8. Odlehčit jádru: sledování spojení a přijímací vyrovnávací paměť
Tento krok vysvětluje výpadky, které vypadají jako objemový útok, ale nejsou jím. Jádro zakládá pro provoz UDP záznamy ve sledování spojení (conntrack) a při podvržených zdrojových adresách znamená každá adresa nový záznam. Když se tabulka naplní, zahazuje jádro pakety bez rozdílu: útok i vaši hráči vylétnou společně a v systémovém protokolu stojí „nf_conntrack: table full“. Stav a horní mez ukáže:
sysctl net.netfilter.nf_conntrack_count net.netfilter.nf_conntrack_max
Nejúčinnějším krokem je herní provoz vůbec nenechat sledovat, protože engine si své sezení spravuje sám:
table inet raw {
chain prerouting {
type filter hook prerouting priority raw; policy accept;
udp dport { 27015, 27020 } notrack
}
chain output {
type filter hook output priority raw; policy accept;
udp sport { 27015, 27020 } notrack
}
}
S iptables je obdobou iptables -t raw -A PREROUTING -p udp --dport 27015 -j NOTRACK a stejný řádek pro OUTPUT s --sport. Port potom potřebuje výslovné uvolnění, protože bez sledování už nezabere žádné pravidlo, které kontroluje existující stav. Pokud navíc pakety přicházejí rychleji, než je srcds odebírá, přeteče přijímací vyrovnávací paměť, a pro hráče to vypadá jako ztráta paketů na volné lince:
net.core.rmem_max = 16777216
net.core.rmem_default = 1048576
net.core.netdev_max_backlog = 16384
Řádky patří do souboru v /etc/sysctl.d/ a aktivují se pomocí sysctl --system. Jestli jsou potřeba, prozradí jádro samo: stoupá-li UdpRcvbufErrors v nstat -az, pak zabírají. Zůstává-li čítač na nule, úprava nic nezmění. To je rezerva, ne ochrana.
9. Zajistit naměřené hodnoty, dokud vše běží normálně
Nejdůležitější krok je ten, který skoro nikdo neudělá předem: založit si srovnávací základnu. Bez normální hodnoty nedokážete po incidentu říct, jestli bylo 40 000 paketů za sekundu hodně, nebo jestli to byl prostě sobotní večer. Normální hodnotu pro svůj server si jednou spočítejte: 64 hráčů s cl_cmdrate 66 vytvoří zhruba 4 200 příchozích paketů za sekundu, všechno výrazně nad tím si žádá vysvětlení. 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
nstat -az | grep -i udp
tcpdump -ni eth0 -c 200 "udp port 27015 and udp[8:4] = 0xffffffff"
První ukáže pakety a bajty za sekundu, druhý čítače zahozených paketů na rozhraní, třetí čítače chyb UDP v jádře. Čtvrtý řádek ukáže výhradně pakety bez spojení, tedy právě tu třídu, kterou záplava dotazů zneužívá: naplní-li se čítač během sekund, zatímco je připojeno málo lidí, máte svou odpověď. tcpdump vždy omezte 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 na serveru.
Co je A2S reflection a týká se mě ještě
A2S reflection je útok, u kterého není váš server cílem, ale nástrojem. Útočník posílá malý dotaz s podvrženou zdrojovou adresou na tisíce herních serverů a jejich výrazně větší odpovědi se sbíhají u skutečné oběti. Historicky měl dotaz A2S_INFO 25 bajtů (4 bajty 0xFFFFFFFF, 1 bajt 0x54, k tomu 20 bajtů pro řetězec „Source Engine Query“), odpověď naopak několik set bajtů. US-CERT vede protokol Steamu ve svém seznamu zesilovacích útoků s faktorem 5,5, což znamená: z jednoho gigabitu u útočníka se u oběti stane 5,5 gigabitu.
Valve tuto mezeru od listopadu 2020 zavřelo, a to dvěma cestami. Dotazovací pakety bez spojení musí od té doby odesílatel vyplnit na 1 200 bajtů, čímž je dotaz větší než odpověď a faktor zesílení spadne pod 1. Během přechodu si provozovatelé mohli přísnější chování vynutit předem pomocí proměnné prostředí STEAM_GAMESERVER_MIN_CONNECTIONLESS_PACKET_SIZE=1200. Navíc server u A2S_PLAYER a A2S_RULES neodpovídá hned daty, ale výzvou (S2C_CHALLENGE), kterou musí tazatel poslat zpátky ve druhém dotazu. Kdo zdrojovou adresu podvrhuje, tuto výzvu nikdy neuvidí.
Pro vás z toho plynou dvě věci. Udržujte binárku serveru aktuální, protože ochrana je uložená v podloží Steam Gameserveru, a ne ve vaší konfiguraci. A nezaměňujte reflection se záplavou dotazů proti vám samotným: proti druhé formě pomůže výhradně omezení rychlosti z kroku 3 a nad to filtrace v síti před serverem.
Kde tato opatření končí: šířka pásma a paketová rychlost
Teď část, kterou nevyřeší žádný konfigurační soubor. Všechno dosud popsané 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íc. Druhá veličina udeří většinou dřív: u nejmenších možných paketů o velikosti 64 bajtů se do 1 Gbit/s vejde zhruba 1,49 milionu paketů za sekundu, do 10 Gbit/s zhruba 14,88 milionu. Běžné serverové jádro jich podle procesoru a síťové karty zpracuje několik set tisíc, než začne zahazovat. Útok, který vaši linku nezaplní ani do třetiny, tedy může váš server 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ě měli všichni lag spiky“.
| Ukazatel | Hodnota |
|---|---|
| dotaz A2S_INFO, historická velikost | 25 bajtů |
| faktor zesílení protokolu Steamu (US-CERT) | 5,5 |
| minimální velikost dotazovacích paketů bez spojení od roku 2020 | 1 200 bajtů |
| normální provoz: 64 hráčů při cmdrate 66 | zhruba 4 200 příchozích paketů za sekundu |
| 1 Gbit/s při paketech o velikosti 64 bajtů | zhruba 1,49 milionu paketů za sekundu (125 megabajtů za sekundu) |
| 10 Gbit/s při paketech o velikosti 64 bajtů | zhruba 14,88 milionu paketů za sekundu |
| typická velikost útoku proti komunitním herním serverům | 5 až 50 Gbit/s |
| špička naměřená na serverech KernelHost | 473,4 Gbit/s při 41,5 milionu paketů za sekundu |
Pro zařazení, jaké velikosti se reálně vyskytují: na serverech KernelHost byl mimo jiné odfiltrován UDP flood s více než 112,2 Gbit/s a více než 8,7 milionu paketů za sekundu proti hernímu serveru, a dále útok s mnoha vektory s více než 473,4 Gbit/s a více než 41,5 milionu paketů za sekundu proti hlasovému serveru. 473,4 Gbit/s je zhruba 470násobek přípojky 1 Gbit/s a stále ještě zhruba 47násobek přípojky 10 Gbit/s. 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 každém serverovém balíčku
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ž vůbec 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é doby přepnutí, ve kterých by vaši hráči vylétli. 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. Stanovištěm 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é komunity
Některé projekty nejsou napadány příležitostně, ale cíleně a celé týdny, s měnícími se vzory a vždy přesně v hlavním čase. Pro ty 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ší 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 27015/UDP a co na 27015/TCP, bez toho, abyste k 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 nejbližší servisní okno.
- Ochranný profil odpovídající dané hře, pro Garry's Mod a ostatní tituly na Source stejně jako volné profily TCP a UDP pro upravené servery a vlastní aplikace.
I zde platí model PrePaid: žádná minimální doba trvání, žádná výpovědní lhůta, žádná smlouva a žádný zřizovací poplatek. Když vlna útoků skončí, jednoduše neprodloužíte. Kdo svůj server Garry's Mod dosud provozuje jinde, dostane tuto ochranu přes přesun ke KernelHost, protože se filtruje ve vlastní síti, a ne na cizí infrastruktuře.
Srovnání obou stupňů ochrany
| 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í, 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, žá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, Garry's Mod včetně | profil volitelný podle portu, i pro upravené servery |
| Nullrouting během útoku | 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ě komunit Garry's Mod 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 zmizel z prohlížeče serverů“: Většinou byl 27015/UDP paušálně zablokován nebo příliš těsně omezen v rychlosti. Protože herní provoz a dotaz sdílejí stejný port, zasáhne hrubé pravidlo obojí. Pracujte místo toho s porovnáním na pakety bez spojení. Zůstává-li server neviditelný i při dosažitelném portu, zkontrolujte sv_setsteamaccount: bez platného Game Server Login Tokenu je server Garry's Mod v seznamu silně znevýhodněn a každý server potřebuje vlastní token.
„Moje pravidlo iptables je správné a přesto nezabírá“: Časté jsou tři příčiny. Pravidlo stojí až za řetězci UFW a nikdy se na ně nedojde, po posledním restartu bylo pryč (pak pomůže apt-get install -y iptables-persistent a 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, zda stoupají čítače zásahů. Zůstávají-li na nule, pravidlo se nedostane ke slovu.
„Můj DarkRP server se trhá všem, ale linka je klidná“: To je téměř vždy Lua a ne útok na linku. Podívejte se do serverového protokolu, která síťová událost přichází nápadně často, a zkontrolujte u příslušného doplňku omezení na jednoho hráče. Zůstávají-li sar -n DEV 1 10 a čítače zahozených paketů nenápadné, nebyl to DDoS útok.
„RCon najednou nefunguje“: Žádný DDoS, ale většinou vlastní blokace. Administrátorský panel se starým heslem spustí sv_rcon_minfailures a sv_rcon_banpenalty zablokuje adresu na nastavený počet minut. Opravit heslo, zrušit blokaci, potom omezit port na vlastní adresu.
„Vyměnil jsem IP adresu a za dva dny jsem byl zase offline“: To je běžný stav. Váš server novou adresu zveřejní sám, jakmile je znovu přihlášený u master serveru, a herní server bez veřejné adresy nemá hráče. Výměna adresy získá hodiny až dny, řešení to není.
„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.
Stručné shrnutí
- Server Garry's Mod potřebuje přesně jeden otevřený port: 27015/UDP. Herní provoz a dotaz A2S tam běží společně, oddělený query port neexistuje.
- RCon leží na 27015/TCP, přenáší heslo v otevřeném textu a patří uvolnit výhradně na vlastní adresu nebo k němu chodit přes přesměrování portu v SSH.
- Neomezujte port, ale pakety bez spojení s hlavičkou
0xffffffff. Paušální blokace na 27015/UDP vyhodí vaše vlastní hráče. - Nejčastější výpadek u Garry's Mod není DDoS útok, ale síťová událost bez omezení: každá událost zaregistrovaná pomocí
util.AddNetworkStringpotřebuje horní mez na hráče a sekundu. - Při paketech o velikosti 64 bajtů unese linka 1 Gbit/s zhruba 1,49 milionu paketů za sekundu. Nad tím vzniká ztráta na routeru před ní a každé lokální pravidlo je bez účinku.
- U KernelHost je dvoustupňová trvalá ochrana obsažena v každém serverovém balíčku bez příplatku: 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, bez nullroutingu.
- Kdo je trvale a cíleně ostřelován, doplní Advanced DDoS Protection od 50,00 EUR měsíčně: dedikovaná chráněná IP, vlastnoručně spravovatelná pravidla podle portu a protokolu, účinná v reálném čase.
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. Uveďte přitom hned čtyři údaje: IP adresu, port, časové rozmezí ve vašem časovém pásmu a co vidíte (hráči vylétávají, server není v prohlížeči, lag spiky). Během probíhajícího útoku nás navíc zastihnete přes nouzový chat na WhatsAppu na čísle +43 650 8209883.
Kdo vedle Garry's Mod provozuje další titul na Source, najde společné základy v článku Jak ochránit servery CS2 a Source před DDoS útoky, a jak se čistě postaví podloží, stojí v článku Instalace herního serveru pomocí SteamCMD.
Časté dotazy
Můj server Garry's Mod je právě offline. Je to DDoS útok?
Které porty server Garry's Mod skutečně potřebuje?
Můžu zablokovat query port, aby záplava dotazů přestala?
Proč je RCon u Garry's Mod tak oblíbeným cílem útoku?
Co je mezera A2S reflection a týká se mě ještě?
Proč moje pravidlo firewallu během útoku nic nepřinese?
Můj DarkRP server má lag spiky, ale linka je klidná. Čím to je?
Půjde můj server u KernelHost během útoku offline?
Kdy potřebuji navíc 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.

