Terraria-server beschermen tegen DDoS-aanvallen

Gepubliceerd op 20 min leestijd

Waarom Terraria alleen TCP spreekt, welke poorten de server werkelijk nodig heeft, hoe u serverconfig.txt, TShock en de REST-API op 7878 afschermt, en vanaf welke aanvalsgrootte alleen filtering in het netwerk vóór de server nog helpt.

Wie zijn Terraria-server wil beschermen tegen DDoS-aanvallen, heeft met een bijzonder geval te maken: Terraria spreekt uitsluitend TCP. Het spelverkeer loopt over precies één poort, 7777 TCP, en een UDP-poort opent het spel helemaal niet. Bijna alle adviezen die op het net over gameserverbescherming circuleren, zijn voor UDP-spellen geschreven en grijpen hier ofwel in het luchtledige ofwel op de verkeerde plek.

Dit artikel laat eerst zien wat u zonder extra kosten zelf kunt afschermen, daarna waar die maatregelen technisch ophouden, en tot slot wat er dan in het netwerk vóór de server moet gebeuren. Alle gegevens gaan uit van een Terraria-dedicated-server (vanilla, TShock of tModLoader) onder Debian 12, Debian 13, Ubuntu 22.04 LTS of Ubuntu 24.04 LTS. De commando's zijn voor root geschreven; als gewone gebruiker zet u er sudo voor. Loopt de aanval op dit moment, verander dan eerst niets aan de configuratie en start de server niet opnieuw op: leg de meetwaarden vast (zie de paragraaf "Vastleggen"), na de aanval zijn ze verdwenen.

Waarom juist Terraria-servers door DDoS-aanvallen worden getroffen

Terraria-servers zijn een gemakkelijk doelwit, omdat hun adres onvermijdelijk openbaar is. Vanilla-Terraria heeft geen ingebouwde serverbrowser: spelers verbinden via "Multiplayer" en "Join via IP", dus via een adres dat iemand vooraf bekend moet hebben gemaakt. Wie nieuwe spelers wil, schrijft de server in op lijstsites als terraria-servers.com, tserverweb.com of topg.org, of verspreidt het adres via Discord. Elk van die wegen levert een aanvaller hetzelfde als de speler: IP-adres en poort in leesbare vorm.

Gaat een Terraria-server voortdurend offline hoewel er aan hardware, wereld en modlijst niets is veranderd, dan is een aanval daarom de waarschijnlijkste verklaring. Daar komt de typische constellatie van een project bij: vaste speeltijden, concurrerende servers, verbannen spelers en ruzie in de community. Een aanval kost de opdrachtgever kunde noch noemenswaardig geld, een Terraria server booter wordt als abonnement voor een paar euro per maand verkocht. Wat een DDoS-aanval technisch is en hoe hij wordt opgebouwd, legt het artikel Wat is een DDoS-aanval? uit.

Terraria loopt over TCP, niet over UDP

Dat is het belangrijkste verschil met vrijwel elke andere gameserver. De Terraria-dedicated-server neemt verbindingen aan met een TCP-listener (in de spelengine de klasse Terraria.Net.Sockets.TcpSocket) en opent geen UDP-socket. Dat heeft vier gevolgen die uw hele verdediging bepalen:

  • Een volledig opgebouwde TCP-verbinding laat zich niet vervalsen. De aanvaller moet het SYN-ACK van de server ontvangen om de handshake af te ronden. Wie dus werkelijk verbonden is, komt van een echt adres. IP-blokkades en bovengrenzen voor verbindingen werken bij Terraria daarom duidelijk beter dan bij een UDP-spel.
  • Een SYN-flood laat zich wel degelijk vervalsen, omdat hij de handshake nooit afrondt. Tegen die soort helpt geen IP-blokkade, maar uitsluitend SYN-cookies en filtering ervóór.
  • Elke aangenomen TCP-verbinding naar poort 7777 bezet middelen in het spelproces, niet alleen in de kernel. Dat maakt slotuitputting tot de werkzaamste aanval met de geringste bandbreedte.
  • Een UDP-flood treft uw server toch. De pakketten hoeven niet te worden aangenomen om uw lijn te vullen. Dat Terraria geen UDP spreekt, beschermt de lijn niet, het verhindert alleen dat het spelproces zelf de pakketten verwerkt.

Er is één uitzondering: start men de dedicated server met -steam en -lobby friends of -lobby private, dan loopt de verbinding over het Steam-netwerk en daarmee over UDP-poorten in het bereik 27000 tot 27100. Dat is een andere bedrijfsmodus en niet de klassieke, via het IP-adres bereikbare server.

De poorten waar het werkelijk om gaat

Een Terraria-server heeft precies één poort op het open internet nodig: 7777 TCP. Al het andere in deze tabel hoort ofwel helemaal niet op het internet ofwel alleen op uw eigen adres.

