Mordhau-server beschermen tegen DDoS-aanvallen

Gepubliceerd op 22 min leestijd

Welke vier UDP-poorten een Mordhau-server werkelijk nodig heeft, hoe u querypoort 27015, beacon-poort 15000 en RCON afschermt, en vanaf welke aanvalsgrootte alleen filtering in het netwerk vóór de server nog helpt.

Een Mordhau-server die midden in de Frontline-ronde al zijn spelers tegelijk verliest, daarna een paar minuten offline is en niet meer in de serverlijst opduikt, heeft zelden een hardwareprobleem. In verreweg de meeste gevallen loopt er een aanval op een van de vier UDP-poorten die een dedicated Mordhau-server naar buiten open moet houden. Dit artikel laat eerst zien wat u bij de Mordhau-DDoS-bescherming zonder extra kosten zelf kunt afhandelen, daarna waar die maatregelen fysiek ophouden, en tot slot wat er in het netwerk vóór de server moet gebeuren.

Alle gegevens hebben betrekking op de officiële dedicated Mordhau-server (Steam-app-ID 629800, Unreal Engine 4) 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, maar leg de meetwaarden vast (paragraaf 9), want na de aanval zijn ze weg. Bij Mordhau komt daar een tweede reden bij die veel beheerders pijnlijk leren: het serverproces schrijft bij het afsluiten zijn stand uit het werkgeheugen terug naar de Game.ini. Wie het bestand bewerkt terwijl de server draait, verliest zijn wijzigingen bij de volgende stop.

Waarom Mordhau-servers DDoS-bescherming nodig hebben en wie ze aanvalt

Mordhau-servers worden aangevallen omdat hun adres openbaar is, al het spelverkeer over UDP loopt en een uitval meteen voor iedereen zichtbaar wordt. De vermelding in de serverbrowser bevat het IP-adres en de spelpoort leesbaar, omdat spelers de server anders niet zouden kunnen vinden. Openbare serverlijsten en trackers halen dezelfde gegevens via de Steam-querypoort op en publiceren ze een tweede keer. Uw adres is daarmee geen geheim, maar een productgegeven.

Daar komt de techniek van het spel bij. Unreal Engine 4 draagt bewegingen, treffers en pareringen over UDP over. UDP kent geen verbindingsopbouw die u zou kunnen eisen, en het afzenderadres van een UDP-pakket laat zich vervalsen. Een aanvaller hoeft uw server dus niet te betreden en hoeft hem ook niet correct aan te spreken om belasting te veroorzaken. Bij Mordhau weegt dat zwaarder dan bij veel andere spellen: een slagenwisseling wordt in enkele tienden van een seconde beslist, en al 200 milliseconden extra vertraging maken het nabijgevecht onspeelbaar, ruim voordat de server daadwerkelijk uitvalt. Precies daarom is een kleine aanval genoeg om een ronde te verwoesten. Wat een DDoS-aanval in detail is, legt het artikel Wat is een DDoS-aanval? uit.

De typische aanleidingen zijn weinig spectaculair: concurrentie tussen communities, verbannen spelers, verloren duels, ruzie in Discord. Een aanval kost de opdrachtgever kunde noch noemenswaardig geld, omdat gehuurde booterdiensten het werk doen. Beheerders melden regelmatig dat de aanvallen precies dan beginnen wanneer de server vol is, en ophouden zodra hij leeg is. Dat is geen toeval, maar een aanwijzing dat iemand uw vermelding in de serverbrowser in de gaten houdt en het spelersaantal als aanleiding gebruikt.

De poorten waar het bij Mordhau werkelijk om gaat

Een dedicated Mordhau-server heeft naar buiten precies vier UDP-poorten nodig: 7777, 7778, 15000 en 27015. Al het overige is of optioneel, of het hoort niet op het open netwerk. De poorten worden bij de start als parameter meegegeven:

