Jak ochránit server Terraria před DDoS útoky
Proč Terraria mluví jen přes TCP, které porty server skutečně potřebuje, jak zabezpečit serverconfig.txt, TShock a REST API na 7878, a od jaké velikosti útoku pomůže už jen filtrace v síti před serverem.
Kdo chce ochránit svůj server Terraria před DDoS útoky, má co do činění se zvláštním případem: Terraria mluví výhradně přes TCP. Herní provoz běží přes přesně jeden port, 7777 TCP, a UDP port hra neotevírá vůbec. Téměř všechny rady k ochraně herních serverů, které kolují po internetu, jsou psané pro hry na UDP a míří tady buď do prázdna, nebo na špatné místo.
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 Terraria (vanilla, TShock nebo tModLoader) 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 v konfiguraci a server nerestartujte: zajistěte si naměřené hodnoty (viz oddíl „Logování“), po útoku už budou pryč.
Proč DDoS útoky zasahují právě servery Terraria
Servery Terraria jsou pohodlný cíl, protože jejich adresa je nutně veřejná. Vanilla Terraria nemá vestavěný prohlížeč serverů: hráči se připojují přes „Multiplayer“ a „Join via IP“, tedy přes adresu, kterou musel někdo předem zveřejnit. Kdo chce nové hráče, zapíše server na seznamové stránky jako terraria-servers.com, tserverweb.com nebo topg.org, nebo rozdá adresu přes Discord. Každá z těchto cest dává útočníkovi totéž, co dává hráči: IP adresu a port v otevřeném textu.
Pokud server Terraria trvale padá, aniž by se na hardwaru, světě a seznamu modů cokoli změnilo, je útok tím nejpravděpodobnějším vysvětlením. K tomu přistupuje typické rozložení takového projektu: pevné hrací časy, konkurenční servery, zabanovaní hráči a spory v komunitě. Útok nestojí toho, kdo si ho zadá, ani schopnosti, ani znatelné peníze, Terraria server booter se prodává jako předplatné za pár eur měsíčně. Co je DDoS útok technicky a jak se staví, vysvětluje článek Co je DDoS útok?.
Terraria běží přes TCP, ne přes UDP
To je nejdůležitější rozdíl proti prakticky každému jinému hernímu serveru. Dedikovaný server Terraria přijímá spojení TCP listenerem (v engine hry je to třída Terraria.Net.Sockets.TcpSocket) a neotevírá žádný UDP socket. To má čtyři důsledky, které určují celou vaši obranu:
- Plně navázané spojení TCP nelze podvrhnout. Útočník musí přijmout SYN-ACK serveru, aby handshake dokončil. Kdo je tedy skutečně připojen, přichází ze skutečné adresy. Blokování IP adres a horní meze počtu spojení proto u Terrarie fungují výrazně lépe než u hry na UDP.
- Záplavu SYN naopak podvrhnout lze, protože handshake nikdy nedokončí. Proti tomuto druhu nepomůže žádné blokování IP adres, ale výhradně SYN cookies a filtrace před serverem.
- Každé přijaté spojení TCP na port 7777 zabírá prostředky v herním procesu, ne jen v jádře. To dělá z vyčerpání slotů nejúčinnější útok s nejmenší šířkou pásma.
- UDP flood váš server zasáhne i tak. Pakety nemusí být přijaty, aby naplnily vaši linku. To, že Terraria nemluví přes UDP, linku nechrání, zabraňuje jen tomu, aby pakety zpracovával sám herní proces.
Jedna výjimka existuje: pokud se dedikovaný server spustí s -steam a -lobby friends nebo -lobby private, běží spojení přes síť Steamu a tím přes UDP porty v rozsahu 27000 až 27100. To je jiný provozní režim a ne klasický server dosažitelný přes IP adresu.
Porty, o které ve skutečnosti jde
Server Terraria potřebuje v otevřené síti přesně jeden port: 7777 TCP. Všechno ostatní v této tabulce do internetu buď nepatří vůbec, nebo jen pro vaši vlastní adresu.
| Účel | Port | Protokol | Kde se nastavuje | Do otevřené sítě? |
|---|---|---|---|---|
| Herní provoz Terrarie | 7777 | TCP | serverconfig.txt: port=7777 |
ano, jako jediný |
| Terraria přes UDP | žádný | žádné | hra neotevírá žádný UDP socket | ne |
| Query port nebo stavový port | žádný | žádné | vanilla Terraria nemá vlastní dotazovací protokol | ne |
| RCON | žádný | žádné | Terraria nemá RCON, vzdálená správa jen přes TShock | ne |
| REST API TShocku | 7878 | TCP | tshock/config.json: RestApiPort |
ne |
| Server tModLoaderu | 7777 | TCP | stejný serverconfig.txt |
ano, jako jediný |
Režim Steamu (-steam -lobby) |
27000 až 27100 | UDP | jen v provozním režimu Steamu | ne |
| Pterodactyl Wings | 8080 | TCP | démon panelu | ne, jen vlastní adresa |
| Pterodactyl SFTP | 2022 | TCP | SFTP panelu | ne, jen vlastní adresa |
| SSH | 22 | TCP | /etc/ssh/sshd_config |
jen vlastní adresa |
To, že Terraria nezná ani query port, ani RCON, je pro zabezpečení dobrá zpráva: dva koncové body, které se u Counter-Strike, Rustu nebo ARKu pravidelně zneužívají k reflexním útokům, tady prostě neexistují. Zato je útočná plocha tím silněji soustředěná na port 7777, a kdo používá TShock, přidává si s portem 7878 druhou plochu.
Co můžete udělat sami, než utratíte peníze
Tento oddíl je nejdelší, a to záměrně. Čistě nakonfigurovaný server Terraria ustojí malé a střední útoky vlastními silami, nezávisle na tom, u koho stojí.
1. Inventura: co vůbec naslouchá?
Než napíšete jediné pravidlo, podívejte se, co váš server nabízí navenek. Nehádat, podívat se:
ss -lntup
Zajímavý je sloupec s lokální adresou. 0.0.0.0:7777 znamená „dosažitelné z celého internetu“, 127.0.0.1:7878 znamená „jen lokálně“ a nepotřebuje žádné pravidlo firewallu. Pokud se v tomto seznamu objeví UDP záznam pro váš proces Terrarie, běží server v režimu Steamu. Pohled útočníka poskytne sken portů zvenčí:
nmap -Pn -p- --min-rate 1000 VASE.IP.ADRESA.SERVERU
2. Nechat otevřený jen 7777 TCP, všechno ostatní zavřít
Terrarii stačí jediné povolení navenek. Pravidlo pro UDP nepotřebujete, a pravidlo pro 7777 UDP by bylo prostě chybné: pouštělo by provoz na port, na kterém nic nenaslouchá. 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 7777/tcp comment 'Terraria'
ufw allow from 203.0.113.10 to any port 7878 proto tcp comment 'TShock REST'
ufw default deny incoming
ufw default allow outgoing
ufw --force enable
ufw status verbose
Nahraďte 203.0.113.10 svou vlastní adresou. Úplný návod včetně záchranné cesty najdete v článku Jak nastavit firewall UFW, aniž byste se sami vyzamkli. Kdo provozuje panel, omezí i 8080 a 2022 na vlastní adresu.
3. serverconfig.txt: správně nastavit heslo, maxplayers a secure
Ústřední konfigurační soubor serveru Terraria se jmenuje serverconfig.txt a při spuštění se předává pomocí -config serverconfig.txt. Pro zabezpečení jsou rozhodující čtyři direktivy:
port=7777
maxplayers=16
password=DlouheNahodneHeslo
secure=1
upnp=0
banlist=banlist.txt
password= je nejúčinnější bezplatné opatření proti záplavám připojení, které jdou běžnou cestou. Důvod leží v protokolu: klient posílá nejdřív zprávu 1 se svým označením verze (například Terraria279), server při nastaveném hesle odpoví zprávou 37, klient musí správně odpovědět zprávou 38, a teprve poté posílá server zprávou 3 povolení včetně hráčského slotu. Bez správného hesla se tedy útočník nikdy nedostane až k přenosu světa, což je ta drahá část připojení.
maxplayers přijímá hodnoty od 1 do 255, výchozí hodnota je 16 (před verzí 1.4.0.1 to bylo 8). Horní mez 255 není libovolné číslo: Terraria adresuje hráče jediným bajtem. Nenastavujte maxplayers výš, než skutečně potřebujete, protože každý slot je prostředek, který může útočník zabrat. secure=1 zapíná vestavěnou kontrolu cheatů (na příkazové řádce -secure), upnp=0 zabrání tomu, aby server na vlastní pěst otevíral porty na routeru.
4. Zabezpečit TShock: REST API na 7878 a záplava přihlášení
TShock je nejrozšířenější serverové rozšíření pro Terrarii a s REST API přináší druhou, plnohodnotnou útočnou plochu. Leží standardně na portu 7878 TCP a konfiguruje se v tshock/config.json, tedy ne v serverconfig.txt. Ve výchozím stavu je vypnuté ("RestApiEnabled": false) a přesně tak by mělo zůstat, dokud ho nepotřebujete.
Pokud ho potřebujete, jsou relevantní tyto hodnoty:
"RestApiEnabled": true,
"RestApiPort": 7878,
"EnableTokenEndpointAuthentication": true,
"LogRest": true,
"RESTMaximumRequestsPerInterval": 5,
"RESTRequestBucketDecreaseIntervalMinutes": 1
Dvě věci jsou na tom důležité. Zaprvé koncový bod /status vydá bez tokenu jméno serveru, port, počet hráčů a jména hráčů, dokud stojí EnableTokenEndpointAuthentication na false. To je pohodlné pro stavové stránky a Discord boty a zároveň je to bezplatný průzkum pro každého útočníka, který chce vědět, kdy se útok vyplatí. Zadruhé koncový bod /v2/token/create vytváří z uživatelského jména a hesla přístupový token a je dosažitelný zvenčí, jakmile je port 7878 otevřený: útok na heslo vašeho administrátorského účtu, který navíc stojí výpočetní čas. Kbelík tvořený hodnotami RESTMaximumRequestsPerInterval a RESTRequestBucketDecreaseIntervalMinutes to zpomalí, ale pravidlo firewallu nenahradí.
Pro samotný přístup do hry platí další hodnoty TShocku. MaximumLoginAttempts stojí na 3 a po třech neúspěšných pokusech hráče vyhodí. RequireLogin (standardně false) vyžaduje účet pro každého hráče. EnableIPBans (standardně true) a KickProxyUsers (standardně true) jsou u hry na TCP zvlášť účinné, protože zdrojová adresa navázaného spojení podvržená být nemůže. Proti griefingu, který se často hlásí jako útok, působí prahové hodnoty TileKillThreshold (60), TilePlaceThreshold (20), TileLiquidThreshold (15) a ProjectileThreshold (50), vždy jako akce za sekundu.
5. Omezit počet spojení podle zdrojové adresy a zkontrolovat SYN cookies
Protože Terraria jezdí na TCP, je nejúčinnějším lokálním pravidlem horní mez současných spojení podle zdrojové adresy. Skutečný hráč potřebuje přesně jedno:
iptables -I INPUT -p tcp --dport 7777 --syn -m connlimit --connlimit-above 3 --connlimit-mask 32 -j DROP
iptables -I INPUT -p tcp --dport 7777 --syn -m hashlimit --hashlimit-name terraria_syn --hashlimit-mode srcip --hashlimit-above 10/min --hashlimit-burst 20 -j DROP
První pravidlo zahazuje nová spojení, jakmile má jedna adresa více než tři z nich otevřená současně. Druhé omezuje rychlost pokusů o spojení ze stejného zdroje na deset za minutu s rezervou 20. Obě čísla jsou výchozí hodnoty, ne pravdy: server za společnou přípojkou (spolubydlení, školní síť, mobilní operátor) vidí několik legitimních hráčů pod stejnou adresou. Měřte nejdřív týden v normálním provozu.
Samotná pravidla iptables jsou po restartu pryč, na Debianu a Ubuntu se ukládají takto:
apt-get install -y iptables-persistent
netfilter-persistent save
Pod UFW patří taková pravidla do /etc/ufw/before.rules, protože jinak při příštím ufw reload zmizí. Proti podvrženým paketům SYN, které handshake nikdy nedokončí, nepomůže žádné z těchto pravidel, ale samo jádro. Zkontrolujte tři hodnoty:
sysctl net.ipv4.tcp_syncookies net.ipv4.tcp_max_syn_backlog net.core.somaxconn
net.ipv4.tcp_syncookies musí stát na 1, na Debianu a Ubuntu to tak zpravidla už je. SYN cookies se obejdou bez frontu polootevřených spojení a rekonstruují stav z odpovědi klienta, záplava SYN tím jde do prázdna, dokud není linka plná. net.core.somaxconn stojí od Linuxu 5.4 na 4096 a předtím na 128: je-li hodnota malá, zahazuje jádro hotově navázaná spojení, ještě než je herní proces vůbec přijme.
6. Zabránit vyčerpání slotů: proč vám sken portů naplní server
Vyčerpání slotů je nejlevnější účinný útok na server Terraria: útočník otevře na port 7777 tolik spojení TCP, kolik má server hráčských slotů, a drží je otevřená. Nestojí ho to téměř žádnou šířku pásma, ale server tím naplní. Skuteční hráči vidí „Server is full“ a už se nedostanou dovnitř, přičemž na vaší lince se nic nápadného neděje. Právě to je důvod, proč provozovatelé u Terrarie často nepoznají, že jsou napadáni.
Příčina leží ve způsobu počítání: spojení se přijme, ještě než klient vůbec pošle své označení verze. Historicky zůstávala taková duchová spojení obsazená, dokud sezení TCP nevypršelo. Řada 1.4.5 to zmírnila, tam se pro klienty, kteří se hned zase odpojí, už žádné sloty nerezervují. V prvních vydáních 1.4.5.7 a 1.4.5.8 ale dedikovaný server padal s neodchycenou výjimkou ObjectDisposedException, jakmile se spojení TCP otevřelo a handshake se nedokončil. Stačilo nc -z nebo kontrola dostupnosti z monitoringu. Chyba byla během několika týdnů tiše opravena, ve starších kontejnerových obrazech místy ještě je. Držte proto svou verzi serveru aktuální, tady to není obecná fráze, ale konkrétní otázka dostupnosti.
Dodatečně pomáhají dvě nastavení. Kdo používá TShock, nastaví MaxSlots na požadovaný počet hráčů a maxplayers v serverconfig.txt o dva místa výš: pak TShock přebývající spojení odmítne čistou hláškou, místo aby je herní proces pustil do poslední mezery. A horní mez počtu spojení z předchozího oddílu je přesně to pravidlo, které jedné adrese zabrání zabrat všechny sloty naráz.
7. Vypnout UPnP a nezveřejňovat adresu sami
Server Terraria se standardně pokouší otevřít svůj port na routeru přes UPnP. Na pronajatém serveru je to bez účinku, v domácí síti to otevírá porty, o kterých později nebudete vědět. Vypněte to pomocí upnp=0 v serverconfig.txt nebo pomocí -noupnp na příkazové řádce.
Tady se navíc vyplatí čestnost místo zbožných přání: vaši IP adresu nelze udržet v tajnosti. Zná ji každý hráč, který byl jednou připojen, a záznam na seznamové stránce ji zveřejní tak jako tak. Účinné jsou dva zvyky. Nezveřejňujte surovou IP adresu nikde sami, ale spojujte své hráče přes jméno hostitele: klient Terrarie jméno hostitele přeloží, v nouzi tedy můžete adresu vyměnit, aniž by se všechny odkazy rozbily. A uklízejte staré záznamy DNS, protože zapomenutý záznam A na předchozí adresu učiní každou výměnu bezúčinnou.
8. Stavové dotazy ukládat do mezipaměti místo jejich předávání
Protože Terraria nemá dotazovací protokol, zjišťují stavové stránky, Discord boti a seznamové stránky stav vašeho serveru jednou ze dvou cest: buď navážou skutečné spojení TCP na 7777 a vydávají se za klienta, nebo se dotazují REST API TShocku. Obojí stojí váš server práci a obojí roste s počtem dotazujících.
Protiopatření nestojí nic: nikdy se nedotazujte od návštěvníka. Nechte jedinou službu vyzvedávat stav v pevných odstupech (30 nebo 60 sekund stačí), výsledek ukládejte do mezipaměti a všem návštěvníkům vydávejte uložený stav. Tím vytvoří hodně navštěvovaná stavová stránka jeden dotaz za interval místo jednoho na návštěvníka. Kdo k tomu používá REST API, omezí port 7878 na adresu této jediné služby.
9. Logovat, abyste v nouzi měli data
Nejdůležitější krok je ten, který skoro nikdo neudělá předem: založit si srovnávací základnu, dokud všechno běží normálně. Bez normální hodnoty nedokážete po incidentu říct, jestli bylo 40 000 paketů za sekundu hodně, nebo jestli to byl prostě sobotní večer. S apt-get install -y vnstat sysstat běží měření trvale. Během incidentu stačí pět příkazů:
sar -n DEV 1 10
ss -s
ss -tn state syn-recv | wc -l
ip -s link show eth0
tcpdump -ni eth0 tcp port 7777 -c 200 -q
Třetí příkaz je ten specifický pro Terrarii: počítá polootevřená spojení. Dvoumístná hodnota je normální, čtyř nebo pětimístná je záplava SYN. ss -s vedle toho ukazuje celkový počet spojení TCP, a pokud toto číslo přibližně odpovídá vašemu maxplayers, zatímco ve hře nikdo není, vidíte vyčerpání slotů. U tcpdump platí: vždy omezit pomocí -c, záznam při plném zatížení dodatečně zatěžuje už tak přetížený server. Jak naměřené hodnoty vyhodnotit, stojí v článku Jak poznat DDoS útok.
Kde tato opatření končí
Teď část, kterou nevyřeší žádný konfigurační soubor. Všechna dosavadní opatření běží na vašem serveru, tedy na konci linky. Pravidlo firewallu rozhoduje o paketu, který už po kabelu proběhl. Můžete ho zahodit, ale nemůžete ho udělat neodeslaným.
Spočítejte si to jednou. 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. Útoky proti projektům herních serverů této velikosti leží obvykle mezi 5 a 50 Gbit/s, tedy na pěti až padesátinásobku vaší linky. Jestli je vaše pravidlo connlimit za ní dobré, už pak nehraje roli, protože pakety vašich hráčů se dřív skrz nedostanou. Právě tak vznikají lag spiky serveru Terraria, u kterých vytížení CPU vypadá normálně.
Druhou veličinou je paketová rychlost a udeří často dřív než šířka pásma. U malých paketů o velikosti 64 bajtů se do linky s 1 Gbit/s vejde zhruba 1,49 milionu paketů za sekundu. Běžné jádro serveru jich podle CPU a síťové karty zpracuje několik set tisíc, než začne zahazovat. U záplavy SYN leží hranice ještě níž, protože každý paket SYN vyvolá rozhodnutí o stavu: už několik desítek tisíc paketů SYN za sekundu stačí k tomu, aby ochromily přijímání spojení běžného Linuxu, dávno předtím, než je linka plná. Provozovatelé to zažívají jako „vytížení přece vůbec nebylo vysoké, a stejně bylo všechno pryč“.
A třetí bod je ten, který se u Terrarie přehlíží nejčastěji: útočník se neřídí vaším protokolem. Posílá UDP floody a reflexní provoz na vaši adresu, přestože na žádném UDP portu nic nenaslouchá. Váš server tyto pakety správně zahodí, ale ty už zabraly vaši linku, a váš server Terraria jde offline, aniž by jediný paket dosáhl herního procesu. Pro zařazení, jaké řádové velikosti se skutečně vyskytují: na serverech KernelHost byly mimo jiné odfiltrovány útok s více než 473,4 Gbit/s při více než 41,5 milionu paketů za sekundu a UDP flood s více než 112,2 Gbit/s na herní server. Na to neexistuje žádné lokální nastavení. Volumetrické útoky musí skončit v síti před serverem.
Co proti tomu staví KernelHost
Trvalá ochrana, která je v ceně každého serveru
Ochrana proti DDoS od KernelHost je postavená dvoustupňově a je trvale aktivní, aniž byste museli cokoli zapínat, objednávat nebo konfigurovat:
- Stupeň 1: 17 Tbps mitigační kapacity v globální scrubbingové síti. Volumetrické útoky se čistí blízko svého zdroje, ještě než dorazí do datacentra.
- Stupeň 2: filtrace Arbor v reálném čase s 3,2 Tbps ve Frankfurtu nad Mohanem. Přímo před serverem se rozpoznávají a zahazují vzory specifické pro jednotlivé protokoly, paket po paketu. Pro Terrarii to konkrétně znamená: záplavy SYN a záplavy spojení proti 7777 TCP končí tady, ne na vaší síťové kartě.
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 takové případy 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, co je povolené na 7777 TCP, a všechno ostatní můžete zavřít, 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, například přitáhnout povolenou rychlost spojení podle zdrojové adresy.
- Ochranný profil odpovídající aplikaci. Pro hry na TCP jako Terraria a pro vlastní nebo upravené aplikace na libovolných TCP nebo UDP portech existují odpovídající profily.
Srovnání obou stupňů
| Vlastnost | Zahrnutá trvalá ochrana proti DDoS | Advanced DDoS Protection |
|---|---|---|
| Cena | obsažena v každém serverovém balíčku, bez příplatku | od 50,00 EUR měsíčně, PrePaid |
| Filtrační kapacita | 17 Tbps globální scrubbing plus filtrace Arbor v reálném čase s 3,2 Tbps ve Frankfurtu nad Mohanem | stejná dvoustupňová filtrace |
| IP adresa | IP adresa vašeho serveru | navíc dedikovaná chráněná IP |
| Sada pravidel | automatické profily, žádná konfigurace není nutná | vlastní pravidla podle portu a protokolu v zákaznické sekci |
| Změny | probíhají automaticky | projeví se v reálném čase, i během útoku |
| Profil pro Terrarii | automatický profil pro herní servery na TCP | vlastní sada pravidel pro 7777 TCP, i pro tModLoader a TShock |
| 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ů Terraria stačí zahrnutá trvalá ochrana spolu s čistou konfigurací serveru. Advanced DDoS Protection je odpovědí na to, že si to někdo vzal osobně. Kdo svůj server provozuje momentálně jinde, nedostane ochranu dodatečně namontovanou, ale přestěhováním ke KernelHost: filtrace je součástí sítě, ne doplňkem na serveru.
Časté chyby a jejich řešení
„Server je plný, ale nikdo v něm není“: To je vyčerpání slotů. Zkontrolujte pomocí ss -tn dst :7777 | wc -l, kolik spojení je skutečně otevřených, a srovnejte to se seznamem hráčů (serverová konzole: playing). Pokud čísla nesouhlasí, zabírají sloty cizí spojení. Protijedem jsou horní mez počtu spojení podle zdrojové adresy, serverové heslo a aktuální verze serveru.
„Povolil jsem 7777 UDP a nic se nezměnilo“: Správně, protože na 7777 UDP nic nenaslouchá. Terraria používá výhradně TCP. Povolení UDP přímo neškodí, je ale zbytečným otevřením a bezpečnou známkou toho, že byl zkopírován návod pro jinou hru.
„Moje pravidla iptables nezabírají“: Časté jsou tři příčiny. Pravidla stojí až za řetězci UFW a nikdy se na ně nedojde, po posledním restartu byla pryč (pak pomůže netfilter-persistent save nebo záznam v /etc/ufw/before.rules), nebo je útok volumetrický a pravidlo pracuje správně na lince, která je už plná. Zkontrolujte pomocí iptables -L INPUT -n -v, zda stoupají čítače zásahů. Zůstávají-li na nule, pravidlo se nedostane ke slovu.
„Hráči vypadávají, přestože žádný útok neběží“: Pokud stáhnete svou mez connlimit příliš těsně, zasáhne to hráče za společnými přípojkami. U TCP se to stane rychleji než u her na UDP, protože opětovné připojení po výpadku okamžitě vytvoří nové spojení, zatímco to staré ještě visí ve stavu TIME_WAIT. Zvyšujte hodnotu po krocích a sledujte čítače zásahů.
„Server seká, linka je tichá“: To je častěji mod nebo plugin než útok. Pod tModLoaderem stojí každý další mod výpočetní čas ve stejném procesu a svět s mnoha entitami vytíží jedno jádro naplno, aniž by dorazil jediný paket navíc. Zůstává-li sar -n DEV 1 10 nenápadné, nebyl to DDoS útok.
„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 Terraria potřebuje přesně jeden otevřený port: 7777 TCP. Hra neotevírá žádný UDP socket, nemá dotazovací protokol ani RCON.
- REST API TShocku na portu 7878 TCP je druhá útočná plocha. Nechte
RestApiEnablednafalse, nebo port omezte na svou vlastní adresu. - Serverové heslo v
serverconfig.txtje nejúčinnější bezplatné opatření, protože útočník se bez správné odpovědi na zprávu 37 nikdy nedostane až k přenosu světa. - Vyčerpání slotů je u Terrarie nejlevnější útok: každé přijaté spojení TCP na 7777 zabere místo, a to bez znatelné šířky pásma. Proti tomu působí horní mez podle zdrojové adresy, heslo a aktuální verze serveru.
- Protože Terraria používá TCP, nelze zdrojovou adresu navázaného spojení podvrhnout: blokování IP adres tady funguje lépe než u her na UDP. Proti podvrženým záplavám SYN pomohou jen SYN cookies a filtrace před serverem.
- UDP flood ochromí váš server Terraria, přestože nemluví přes UDP, protože naplní linku, ještě než herní proces cokoli uvidí.
- Přibližně od velikosti vaší uplinkové šířky pásma rozhoduje výhradně síť před serverem. U KernelHost je tato filtrace dvoustupňová, trvale aktivní a bez příplatku obsažená v každém serverovém balíčku.
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
Jaký port a jaký protokol potřebuje server Terraria?
Proč je důležité, že Terraria používá TCP místo UDP?
Můj server Terraria hlásí Server is full, přestože nikdo nehraje. Co to je?
Pomáhá serverové heslo proti útokům?
Jak zabezpečím REST API TShocku na portu 7878?
Kolik hráčů mám zapsat do maxplayers?
Můžu se pomocí iptables nebo UFW bránit proti DDoS útoku?
Od jaké velikosti útoku to můj server Terraria nezvládne sám?
Proč mě zasáhne útok na UDP, když Terraria UDP vůbec nepoužívá?
Jde můj server u KernelHost během útoku offline?
Stojí ochrana proti DDoS u KernelHost něco navíc?
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.