Doel Poort Protocol Waar ingesteld Op het open internet?
Terraria-spelverkeer 7777 TCP serverconfig.txt: port=7777 ja, als enige
Terraria over UDP geen geen het spel opent geen UDP-socket nee
Query- of statuspoort geen geen Vanilla-Terraria heeft geen eigen opvraagprotocol nee
RCON geen geen Terraria heeft geen RCON, afstandsbesturing alleen via TShock nee
TShock REST-API 7878 TCP tshock/config.json: RestApiPort nee
tModLoader-server 7777 TCP dezelfde serverconfig.txt ja, als enige
Steam-modus (-steam -lobby) 27000 tot 27100 UDP alleen in de Steam-bedrijfsmodus nee
Pterodactyl Wings 8080 TCP Paneel-daemon nee, alleen eigen adres
Pterodactyl SFTP 2022 TCP Paneel-SFTP nee, alleen eigen adres
SSH 22 TCP /etc/ssh/sshd_config alleen eigen adres

Dat Terraria noch een querypoort noch RCON kent, is voor de afscherming goed nieuws: de twee endpoints die bij Counter-Strike, Rust of ARK regelmatig voor reflection-aanvallen worden misbruikt, bestaan hier eenvoudigweg niet. Daarvoor is het aanvalsoppervlak des te sterker geconcentreerd op poort 7777, en wie TShock inzet, haalt er met poort 7878 een tweede oppervlak bij.

Wat u zelf kunt doen voordat u geld uitgeeft

Dit hoofdstuk is het langste, en dat met opzet. Een netjes geconfigureerde Terraria-server houdt kleine en middelgrote aanvallen op eigen kracht uit, ongeacht bij wie hij staat.

1. Inventarisatie: wat luistert er eigenlijk?

Voordat u ook maar één regel schrijft, kijkt u na wat uw server naar buiten aanbiedt. Niet gokken, maar kijken:

ss -lntup

Interessant is de kolom met het lokale adres. 0.0.0.0:7777 betekent "vanaf het hele internet bereikbaar", 127.0.0.1:7878 betekent "alleen lokaal" en heeft geen firewallregel nodig. Duikt er in die lijst een UDP-vermelding voor uw Terraria-proces op, dan draait de server in de Steam-modus. Het beeld van de aanvaller levert een poortscan van buitenaf:

nmap -Pn -p- --min-rate 1000 UW.SERVER.IP.ADRES

2. Alleen 7777 TCP openlaten en al het andere sluiten

Voor Terraria volstaat één enkele openstelling naar buiten. Een UDP-regel hebt u niet nodig, en een UDP-regel voor 7777 zou gewoonweg verkeerd zijn: ze laat verkeer door naar een poort waarop helemaal niets luistert. Met UFW ziet dat er zo uit, en wel precies in deze volgorde, zodat u zichzelf niet buitensluit:

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

Vervang 203.0.113.10 door uw eigen adres. De volledige handleiding inclusief reddingsweg vindt u onder UFW-firewall instellen zonder uzelf buiten te sluiten. Wie een paneel draait, beperkt ook 8080 en 2022 tot het eigen adres.

3. serverconfig.txt: wachtwoord, maxplayers en secure juist instellen

Het centrale configuratiebestand van de Terraria-server heet serverconfig.txt en wordt bij de start met -config serverconfig.txt meegegeven. Vier directieven zijn voor de afscherming doorslaggevend:

port=7777
maxplayers=16
password=EenLangWillekeurigWachtwoord
secure=1
upnp=0
banlist=banlist.txt

password= is de werkzaamste kosteloze maatregel tegen joinfloods die de reguliere weg nemen. De reden ligt in het protocol: een client stuurt eerst bericht 1 met zijn versieaanduiding (bijvoorbeeld Terraria279), de server antwoordt bij een ingesteld wachtwoord met bericht 37, de client moet met bericht 38 correct antwoorden, en pas daarna stuurt de server met bericht 3 de vrijgave inclusief spelersslot. Zonder het juiste wachtwoord komt een aanvaller dus nooit tot de overdracht van de wereld, het dure deel van een toetreding.

maxplayers neemt waarden van 1 tot 255 aan, de standaardinstelling is 16 (vóór versie 1.4.0.1 was het 8). De bovengrens van 255 is geen willekeurig getal: Terraria adresseert spelers met één enkele byte. Zet maxplayers niet hoger dan u werkelijk nodig hebt, want elk slot is een middel dat een aanvaller kan bezetten. secure=1 schakelt de ingebouwde cheatcontrole in (op de commandoregel -secure), upnp=0 verhindert dat de server op eigen houtje poorten op een router opent.

4. TShock afschermen: REST-API op 7878 en loginflood