./MordhauServer.sh FFA_ThePit -log -Port=7777 -QueryPort=27015 -BeaconPort=15000 -RconPort=27020
Poort Protocol Waarvoor Ingesteld via
7777 UDP Spelpoort: al het spelverkeer van de netwerklaag van Unreal Engine 4 -Port=
7778 UDP Steam-poort, volgt uit de spelpoort plus één afgeleid
15000 UDP Beacon-poort: reserveert het slot terwijl de speler de map laadt -BeaconPort=
27015 UDP Steam-querypoort (A2S): levert naam, map en spelersaantal aan de serverbrowser -QueryPort=
vrij te kiezen TCP RCON volgens het Source-RCON-protocol, standaard niet ingeschakeld RconPort= in de Game.ini of -RconPort=
22 TCP SSH-toegang van het besturingssysteem, hoort niet bij het spel systeemdienst

Twee dingen worden daarbij regelmatig verkeerd begrepen. Ten eerste: de beacon-poort 15000 is geen bijzaak. De beacon reserveert het slot op het moment dat een speler toetreedt, zodat deze na het laden van de map er niet weer uit vliegt. Is 15000 geblokkeerd of overbelast, dan komen spelers niet meer binnen, hoewel poort 7777 antwoordt. Ten tweede: RCON is bij Mordhau niet voorgeconfigureerd. Het wordt pas actief wanneer u RconPassword en RconPort instelt, en loopt dan over TCP, niet over UDP.

De belangrijkste kerngegevens van een Mordhau-server in één overzicht:

Kerngegeven Waarde
Steam-app-ID dedicated server 629800 (spelclient: 629760)
Configuratiemap onder Linux Mordhau/Saved/Config/LinuxServer/
Configuratiemap onder Windows Mordhau\Saved\Config\WindowsServer\
Configuratiebestanden Game.ini (spel en sessie), Engine.ini (netwerk en tickrate)
Standaard tickrate 60, via NetServerMaxTickRate te verhogen naar 120
Gebruikelijk aantal sloten tot 64 via MaxSlots, coöpmodi duidelijk minder
Pakketten per speler en richting bij tickrate 60 orde van grootte 60 pakketten per seconde
Spelverkeer van een volle server met 64 sloten orde van grootte 4.000 pakketten per seconde per richting
Pakketsnelheid die in 1 Gbit/s past (pakketten van 64 byte) ongeveer 1,49 miljoen pakketten per seconde
Grootte van een A2S_INFO-opvraging 25 byte, het antwoord is een veelvoud daarvan

De aanvalspatronen die bij Mordhau voorkomen

Vier patronen dekken praktisch alles af wat tegen een Mordhau-server wordt ingezet, en elk daarvan raakt een andere poort.

  • UDP-flood op de spelpoort 7777. Dat is de standaardaanval van een booter: zoveel mogelijk vervalste pakketten naar de poort die in de serverbrowser staat. Hij mikt op bandbreedte en pakketsnelheid, niet op een kwetsbaarheid, en uit zich eerst als lag-spikes, lang voordat iemand de verbinding verliest.
  • Queryflood op de querypoort 27015. Een A2S_INFO-opvraging is 25 byte groot, het antwoord met servernaam, map, spelmodus en spelersaantal een veelvoud daarvan. De aanvaller investeert dus weinig en dwingt bij u rekenwerk en uitgaand verkeer af.
  • Reflectie via uw eigen querypoort. Hier is uw server niet het doelwit, maar het werktuig: de aanvaller stuurt opvragingen met een vervalst afzenderadres, en uw server antwoordt het slachtoffer. U merkt dat als onverklaarbaar hoog uitgaand verkeer op 27015 en als misbruikmelding van uw aanbieder.
  • Joinflood en slotuitputting via de beacon-poort 15000. In plaats van bandbreedte te verstoken bezetten geautomatiseerde toetredingen de gereserveerde sloten. De server draait door, is echter vol, en echte spelers komen niet meer binnen.

Daar komt een vijfde patroon bij zodra RCON open in het netwerk staat: aanmeldpogingen in secondetempo tegen de RCON-poort. Dat is zelden volumetrisch, kost wel rekentijd, en het is het enige van de vijf gevallen waarin een treffer u de server volledig uit handen neemt.

Wat u zelf kunt doen voordat u geld uitgeeft

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

1. Inventarisatie: wat luistert er eigenlijk op de server?