TShock is de meest verbreide serveruitbreiding voor Terraria en brengt met de REST-API een tweede, volwaardig aanvalsoppervlak mee. Die ligt standaard op poort 7878 TCP en is in tshock/config.json geconfigureerd, dus niet in de serverconfig.txt. In de uitleveringstoestand staat ze uit ("RestApiEnabled": false), en precies zo hoort ze te blijven zolang u ze niet nodig hebt.

Hebt u ze wel nodig, dan zijn deze waarden relevant:

"RestApiEnabled": true,
"RestApiPort": 7878,
"EnableTokenEndpointAuthentication": true,
"LogRest": true,
"RESTMaximumRequestsPerInterval": 5,
"RESTRequestBucketDecreaseIntervalMinutes": 1

Twee dingen zijn daaraan belangrijk. Ten eerste levert het endpoint /status zonder token servernaam, poort, spelersaantal en spelersnamen uit, zolang EnableTokenEndpointAuthentication op false staat. Dat is handig voor statuspagina's en Discord-bots en tegelijk kosteloze verkenning voor elke aanvaller die wil weten wanneer een aanval loont. Ten tweede maakt het endpoint /v2/token/create uit gebruikersnaam en wachtwoord een toegangstoken, en het is van buitenaf bereikbaar zodra poort 7878 open staat: een wachtwoordraadaanval tegen uw beheerdersaccount, die en passant rekentijd kost. De emmer uit RESTMaximumRequestsPerInterval en RESTRequestBucketDecreaseIntervalMinutes remt dat af, maar vervangt geen firewallregel.

Voor de speltoegang zelf gelden verdere TShock-waarden. MaximumLoginAttempts staat op 3 en gooit een speler er na drie mislukte pogingen uit. RequireLogin (standaard false) verlangt een account voor elke speler. EnableIPBans (standaard true) en KickProxyUsers (standaard true) zijn bij een TCP-spel bijzonder werkzaam, omdat het bronadres van een opgebouwde verbinding nu eenmaal niet vervalst kan zijn. Tegen griefing, dat vaak als aanval wordt gemeld, werken de drempelwaarden TileKillThreshold (60), TilePlaceThreshold (20), TileLiquidThreshold (15) en ProjectileThreshold (50), telkens acties per seconde.

5. Verbindingen per bronadres begrenzen en SYN-cookies controleren

Omdat Terraria op TCP draait, is de werkzaamste lokale regel een bovengrens voor gelijktijdige verbindingen per bronadres. Een echte speler heeft er precies één nodig:

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

De eerste regel verwerpt nieuwe verbindingen zodra één adres er meer dan drie tegelijk open heeft staan. De tweede begrenst de snelheid van de verbindingspogingen uit dezelfde bron tot tien per minuut met een speelruimte van 20. Beide getallen zijn startwaarden, geen waarheden: een server achter een gedeelde aansluiting (studentenhuis, schoolnetwerk, mobiele provider) ziet meerdere legitieme spelers onder hetzelfde adres. Meet daarom eerst een week lang in normaal bedrijf.

Kale iptables-regels zijn na een herstart verdwenen; onder Debian en Ubuntu bewaart u ze zo:

apt-get install -y iptables-persistent
netfilter-persistent save

Onder UFW horen zulke regels in /etc/ufw/before.rules, omdat ze anders bij de volgende ufw reload verdwijnen. Tegen vervalste SYN-pakketten die de handshake nooit afronden, helpt geen van deze regels, maar de kernel zelf. Controleer de drie waarden:

sysctl net.ipv4.tcp_syncookies net.ipv4.tcp_max_syn_backlog net.core.somaxconn

net.ipv4.tcp_syncookies moet op 1 staan, op Debian en Ubuntu is dat doorgaans al het geval. SYN-cookies zien af van de wachtrij met halfopen verbindingen en reconstrueren de toestand uit het antwoord van de client; een SYN-flood loopt daarmee in het luchtledige, zolang de lijn niet vol zit. net.core.somaxconn staat sinds Linux 5.4 op 4096 en daarvoor op 128: is de waarde klein, dan verwerpt de kernel volledig opgebouwde verbindingen voordat het spelproces ze überhaupt kan aannemen.

6. Slotuitputting verhinderen: waarom een poortscan uw server vult

Slotuitputting is de goedkoopste werkzame aanval op een Terraria-server: de aanvaller opent zoveel TCP-verbindingen naar poort 7777 als de server spelersslots heeft, en houdt ze open. Dat kost hem bijna geen bandbreedte, maar vult wel de server. Echte spelers zien "Server is full" en komen er niet meer in, hoewel er op uw lijn niets opvallends gebeurt. Precies dat is de reden waarom beheerders bij Terraria vaak niet merken dat ze worden aangevallen.

De oorzaak ligt in de manier van tellen: een verbinding wordt aangenomen voordat de client zijn versieaanduiding überhaupt heeft gestuurd. Historisch bleven zulke spookverbindingen bezet totdat de TCP-sessie was verlopen. De 1.4.5-reeks heeft dat verzacht, daar worden voor clients die zich meteen weer losmaken geen slots meer gereserveerd. In de eerste uitgaven van 1.4.5.7 en 1.4.5.8 stortte de dedicated server echter neer met een onafgehandelde ObjectDisposedException zodra een TCP-verbinding werd geopend en de handshake niet werd afgerond. Een nc -z of een bereikbaarheidscontrole van een monitoring volstond al. De fout is binnen enkele weken stil verholpen, in oudere containerimages zit hij deels nog. Houd uw serverversie daarom actueel; dat is hier geen gemeenplaats, maar een concrete kwestie van beschikbaarheid.

Twee instellingen helpen daarnaast. Wie TShock gebruikt, zet MaxSlots op het gewenste spelersaantal en maxplayers in de serverconfig.txt twee plaatsen hoger: dan verwerpt TShock overtollige verbindingen met een nette melding, in plaats van dat het spelproces ze in het laatste gat laat. En de bovengrens voor verbindingen uit de vorige paragraaf is precies de regel die één enkel adres verhindert om alle slots tegelijk te bezetten.

7. UPnP uitschakelen en het adres niet zelf publiceren

De Terraria-server probeert standaard zijn poort via UPnP op een router te openen. Op een gehuurde server is dat zinloos, in een thuisnetwerk opent het poorten waar u later niets meer van weet. Schakel het uit met upnp=0 in de serverconfig.txt of met -noupnp op de commandoregel.

Hier loont bovendien eerlijkheid meer dan wensdenken: uw IP-adres laat zich niet geheimhouden. Iedere speler die ooit verbonden is geweest, kent het, en een vermelding op een lijstsite publiceert het sowieso. Werkzaam zijn twee gewoonten. Publiceer het kale IP-adres nergens zelf, maar laat uw spelers via een hostnaam verbinden: de Terraria-client lost een hostnaam op, u kunt het adres in geval van nood dus wisselen zonder dat alle verwijzingen breken. En ruim oude DNS-records op, want een vergeten A-record naar het vorige adres maakt elke wissel zinloos.

8. Statusopvragingen tussentijds opslaan in plaats van doorgeven

Omdat Terraria geen opvraagprotocol heeft, bepalen statuspagina's, Discord-bots en lijstsites de toestand van uw server op een van twee manieren: ze bouwen een echte TCP-verbinding naar 7777 op en doen zich voor als client, of ze vragen de TShock-REST-API op. Beide kosten uw server werk, en beide schalen mee met het aantal opvragers.

De tegenmaatregel kost niets: vraag nooit vanuit de bezoeker op. Laat één enkele dienst de status op vaste intervallen ophalen (30 of 60 seconden volstaan), sla het resultaat tussentijds op en lever alle bezoekers de tussentijds opgeslagen stand uit. Daarmee veroorzaakt een druk bezochte statuspagina één opvraag per interval in plaats van één per bezoeker. Wie daarvoor de REST-API gebruikt, beperkt poort 7878 tot het adres van die ene dienst.

9. Vastleggen zodat u in geval van nood gegevens hebt

De belangrijkste stap is die welke bijna niemand vooraf zet: een vergelijkingsbasis aanleggen zolang alles normaal draait. Zonder normaalwaarde kunt u na een incident niet zeggen of 40.000 pakketten per seconde veel was of gewoon zaterdagavond. Met apt-get install -y vnstat sysstat loopt de meting permanent mee. Tijdens een incident volstaan vijf commando's:

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

Het derde commando is het terraria-specifieke: het telt de halfopen verbindingen. Een tweecijferige waarde is normaal, een vier- of vijfcijferige is een SYN-flood. ss -s toont daarnaast het totale aantal TCP-verbindingen, en komt dat getal ongeveer overeen met uw maxplayers terwijl er in het spel niemand is, dan ziet u een slotuitputting. Voor tcpdump geldt: begrens hem altijd met -c, want een opname onder volle belasting belast een toch al overbelaste server nog extra. Hoe u de waarden uitleest, staat in DDoS-aanval herkennen.

Waar deze maatregelen ophouden

Nu het deel dat geen enkel configuratiebestand kan oplossen. Alle maatregelen tot hier draaien op uw server, dus aan het einde van de lijn. Een firewallregel beslist over een pakket dat al over de kabel is gekomen. U kunt het verwerpen, maar u kunt niet terugdraaien dat het verstuurd is.