Voordat u ook maar één firewallregel 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 en [::]:7777 betekenen "vanaf het hele internet bereikbaar", 127.0.0.1:27020 betekent "alleen lokaal" en heeft geen firewallregel nodig. Naast het spel duiken daar vaak nog een webpaneel, een databasedienst en een allang vergeten voicedienst op. Het beeld van de aanvaller levert een scan van buitenaf, voor UDP met een korte poortlijst, omdat een volledige UDP-scan zeer langzaam is:

nmap -Pn -sU -p 7777,7778,15000,27015 UW.SERVER.IP.ADRES
nmap -Pn -p- --min-rate 1000 UW.SERVER.IP.ADRES

2. Alleen de vier poorten openlaten die Mordhau werkelijk nodig heeft

Voor Mordhau volstaan vier UDP-vrijgaven naar buiten, al het overige wordt beperkt of helemaal niet gepubliceerd. 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/udp comment 'Mordhau spel'
ufw allow 7778/udp comment 'Mordhau Steam'
ufw allow 15000/udp comment 'Mordhau beacon'
ufw allow 27015/udp comment 'Mordhau query'
ufw allow from 203.0.113.10 to any port 27020 proto tcp comment 'Mordhau RCON'
ufw default deny incoming
ufw default allow outgoing
ufw --force enable
ufw status verbose

Vervang 203.0.113.10 door uw eigen adres. Belangrijk is wat hier niet staat: geen vrijgave voor een webpaneel, geen voor een database, geen voor een bestandsserver. Elke extra open poort is een extra doelwit dat niets met het spel te maken heeft. De volledige handleiding inclusief reddingsweg vindt u onder UFW-firewall instellen zonder uzelf buiten te sluiten.

3. De querypoort 27015 begrenzen zonder uit de serverlijst te vallen

De querypoort mag u begrenzen, maar niet sluiten. Wordt 27015 UDP dichtgezet, dan verdwijnt uw server uit de serverbrowser, omdat spelersaantal, mapnaam en servernaam juist via deze poort worden opgevraagd. Een bovengrens per bronadres lost dat op zonder de zichtbaarheid te kosten:

iptables -I INPUT -p udp --dport 27015 -m hashlimit --hashlimit-name mh_query --hashlimit-mode srcip --hashlimit-above 10/sec --hashlimit-burst 20 -j DROP

Een reguliere serverbrowser vraagt uw server een paar keer per minuut op, niet een paar keer per seconde. Tien opvragingen per seconde en bronadres zijn daarmee ruim voor elke speler en krap voor elke bot. Controleer daarna aan de tellerstand of de regel überhaupt aanslaat:

iptables -L INPUT -n -v | head -20
tcpdump -ni eth0 udp port 27015 -c 200 -q

Hier ligt ook het antwoord op de reflectievraag. Bij een reflectie wordt uw server niet aangevallen, maar als versterker misbruikt: de opvragingen komen met een vervalst afzenderadres, en uw antwoorden treffen een onbekend slachtoffer. Een snelheidsbegrenzing per bronadres is daartegen de effectiefste lokale maatregel, omdat een vervalst afzenderadres alleen nut heeft zolang uw server gewillig en onbeperkt antwoordt.

4. RCON uit het open netwerk halen

RCON hoort bij Mordhau in geen geval onbeperkt op het internet. De toegang wordt in de Game.ini ingeschakeld, in de sectie [/Script/Mordhau.MordhauGameSession]:

[/Script/Mordhau.MordhauGameSession]
ServerName=Mijn Mordhau-server
MaxSlots=64
ServerPassword=
AdminPassword=EenLangWillekeurigWachtwoord
RconPassword=EenAnderLangWillekeurigWachtwoord
RconPort=27020

Mordhau spreekt het Source-RCON-protocol, dus TCP, en werkt daarmee samen met elk gangbaar RCON-hulpmiddel. Precies daarvan maken ook de scripts gebruik die aanmeldgegevens uitproberen. Drie regels dekken dit geval af. Ten eerste: RconPassword en AdminPassword zijn twee verschillende, lange, willekeurige wachtwoorden en geen variaties op de servernaam. Ten tweede: de vrijgave voor de RCON-poort beperkt u tot uw eigen adres, zoals hierboven in het UFW-blok. Ten derde, als u geen vast adres hebt: laat de poort van buitenaf dicht en bereik hem via een SSH-poortdoorverwijzing, daarna verbindt u lokaal op 127.0.0.1:27020:

ssh -N -L 27020:127.0.0.1:27020 root@UW.SERVER.IP.ADRES

Moet RCON toch open blijven, begrens dan op zijn minst de gelijktijdige verbindingen per bronadres. Een RCON-hulpmiddel heeft één verbinding nodig, een bruteforcescript honderden:

iptables -I INPUT -p tcp --dport 27020 --syn -m connlimit --connlimit-above 3 --connlimit-mask 32 -j DROP

5. De beacon-poort 15000 tegen joinfloods afschermen

De beacon-poort is het onderschatte aanvalspunt van een Mordhau-server. Via die poort reserveert het spel het slot van een toetredende speler zolang deze nog laadt. Een bot die in snelle opeenvolging toetredingen aanstoot, bezet daarmee sloten zonder ooit in het spel aan te komen. De server blijft online en lijkt toch vol. Een bovengrens per bronadres vangt dat af, omdat een echte speler per toetreding precies één keer beacont en niet twintig keer per seconde:

iptables -I INPUT -p udp --dport 15000 -m hashlimit --hashlimit-name mh_beacon --hashlimit-mode srcip --hashlimit-above 20/sec --hashlimit-burst 40 -j DROP
iptables -I INPUT -p udp --dport 7777 -m hashlimit --hashlimit-name mh_game --hashlimit-mode srcip --hashlimit-above 400/sec --hashlimit-burst 600 -j DROP

De tweede regel geldt de spelpoort en vraagt om maatgevoel. Bij een tickrate van 60 wisselt de server met elke verbonden speler in de orde van grootte van 60 pakketten per seconde per richting uit. Een grenswaarde van 400 pakketten per seconde en bronadres laat daarmee elke echte speler ruimschoots lucht en treft toch elke bron die zichtbaar vloedt. Meet eerst een week in normaal bedrijf voordat u krapper instelt: wie te krap instelt, gooit zijn eigen spelers eruit en houdt dat vervolgens voor een aanval.

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.

6. Game.ini en Engine.ini: wat werkelijk iets oplevert

Mordhau heeft twee configuratiebestanden, en beide liggen onder Linux in Mordhau/Saved/Config/LinuxServer/, onder Windows in Mordhau\Saved\Config\WindowsServer\. De Game.ini regelt servernaam, sloten, wachtwoorden, adminlijst, maprotatie en de mod-kenmerken uit mod.io, de Engine.ini het netwerkgedrag. Bewerk beide uitsluitend bij een gestopte server, anders overschrijft het serverproces bij het afsluiten uw wijzigingen met de stand uit het werkgeheugen.

Drie instellingen zijn voor het aanvalsoppervlak werkelijk relevant. Ten eerste een ServerPassword: het houdt iedereen weg die niet is uitgenodigd, kost echter de openbare vindbaarheid en helpt tegen een vloed op poort 7777 helemaal niet, omdat de aanvaller helemaal niet wil toetreden. Ten tweede een realistisch aantal in MaxSlots: Mordhau is op maximaal 64 spelers gebouwd, en elk extra slot is een extra pakketbron die uw CPU moet bedienen. Ten derde de tickrate in de Engine.ini:

[/Script/OnlineSubsystemUtils.IpNetDriver]
NetServerMaxTickRate=60
LanServerMaxTickRate=60

[IpDrv.TcpNetDriver]
NetServerMaxTickRate=60

De standaard tickrate van een Mordhau-server is 60. Een verhoging naar 120 verdubbelt de pakketsnelheid per speler en de CPU-belasting en is daarmee precies wat u onder een aanval niet kunt gebruiken. Een server met 64 sloten en tickrate 120 produceert in normaal bedrijf al in de orde van grootte van 8.000 pakketten per seconde per richting. Wie permanent onder vuur ligt, draait met 60 merkbaar stabieler dan met 120.