Rekent u even mee. Een typische gameserver hangt aan 1 Gbit/s, dat is 125 megabyte per seconde, en de lijn zit vol zodra iemand meer stuurt. Aanvallen op gameserverprojecten van deze omvang liggen doorgaans tussen 5 en 50 Gbit/s, dus op het vijf- tot vijftigvoudige van uw lijn. Of uw connlimit-regel daarachter goed is, doet dan niet meer ter zake, want de pakketten van uw spelers komen al eerder niet door. Precies zo ontstaan lag-spikes op een Terraria-server waarbij de CPU-belasting er normaal uitziet.

De tweede grootheid is de pakketsnelheid, en die slaat vaak eerder toe dan de bandbreedte. Bij kleine pakketten van 64 byte passen er in een lijn van 1 Gbit/s ongeveer 1,49 miljoen pakketten per seconde. Een gewone serverkernel verwerkt daarvan, afhankelijk van CPU en netwerkkaart, enkele honderdduizenden voordat hij begint te verwerpen. Bij een SYN-flood ligt de grens nog lager, omdat elk SYN-pakket een toestandsbeslissing uitlokt: al enkele tienduizenden SYN-pakketten per seconde volstaan om de verbindingsaanname van een standaard-Linux plat te leggen, lang voordat de lijn vol zit. Beheerders ervaren dat als "de belasting was helemaal niet hoog en toch was alles weg".

En het derde punt is het punt dat bij Terraria het vaakst over het hoofd wordt gezien: een aanvaller richt zich niet naar uw protocol. Hij stuurt UDP-vloeden en reflection-verkeer naar uw adres, hoewel er op geen enkele UDP-poort iets luistert. Uw server verwerpt die pakketten correct, maar ze hebben uw lijn al bezet, en uw Terraria-server gaat offline zonder dat één enkel pakket het spelproces heeft bereikt. Ter oriëntatie, welke ordes van grootte werkelijk voorkomen: op KernelHost-servers zijn onder meer een aanval met meer dan 473,4 Gbit/s bij meer dan 41,5 miljoen pakketten per seconde en een UDP-flood met meer dan 112,2 Gbit/s op een gameserver weggefilterd. Daarvoor bestaat geen lokale instelling. Volumetrische aanvallen moeten in het netwerk vóór de server eindigen.

Wat KernelHost daartegenover zet

De permanente bescherming die bij elke server inbegrepen is

De DDoS-bescherming van KernelHost is in twee lagen opgebouwd en permanent actief, zonder dat u iets hoeft in te schakelen, te bestellen of te configureren:

  • Laag 1: 17 Tbps mitigatiecapaciteit in het globale scrubbing-netwerk. Volumetrische aanvallen worden dicht bij hun bron geschoond, nog voordat ze het datacenter bereiken.
  • Laag 2: Arbor realtime filtering met 3,2 Tbps in Frankfurt am Main. Direct vóór de server worden protocolspecifieke patronen herkend en verworpen, pakket voor pakket. Voor Terraria betekent dat concreet: SYN-vloeden en verbindingsfloods tegen 7777 TCP eindigen hier, niet op uw netwerkkaart.

Twee eigenschappen zijn doorslaggevend. De bescherming loopt permanent en hoeft niet eerst op een aanval te reageren, dus er zijn geen eerste minuten waarin de server weg is. En er wordt geen null-routing toegepast: uw IP-adres blijft in het netwerk, alleen de kwaadaardige pakketten worden verworpen. Wie het IP-adres uit het netwerk haalt, bereikt voor u hetzelfde resultaat als de aanvaller. De locatie is Frankfurt am Main. Welke games en protocollen gedekt zijn, somt Gameserver-DDoS-bescherming in realtime op.

Advanced DDoS Protection voor projecten die permanent onder vuur liggen

Sommige projecten worden niet af en toe, maar gericht en wekenlang aangevallen. Daarvoor is er de Advanced DDoS Protection vanaf 50,00 € per maand, PrePaid, zonder minimale looptijd en zonder installatiekosten. Het verschil zit niet in meer capaciteit, maar in de controle:

  • Een dedicated beschermd IP-adres uit het Frankfurtse kernnetwerk, waarnaar uw server binnen ons eigen netwerk wordt omgezet. Aan uw kant is geen enkele aanpassing nodig.
  • Zelf beheerbare beschermingsregels per poort en protocol in het klantenpaneel: u stelt in wat op 7777 TCP is toegestaan, en kunt al het andere dichtzetten zonder daarvoor een ticket te schrijven.
  • Wijzigingen gelden in realtime, u kunt dus tijdens een lopende aanval bijsturen, bijvoorbeeld de toegestane verbindingssnelheid per bronadres strakker trekken.
  • Een beschermingsprofiel dat bij de toepassing past. Voor TCP-spellen zoals Terraria en voor eigen of aangepaste applicaties op willekeurige TCP- of UDP-poorten bestaan passende profielen.

De twee lagen naast elkaar

Kenmerk Inbegrepen permanente DDoS-bescherming Advanced DDoS Protection
Prijs in elk serverpakket inbegrepen, zonder meerprijs vanaf 50,00 € per maand, PrePaid
Filtercapaciteit 17 Tbps globale scrubbing plus Arbor realtime filtering met 3,2 Tbps in Frankfurt am Main dezelfde filtering in twee lagen
IP-adres het IP-adres van uw server een extra dedicated beschermd IP-adres
Regelset automatische profielen, geen configuratie nodig eigen regels per poort en protocol in het klantenpaneel
Wijzigingen lopen automatisch mee gelden in realtime, ook tijdens een aanval
Profiel voor Terraria automatisch profiel voor TCP-gameservers eigen regelset voor 7777 TCP, ook voor tModLoader en TShock
Null-routing nee nee
Looptijd gekoppeld aan het serverpakket PrePaid, geen minimale looptijd, geen opzegtermijn, geen installatiekosten

Voor de meeste Terraria-projecten volstaat de inbegrepen permanente bescherming samen met een nette serverconfiguratie. De Advanced DDoS Protection is het antwoord op iemand die het persoonlijk maakt. Wie zijn server momenteel ergens anders draait, krijgt de bescherming niet achteraf ingebouwd, maar door de verhuizing naar KernelHost: de filtering is onderdeel van het netwerk, niet een toevoeging op de server.

Veelgemaakte fouten en oplossingen

"De server is vol, maar er zit niemand in": dat is een slotuitputting. Controleer met ss -tn dst :7777 | wc -l hoeveel verbindingen er werkelijk open staan, en vergelijk dat met de spelerslijst (serverconsole: playing). Komen de getallen niet overeen, dan bezetten vreemde verbindingen de slots. Tegenmiddelen zijn de bovengrens voor verbindingen per bronadres, een serverwachtwoord en een actuele serverversie.

"Ik heb 7777 UDP vrijgegeven en het verandert niets": klopt, want op 7777 UDP luistert niets. Terraria gebruikt uitsluitend TCP. De UDP-vrijgave schaadt niet direct, maar ze is een onnodige opening en een zeker teken dat er een handleiding voor een ander spel is gekopieerd.

"Mijn iptables-regels grijpen niet": drie oorzaken komen vaak voor. De regels staan achter de UFW-ketens en worden nooit bereikt, ze waren na de laatste herstart verdwenen (dan helpen netfilter-persistent save of een regel in /etc/ufw/before.rules), of de aanval is volumetrisch en de regel werkt correct aan een lijn die al vol zit. Controleer met iptables -L INPUT -n -v of de tellers oplopen. Blijven ze op nul staan, dan wordt de regel niet bereikt.

"Spelers vliegen eruit hoewel er geen aanval loopt": trekt u uw connlimit-grens te strak, dan treft dat spelers achter gedeelde aansluitingen. Bij TCP gebeurt dat sneller dan bij UDP-spellen, omdat een herverbinding na een onderbreking meteen een nieuwe verbinding aanmaakt terwijl de oude nog in TIME_WAIT hangt. Verhoog de waarde stapsgewijs en houd de tellers in de gaten.

"De server hapert, de lijn is rustig": dat is vaker een mod of een plug-in dan een aanval. Onder tModLoader kost elke extra mod rekentijd in hetzelfde proces, en een wereld met veel entiteiten belast een kern volledig zonder dat er één pakket te veel aankomt. Blijft sar -n DEV 1 10 onopvallend, dan was het geen DDoS-aanval.

"Mijn vorige aanbieder heeft mijn IP-adres geblokkeerd": dat is null-routing. De aanbieder beschermt daarmee zijn eigen netwerk; voor u is het resultaat identiek aan een geslaagde aanval, meestal nog urenlang daarna. Vraag bij twijfel na of er wordt gefilterd of null-geroutet. Dat antwoord bepaalt meer over uw beschikbaarheid dan welke hardwarespecificatie ook.

"In de tcpdump zie ik niets opvallends": wordt het verkeer al in het netwerk ervoor gefilterd, dan komt er op de server zoals verwacht niets aan. Dat is het normale beeld bij een werkende filtering. Omgekeerd geldt: zit de lijn vol, dan bereikt u onder omstandigheden zelfs de SSH-sessie niet meer waarmee u wilde meten. Gebruik dan de VNC-console in het klantenpaneel, die losstaat van het netwerk van het gastsysteem.