7. De verbindingsregistratie en de ontvangstbuffers ontlasten

Een vaak over het hoofd gezien knelpunt is de verbindingsregistratie van de kernel. Zij houdt voor elke UDP-stroom een eigen vermelding bij, en een vloed uit tienduizenden vervalste afzenderadressen vult de tabel in seconden. Loopt zij vol, dan verwerpt de server ook legitieme pakketten, en in het logboek staat "nf_conntrack: table full". Stand en bovengrens toont:

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

Daartegen helpt tweeërlei. U verhoogt de bovengrens, of u neemt de spelpoorten helemaal van de registratie uit. Dat laatste is bij een gameserver meestal de betere weg, omdat UDP sowieso geen status kent die gevolgd zou moeten worden:

iptables -t raw -I PREROUTING -p udp --dport 7777 -j NOTRACK
iptables -t raw -I PREROUTING -p udp --dport 15000 -j NOTRACK
iptables -t raw -I PREROUTING -p udp --dport 27015 -j NOTRACK

Eveneens zinvol zijn grotere ontvangstbuffers en een diepere wachtrij van de netwerkkaart, zodat korte pieken niet meteen tot verwerping leiden:

sysctl -w net.core.rmem_max=16777216
sysctl -w net.core.rmem_default=4194304
sysctl -w net.core.netdev_max_backlog=5000

Blijvend horen deze waarden in een bestand onder /etc/sysctl.d/, bijvoorbeeld 99-gameserver.conf. Belangrijk om te begrijpen: grotere buffers verhogen uw weerbaarheid tegen een grote aanval niet, ze voorkomen alleen dat een korte uitschieter al pakketten kost.

8. Uw adres staat in de serverlijst, en daar valt niets aan te veranderen

Hier loont eerlijkheid meer dan wensdenken: het IP-adres van een openbare Mordhau-server laat zich niet geheimhouden. Het staat in de vermelding in de serverbrowser, het staat in de openbare serverlijsten van derden die de querypoort regelmatig uitlezen, en iedere speler die ooit verbonden is geweest, kent het. Een adreswissel levert daarom uren op, zelden dagen, omdat de aanvaller het nieuwe adres langs dezelfde weg vindt als het oude.

Werkzaam zijn daarvoor drie gewoonten. Publiceer het kale IP-adres nergens zelf, dus niet in het Discord-kanaal en niet op de projectpagina. Laat uw spelers via een hostnaam verbinden, zodat een adreswissel in geval van nood niet alle verwijzingen breekt. En ruim oude DNS-records op, want een vergeten A-record naar het vorige adres maakt elke wissel zinloos. Hetzelfde geldt voor testservers: elke openbaar bereikbare tweede server op dezelfde machine verraadt het adres van de hoofdserver.

9. Meten zolang alles normaal draait

De belangrijkste stap is die welke bijna niemand vooraf zet: een vergelijkingsbasis aanleggen zolang de server rustig 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 vier commando's:

sar -n DEV 1 10
ip -s link show eth0
dmesg -T | tail -50
tcpdump -ni eth0 'udp port 7777 or udp port 15000 or udp port 27015' -c 200 -q

Voor tcpdump geldt: begrens hem altijd met -c, want een opname onder volle belasting belast een toch al overbelaste server nog extra. Let vooral op de verwerpingstellers uit ip -s link. Stijgende dropped-waarden bij een tegelijk rustige CPU zijn de duidelijkste aanwijzing dat de pakketsnelheid en niet de rekenkracht het probleem is. Hoe u de waarden uitleest, staat in DDoS-aanval herkennen. Hoe u de server netjes via SteamCMD opzet en actueel houdt, beschrijft Gameserver met SteamCMD installeren.