Kort samengevat

  • Een Terraria-server heeft precies één open poort nodig: 7777 TCP. Het spel opent geen UDP-socket, heeft geen opvraagprotocol en geen RCON.
  • De TShock-REST-API op poort 7878 TCP is het tweede aanvalsoppervlak. Laat RestApiEnabled op false staan of beperk de poort tot uw eigen adres.
  • Een serverwachtwoord in de serverconfig.txt is de werkzaamste kosteloze maatregel, omdat een aanvaller zonder correct antwoord op bericht 37 nooit tot de overdracht van de wereld komt.
  • Slotuitputting is bij Terraria de goedkoopste aanval: elke aangenomen TCP-verbinding naar 7777 bezet een plaats, geheel zonder noemenswaardige bandbreedte. Daartegen werken een bovengrens per bronadres, een wachtwoord en een actuele serverversie.
  • Omdat Terraria TCP gebruikt, laat het bronadres van een opgebouwde verbinding zich niet vervalsen: IP-blokkades werken hier beter dan bij UDP-spellen. Tegen vervalste SYN-vloeden helpen alleen SYN-cookies en filtering ervóór.
  • Een UDP-flood legt uw Terraria-server plat hoewel hij geen UDP spreekt, want hij vult de lijn voordat het spelproces ook maar iets ziet.
  • Vanaf ongeveer de omvang van uw uplinkbandbreedte beslist uitsluitend het netwerk vóór de server. Bij KernelHost is die filtering in twee lagen opgebouwd, permanent actief en zonder meerprijs in elk serverpakket inbegrepen.

Draait uw project al bij KernelHost, dan is de filtering actief zonder dat u iets hoeft te doen. Merkt u toch iets ongewoons, open dan een supportticket, zodat wij de filterregels voor uw IP-adres bijstellen. Bij een lopende aanval bereikt u ons daarnaast via de WhatsApp-noodchat op +43 650 8209883.

Veelgestelde vragen