Waar deze maatregelen ophouden: bandbreedte en pakketsnelheid

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. Een volle Mordhau-server met 64 sloten heeft daarvan maar een fractie nodig: bij tickrate 60 ligt het spelverkeer in de orde van grootte van 4.000 pakketten per seconde per richting. Een gehuurde booter levert daarentegen moeiteloos 5 tot 50 Gbit/s, dus het vijf- tot vijftigvoudige van uw lijn. Of uw iptables-regel daarachter goed is, doet dan niet meer ter zake, want de pakketten van uw spelers komen al eerder niet door.

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. Een aanval die uw lijn nog niet eens voor een derde vult, kan uw Mordhau-server dus toch platleggen, omdat de rekentijd opgaat aan het verwerpen. Beheerders ervaren dat als "de belasting was helemaal niet hoog en toch was alles weg".

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 op een voiceserver 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.

Twee eigenschappen zijn doorslaggevend. De bescherming loopt permanent en hoeft niet eerst op een aanval te reageren, er zijn dus geen eerste minuten waarin de server weg is. En er wordt geen null-routing toegepast: uw IP-adres blijft in het netwerk, alleen de schadelijke 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 Mordhau-servers die permanent onder vuur liggen

Sommige servers 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 de Frankfurtse kern, waarnaar uw server binnen ons eigen netwerk wordt omgezet. Aan uw kant is geen enkele verbouwing nodig.
  • Zelf beheerbare beschermingsregels per poort en protocol in het klantenpaneel: u bepaalt afzonderlijk wat op 7777 UDP is toegestaan, wat op 15000 UDP en wat op 27015 UDP, zonder daarvoor een ticket te schrijven.
  • Wijzigingen gelden in realtime, u kunt dus tijdens een lopende aanval bijsturen in plaats van op een onderhoudsvenster te wachten.
  • Een beschermingsprofiel dat bij het spel past. Voor Unreal-Engine-gameservers op UDP en voor Steam-querypoorten zijn er kant-en-klare profielen, net zo goed als voor aangepaste en eigen applicaties op willekeurige TCP- of UDP-poorten.

De Advanced DDoS Protection richt zich op servers die bij KernelHost draaien. Staat uw Mordhau-server op dit moment ergens anders en wordt hij regelmatig uit het netwerk geschoten, dan is de verhuizing de weg naar deze filtering.

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
Spelprofiel geoptimaliseerde profielen voor gangbare games, Unreal-Engine-servers inbegrepen profiel passend bij het spel, ook voor aangepaste applicaties
Null-routing nee nee
Looptijd gekoppeld aan het serverpakket PrePaid, geen minimale looptijd, geen opzegtermijn, geen installatiekosten

Voor de meeste Mordhau-servers volstaat de inbegrepen permanente bescherming samen met een nette configuratie. De Advanced DDoS Protection is het antwoord op iemand die het persoonlijk maakt.

Veelgemaakte fouten en oplossingen

"Ik heb poort 27015 dichtgezet, nu staat mijn server niet meer in de lijst": dat is het te verwachten gevolg. De Steam-querypoort levert naam, map en spelersaantal aan de serverbrowser. Zonder die poort verschijnt uw server niet meer of wordt hij als onbereikbaar vermeld. Juist is een snelheidsbegrenzing per bronadres in plaats van een blokkade.

"Spelers komen niet binnen, hoewel de server draait": controleer eerst poort 15000 UDP. De beacon reserveert het slot tijdens het laden. Is hij geblokkeerd, te krap gefilterd of overbelast, dan blijft de toetreding hangen, hoewel poort 7777 antwoordt en de server in de browser staat.

"Mijn wijzigingen in de Game.ini zijn na de herstart weer weg": u hebt het bestand bewerkt terwijl de server draaide. Het Mordhau-serverproces schrijft bij het afsluiten zijn stand uit het werkgeheugen terug en overschrijft daarbij uw versie. Server stoppen, bewerken, starten, in die volgorde.

"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 allang vol zit. Controleer met iptables -L INPUT -n -v of de tellers oplopen. Blijven ze op nul staan, dan wordt de regel niet bereikt.

"De server draait, maar iedereen heeft lag-spikes en treffers komen te laat aan": kijk eerst na of de inkomende pakketsnelheid stijgt terwijl de CPU rustig blijft. Precies dat is het patroon van een aanval. Blijft de pakketsnelheid normaal en staat de CPU op 100 procent, dan is het geen DDoS-aanval, maar meestal een te hoge tickrate, te veel sloten of een mod.

"Mijn aanbieder meldt uitgaand misbruik van poort 27015": uw server is als versterker voor een reflectie misbruikt. De opvragingen kwamen met een vervalst afzenderadres, geantwoord heeft uw server aan een onbekend slachtoffer. Een snelheidsbegrenzing op 27015 UDP per bronadres maakt daar een einde aan.

"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 dedicated Mordhau-server heeft naar buiten precies vier UDP-poorten nodig: 7777 (spel), 7778 (Steam), 15000 (beacon) en 27015 (Steam-opvraging). Al het overige blijft dicht.
  • RCON loopt bij Mordhau over TCP volgens het Source-RCON-protocol en wordt pas door RconPassword en RconPort in de Game.ini actief. Beperk de poort tot uw eigen adres.
  • Poort 27015 UDP mag u begrenzen, maar niet sluiten: zonder die poort verdwijnt uw server uit de serverbrowser, omdat spelersaantal, map en naam via deze poort worden opgevraagd.
  • Poort 15000 UDP is de beacon-poort en reserveert het slot tijdens het laden. Is hij geblokkeerd of overbelast, dan komen spelers niet binnen, hoewel de server draait.
  • Bewerk Game.ini en Engine.ini alleen bij een gestopte server, omdat het serverproces bij het afsluiten de stand uit het werkgeheugen terugschrijft.
  • Lokale firewallregels eindigen bij de bandbreedte: 1 Gbit/s is 125 megabyte per seconde en bij pakketten van 64 byte ongeveer 1,49 miljoen pakketten per seconde. Daarboven beslist uitsluitend het netwerk vóór de server.
  • Bij KernelHost zit de permanente bescherming in twee lagen zonder meerprijs in elk serverpakket en is zij vanaf de oplevering actief, zonder null-routing. Wie de filtering zelf wil sturen, krijgt haar met de Advanced DDoS Protection vanaf 50,00 € per maand.

Draait uw Mordhau-server 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 de filterregels voor uw IP-adres worden bijgesteld. Bij een lopende aanval bereikt u ons daarnaast via de WhatsApp-noodchat op +43 650 8209883.

Veelgestelde vragen