Welke poort en welk protocol heeft een Terraria-server nodig?
Een Terraria-server heeft precies één poort nodig: 7777 TCP. Dat is de standaardinstelling en staat in de serverconfig.txt onder port=7777. Een UDP-poort opent het spel niet, er is ook geen eigen querypoort en geen RCON. Wie TShock inzet, heeft daarnaast de REST-API op poort 7878 TCP, die in de uitleveringstoestand uit staat. Een UDP-vrijgave voor 7777 is overbodig en een zeker teken dat er een handleiding voor een ander spel is gekopieerd. tModLoader gebruikt dezelfde poorten als de vanilla-server.
Waarom is het belangrijk dat Terraria TCP gebruikt in plaats van UDP?
Omdat het de werkzame tegenmaatregelen omkeert. Een volledig opgebouwde TCP-verbinding laat zich niet vervalsen, want de aanvaller moet het SYN-ACK van de server ontvangen. IP-blokkades en bovengrenzen voor verbindingen per bronadres werken bij Terraria daarom duidelijk beter dan bij een UDP-spel. Een SYN-flood laat zich daarentegen wel degelijk vervalsen, omdat hij de handshake nooit afrondt: daartegen helpen alleen SYN-cookies in de kernel en filtering in het netwerk vóór de server.
Mijn Terraria-server meldt Server is full hoewel er niemand speelt. Wat is dat?
Dat is een slotuitputting, de goedkoopste werkzame aanval op een Terraria-server. De aanvaller opent zoveel TCP-verbindingen naar poort 7777 als de server spelersslots heeft, en houdt ze open. Dat kost bijna geen bandbreedte, maar vult wel alle plaatsen. Controleer met ss -tn dst :7777 | wc -l het aantal open verbindingen en vergelijk dat met de serverconsole en het commando playing. Tegenmiddelen zijn een bovengrens voor verbindingen per bronadres, een serverwachtwoord en een actuele serverversie.
Helpt een serverwachtwoord tegen aanvallen?
Tegen joinfloods wel, tegen volumetrische aanvallen niet. De reden ligt in het protocol: een client stuurt eerst bericht 1 met zijn versieaanduiding, de server antwoordt bij een ingesteld wachtwoord met bericht 37, de client moet met bericht 38 correct antwoorden, en pas daarna volgt met bericht 3 de vrijgave inclusief spelersslot. Zonder het juiste wachtwoord komt een aanvaller nooit tot de overdracht van de wereld, het dure deel van een toetreding. Ingesteld wordt het in de serverconfig.txt met password= of op de commandoregel met -password.
Hoe scherm ik de TShock-REST-API op poort 7878 af?
Het veiligst door haar helemaal niet in te schakelen: in tshock/config.json staat RestApiEnabled in de uitleveringstoestand op false. Hebt u haar nodig, zet dan EnableTokenEndpointAuthentication op true, want anders levert het endpoint /status zonder token servernaam, poort, spelersaantal en spelersnamen uit. Schakel LogRest in, laat RESTMaximumRequestsPerInterval op 5 staan bij een interval van één minuut, en beperk poort 7878 in de firewall tot uw eigen adres.
Hoeveel spelers moet ik bij maxplayers invullen?
Zoveel als u werkelijk nodig hebt, want elk slot is een middel dat een aanvaller kan bezetten. maxplayers neemt waarden van 1 tot 255 aan, de standaardinstelling is 16, vóór versie 1.4.0.1 was het 8. De bovengrens van 255 komt doordat Terraria spelers met één enkele byte adresseert. Wie TShock gebruikt, zet MaxSlots op het gewenste spelersaantal en maxplayers in de serverconfig.txt twee plaatsen hoger, zodat TShock overtollige verbindingen met een nette melding afwijst.
Kan ik mij met iptables of UFW verweren tegen een DDoS-aanval?
Tegen kleine aanvallen en verbindingsfloods wel, tegen volumetrische aanvallen niet. Een firewallregel op de server beslist over pakketten die al over uw lijn zijn gekomen. Zit de lijn vol, dan komen de pakketten van uw spelers al eerder niet meer door, hoe goed uw regelset ook is. Bij Terraria loont een connlimit-regel op 7777 TCP toch de moeite, omdat ze slotuitputting werkzaam verhindert. Volumetrische aanvallen moeten in het netwerk vóór de server eindigen.
Vanaf welke omvang redt mijn Terraria-server het niet meer alleen?
Een typische gameserver hangt aan 1 Gbit/s, wat overeenkomt met 125 megabyte per seconde. Aanvallen op projecten van deze omvang liggen doorgaans tussen 5 en 50 Gbit/s. Even belangrijk is de pakketsnelheid: in 1 Gbit/s passen bij pakketten van 64 byte ongeveer 1,49 miljoen pakketten per seconde, terwijl een gewone serverkernel er maar enkele honderdduizenden van verwerkt. Bij een SYN-flood ligt de grens nog lager, omdat elk SYN-pakket een toestandsbeslissing uitlokt. Een aanval kan u dus platleggen hoewel de bandbreedte niet is uitgeput.
Waarom treft een UDP-aanval mij, hoewel Terraria helemaal geen UDP gebruikt?
Omdat een aanvaller zich niet naar uw protocol richt. Hij stuurt UDP-vloeden en reflection-verkeer naar uw IP-adres, hoewel daar geen UDP-dienst luistert. Uw server verwerpt die pakketten correct, maar ze hebben uw lijn al bezet, en uw Terraria-server gaat offline zonder dat één enkel pakket het spelproces heeft bereikt. Dat Terraria geen UDP spreekt, beschermt dus alleen de applicatie, niet de lijn. Daartegen helpt uitsluitend filtering in het netwerk vóór de server.
Gaat mijn server bij KernelHost tijdens een aanval offline?
Nee. Er wordt geen null-routing toegepast. Uw IP-adres blijft in het netwerk, alleen de kwaadaardige pakketten worden verworpen. De bescherming is in twee lagen opgebouwd: 17 Tbps mitigatiecapaciteit in het globale scrubbing-netwerk en een Arbor realtime filtering met 3,2 Tbps in Frankfurt am Main. Ze loopt permanent en hoeft niet eerst op een aanval te reageren, dus er zijn geen eerste minuten waarin de server weg is. Voor Terraria betekent dat concreet: SYN-vloeden en verbindingsfloods tegen 7777 TCP eindigen daar en niet op uw netwerkkaart.
Kost de DDoS-bescherming bij KernelHost extra?
Nee. De permanente bescherming in twee lagen zit bij elk serverpakket zonder meerprijs inbegrepen en is vanaf de oplevering actief. U hoeft haar niet te bestellen, niet in te schakelen en niet te configureren. Wie zijn Terraria-server momenteel ergens anders draait, kan de bescherming niet achteraf inbouwen, want de filtering is onderdeel van het netwerk en geen toevoeging op de server. De aanbeveling is in dat geval de verhuizing naar KernelHost.
Wanneer heb ik daarnaast de Advanced DDoS Protection nodig?
Wanneer uw project niet af en toe, maar gericht en wekenlang wordt aangevallen en u de filtering zelf wilt sturen. U krijgt een dedicated beschermd IP-adres en beheert de beschermingsregels per poort en protocol zelf in het klantenpaneel: u stelt in wat op 7777 TCP is toegestaan, en kunt al het andere dichtzetten. Wijzigingen gelden in realtime, u kunt dus tijdens een lopende aanval bijsturen. De prijs begint bij 50,00 € per maand, PrePaid, zonder minimale looptijd en zonder installatiekosten.

Terraria Terraria-DDoS-Schutz TShock tModLoader Gameserver-Schutz Port 7777 Port 7878 Advanced DDoS Protection