Welke poorten moet ik voor een Mordhau-server openlaten?
Precies vier, en alle vier over UDP: 7777 voor het spelverkeer, 7778 als Steam-poort (spelpoort plus één), 15000 voor de beacon die bij het toetreden het slot reserveert, en 27015 voor de Steam-opvraging waaruit de serverbrowser naam, map en spelersaantal leest. Ingesteld worden ze bij de start via -Port=, -QueryPort= en -BeaconPort=. RCON is optioneel, loopt over TCP op een vrij te kiezen poort en hoort niet onbeperkt op het open netwerk. Al het overige, bijvoorbeeld een webpaneel of een database, blijft dicht.
Mijn Mordhau-server is nu offline. Waaraan herken ik of er een DDoS-aanval loopt?
Kijk naar de pakketsnelheid van de interface, niet naar de CPU-belasting. Met sar -n DEV 1 10 ziet u pakketten en bytes per seconde, met ip -s link show eth0 de verwerpingstellers. Stijgen de inkomende pakketten ver boven de normaalwaarde terwijl de server zelf nauwelijks werkt, dan is het een aanval. Blijven de netwerktellers onopvallend en staat de CPU toch op 100 procent, dan is de oorzaak meestal een te hoge tickrate, te veel sloten of een mod. Meet de normaalwaarden voordat de aanval komt, anders ontbreekt u de vergelijking.
Kan ik poort 27015 gewoon sluiten om queryfloods te stoppen?
Nee. Wordt 27015 UDP gesloten, dan verdwijnt uw Mordhau-server uit de serverbrowser, omdat naam, map en spelersaantal juist via deze Steam-querypoort worden uitgelezen. Juist is een snelheidsbegrenzing per bronadres, bijvoorbeeld tien opvragingen per seconde met de hashlimit-module van iptables. Een echte serverbrowser vraagt een paar keer per minuut op, een bot een paar keer per seconde. Dezelfde regel voorkomt en passant dat uw server als versterker voor een reflectie op een onbekend slachtoffer wordt misbruikt.
Waarvoor dient poort 15000 bij een Mordhau-server?
15000 UDP is de beacon-poort. Via die poort reserveert Mordhau het slot van een toetredende speler zolang deze de map nog laadt, zodat hij er na het laden niet weer uit vliegt. Ingesteld wordt hij bij de start met -BeaconPort=. Praktisch betekent dat: is 15000 geblokkeerd, te krap gefilterd of door een joinflood overbelast, dan komen spelers niet meer binnen, hoewel de server in de browser staat en poort 7777 antwoordt. Precies dat patroon gebruikt een aanval op de sloten, geheel zonder grote bandbreedte.
Hoe scherm ik RCON op een Mordhau-server af?
RCON is bij Mordhau niet voorgeconfigureerd en wordt pas actief wanneer u in de Game.ini in de sectie [/Script/Mordhau.MordhauGameSession] de waarden RconPassword en RconPort instelt. De toegang spreekt het Source-RCON-protocol en loopt daarmee over TCP. Drie maatregelen volstaan: een lang, willekeurig wachtwoord dat verschilt van het AdminPassword, een firewallvrijgave uitsluitend voor uw eigen adres, en bij een wisselend adres de toegang via een SSH-poortdoorverwijzing naar 127.0.0.1. Moet de poort open blijven, begrens dan de gelijktijdige verbindingen per bronadres met connlimit.
Helpt het om nu snel het IP-adres te wisselen?
Maar even. Het adres van een openbare Mordhau-server staat leesbaar in de vermelding in de serverbrowser, en openbare serverlijsten van derden lezen het via de querypoort doorlopend opnieuw uit. De aanvaller vindt het nieuwe adres daarom meestal binnen enkele uren. Een wissel levert tijd op, maar lost het probleem niet op. Werkzamer is het om het kale IP-adres nergens zelf te publiceren, de spelers via een hostnaam te laten verbinden en oude DNS-records te verwijderen, want een vergeten A-record maakt elke adreswissel zinloos.
Waarom zijn mijn wijzigingen in de Game.ini na een herstart weg?
Omdat u het bestand hebt bewerkt terwijl de server draaide. Het Mordhau-serverproces houdt zijn configuratie in het werkgeheugen en schrijft die stand bij het afsluiten terug naar de Game.ini. Daarbij overschrijft het uw versie. De juiste volgorde luidt daarom altijd: server stoppen, Game.ini of Engine.ini bewerken, server starten. Dat geldt ook tijdens een aanval, en het is de reden waarom u onder vuur eerst moet meten en pas daarna configureren.
Vanaf welke aanvalsgrootte redt mijn Mordhau-server het niet meer alleen?
Een typische gameserver hangt aan 1 Gbit/s, wat overeenkomt met 125 megabyte per seconde. Een volle Mordhau-server met 64 sloten heeft bij tickrate 60 slechts in de orde van grootte van 4.000 pakketten per seconde per richting nodig. Gehuurde booters leveren daarentegen 5 tot 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. Een aanval kan u dus platleggen hoewel de bandbreedte niet is uitgeput.
Gaat mijn Mordhau-server bij KernelHost tijdens een aanval offline?
Nee. Er wordt geen null-routing toegepast. Uw IP-adres blijft in het netwerk, alleen de schadelijke 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, er zijn dus geen eerste minuten waarin de server weg is, en u hoeft niets te melden opdat de filtering aanslaat.
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, en zij geldt voor alle poorten van uw Mordhau-server, dus voor 7777, 7778, 15000 en 27015 net zo goed als voor een RCON-poort. Een wissel van serverpakket of een verhuizing naar een andere machine verandert daar niets aan.
Wanneer heb ik voor mijn Mordhau-server daarnaast de Advanced DDoS Protection nodig?
Wanneer uw server 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, dus gescheiden voor 7777 UDP, 15000 UDP en 27015 UDP. 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. Het aanbod geldt voor servers die bij KernelHost draaien.

Mordhau Mordhau-DDoS-Schutz Gameserver-Schutz Unreal Engine 4 Port 7777 Port 27015 RCON Advanced DDoS Protection