Where the instructions come from
Triternion's website and Steam store page carry no server manual. The working reference is the Mordhau Wiki on Fandom, which describes itself as written and maintained by players: its Dedicated Server Hosting Guide lists the ports and launch parameters, and its Server Configuration page lists the Game.ini and Engine.ini keys. Where Triternion documented a setting itself, in patch notes posted to Steam, this page cites those notes: the beacon port (Patch #4), Mods= lines (Patch #18), RCON broadcasts (Patch #20) and the fix for setting the RCON port in Game.ini (Patch #21).
The current wiki guide sends Linux owners to LinuxGSM instead of giving raw steps. An earlier revision of the same guide gave them, and its paths agree with LinuxGSM's configuration: MordhauServer.sh sits in the install root, the binary is Mordhau/Binaries/Linux/MordhauServer-Linux-Shipping, and the configs are written to Mordhau/Saved/Config/LinuxServer. The steps below are assembled from those community sources, not from a Triternion document.
The four ports
| Purpose | Default | Protocol (wiki) | Set with | Expose |
|---|---|---|---|---|
| Game traffic | 7777 | TCP/UDP | -Port= | Yes |
| Server browser queries | 27015 | TCP/UDP | -QueryPort= | Yes |
| Beacon (slot reservation) | 15000 | TCP/UDP | -BeaconPort= | Yes |
| RCON (Source RCON protocol) | 7778 | TCP | -RconPort= or RconPort= in Game.ini | No: SSH tunnel |
The beacon port is the one people forget. Triternion's Patch #4 notes explain that joining now reserves a slot before the map loads, and that owners must keep port 15000 reachable for it. The machine holds its own public IPv4, so port forwarding is not part of the job: the host firewall is the only gate.
Sizing the machine
Neither Triternion nor the wiki publishes CPU, memory or disk figures. The wiki names the two settings that drive load: the player cap and the tick rate. It calls a cap above 64 a cause of engine performance problems, and warns that raising tick rate and players together cuts performance steeply. Measure instead of guessing: run a full match at your intended cap, watch the average and maximum tick rate with the RCON stats command (the wiki says the minimum always wobbles), and check top and free -m.
SteamCMD's Linux build needs 32-bit x86 libraries and neither source mentions ARM, so our inference is to choose an x86-64 line from the game server range and skip the ARM machines, among them the X-Gene cartridge, which boots only Ubuntu 16.04 or 18.04.
Every dedicated server includes an unmetered port and one IPv4: 1 Gbps on 10 of the 18 configurable lines, 500 Mbps on the other 8. Rack servers and blades carry an out-of-band controller (iLO, iDRAC or a Supermicro BMC) whose browser console the dashboard publishes once you add a console login; Moonshot cartridges other than the m510 and m710x have power control only. Taken ready-built from the rack, a server is running about 30 minutes past order approval; builds to order run 4-24 hours. All five locations run on our own network, AS19624; ping each city's test IP and pick the one nearest your players.
Install and firewall
Run this as your sudo user on Ubuntu or Debian from the Linux images. A dedicated mordhau account owns the install, so the server process has no root rights. Firewall order: IPv6 is enabled in /etc/default/ufw first, then SSH is allowed, then ufw is enabled, and the game ports come last.
sudo apt update && sudo apt install -y lib32gcc-s1 curl ufw
sudo useradd -m -s /bin/bash mordhau
sudo -u mordhau bash -c 'mkdir -p /home/mordhau/steamcmd && cd /home/mordhau/steamcmd && curl -sqL "https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz" | tar zxf -'
sudo -u mordhau bash -c '/home/mordhau/steamcmd/steamcmd.sh +force_install_dir /home/mordhau/server +login anonymous +app_update 629800 validate +quit'
sudo sed -i 's/^IPV6=.*/IPV6=yes/' /etc/default/ufw
sudo ufw allow OpenSSH
sudo ufw --force enable
sudo ufw allow 7777
sudo ufw allow 27015
sudo ufw allow 15000
sudo ufw status verbose
force_install_dir comes before login, the order SteamCMD expects. Port 7778 is deliberately not opened. If the first start fails on a missing shared library, add the package that ships it; an older revision of the wiki guide listed extra libraries such as libnss3, and that list is dated.
A systemd unit that updates on start
The unit goes in /etc/systemd/system/mordhau.service. The map before the switches is the first map loaded; the wiki requires it to be the first parameter.
[Unit]
Description=Mordhau dedicated server
After=network-online.target
Wants=network-online.target
[Service]
User=mordhau
Group=mordhau
WorkingDirectory=/home/mordhau/server
ExecStartPre=-/home/mordhau/steamcmd/steamcmd.sh +force_install_dir /home/mordhau/server +login anonymous +app_update 629800 +quit
ExecStart=/bin/bash /home/mordhau/server/MordhauServer.sh FFA_ThePit -log -Port=7777 -QueryPort=27015 -BeaconPort=15000
KillSignal=SIGINT
Restart=always
RestartSec=10
TimeoutStartSec=1800
[Install]
WantedBy=multi-user.target
Then sudo systemctl daemon-reload && sudo systemctl enable --now mordhau. Triternion's Patch #22 Hotfix 1 notes say a server saves its default config to Game.ini on first run, so let it come up once, then sudo systemctl stop mordhau before editing. The minus sign on ExecStartPre lets the server boot even if SteamCMD returns an error code; it does not cover an update that hangs, which is why TimeoutStartSec=1800 replaces the 90-second default that includes the update. The wiki's SteamCMD page says the server does not update itself, so sudo systemctl restart mordhau after a patch is your update. Restart=always brings the process back however it exits, including the RCON shutdown command, so stop it with systemctl. KillSignal=SIGINT follows the stop signal in the wiki's older sample unit.
That MordhauServer.sh hands its arguments to MordhauServer-Linux-Shipping after the project name is our inference: the older wiki revision passes -Port and -BeaconPort to the script, and LinuxGSM starts the binary itself with Mordhau followed by the map. If the server ignores the map, point ExecStart at the binary directly: /home/mordhau/server/Mordhau/Binaries/Linux/MordhauServer-Linux-Shipping Mordhau FFA_ThePit -log -Port=7777 -QueryPort=27015 -BeaconPort=15000.
Game.ini: name, admins, slots and rotation
The file is /home/mordhau/server/Mordhau/Saved/Config/LinuxServer/Game.ini. The wiki's warning is the rule to work by: change it with the server stopped, because on shutdown the server writes its in-memory copy over the file. Edit with sudo -u mordhau nano on that path, put each key under its existing heading rather than repeating a heading, then sudo -u mordhau chmod 600 the file, since it holds the RCON password.
[/Script/Mordhau.MordhauGameSession]
ServerName=My Mordhau Server
MaxSlots=24
ServerPassword=
AdminPassword=
Admins=YOUR_PLAYFAB_ID
RconPassword=replace-with-a-long-random-string
RconPort=7778
bUseOfficialBanList=True
[/Script/Engine.GameSession]
MaxPlayers=24
[/Script/Mordhau.MordhauGameMode]
MapRotation=SKM_Contraband
MapRotation=TDM_Camp
MapRotation=FFA_ThePit
- Admins take PlayFab IDs, one
Admins=line each. Join your server and runPlayerListin the console to read yours, orLookupPlayerwith your SteamID64 to translate it. - AdminPassword stays empty here. The wiki warns that anyone holding it can log in and add further admins.
- MaxSlots goes with
MaxPlayers, as the wiki sets both. An emptyServerPasswordleaves the server public. - bUseOfficialBanList defaults to False, per Triternion's Patch #21 Hotfix 2; True applies the official ban list.
- MapRotation names come from the wiki's Server Map Names list: SKM is Skirmish, TDM Team Deathmatch, FFA free-for-all, FL Frontline, INV Invasion, HRD Horde. Variants ending in
_64drop the map bounds.
Tick rate lives in Engine.ini in the same folder: NetServerMaxTickRate under [/Script/OnlineSubsystemUtils.IpNetDriver], repeated under [IpDrv.TcpNetDriver], as the wiki shows. Raise it only while stats shows the average holding.
RCON, mods and a second instance
RCON speaks the Source RCON protocol, so most Source RCON clients work. Keep 7778 closed and reach it through your own login: ssh -N -L 7778:127.0.0.1:7778 you@your-server, then point the client at 127.0.0.1:7778. Neither the wiki nor Triternion's notes say which address RCON listens on. If the tunnel connects but RCON stays silent, put the server's public address in the -L argument instead; that traffic stays on the machine, so 7778 can remain closed in ufw. Useful commands from the wiki's list: playerlist, maplist, addmap with a map, a position and true to save it to Game.ini, ban with a duration in minutes, info and stats.
Mods come from mod.io. Patch #18 retired the old auth-token method: add a Mods= line with each mod's resource ID under [/Script/Mordhau.MordhauGameSession]. A mod that asks to run as a server actor goes in SpawnServerActorsOnMapLoad= under [/Script/Mordhau.MordhauGameMode] (Patch #17), and a modded map's rotation name comes from its author's mod.io page. Patch #21 also mounts pak files dropped into Mordhau/Content/CustomPaks/.
Two instances on one machine means the second gets its own install directory (+force_install_dir /home/mordhau/server2), its own unit (mordhau2.service), its own Game.ini inside that install, and its own four ports, for example -Port=7787 -QueryPort=27016 -BeaconPort=15001 with RconPort=7788 in its Game.ini. Open the three public ones in ufw; leave 7788 closed like the first.
Backups and limits
The config folder is what you cannot download again. With the server stopped, run sudo tar -czf ~/mordhau-config.tgz -C /home/mordhau/server/Mordhau/Saved Config, then sudo chown "$USER": ~/mordhau-config.tgz && chmod 600 ~/mordhau-config.tgz, check it with tar -tzf ~/mordhau-config.tgz, and copy it off the machine yourself. To restore, stop the server, unpack with sudo tar -xzf ~/mordhau-config.tgz -C /home/mordhau/server/Mordhau/Saved, run sudo chown -R mordhau: /home/mordhau/server/Mordhau/Saved/Config, and confirm with sudo ls -l /home/mordhau/server/Mordhau/Saved/Config/LinuxServer, run with sudo so it works whatever the permissions on the mordhau home directory.
- Console players: the wiki says they cannot host private servers, and Triternion's 2024 crossplay notes name official servers only, so do not promise them a seat.
- Steam and Epic players both join a server built this way, according to the wiki.
- Updates are manual: nothing restarts the unit after a patch unless you do it.
Questions
Does the server need a Steam account that owns Mordhau?
Not with SteamCMD. App 629800 installs with login anonymous, so no personal account sits on the machine. The wiki's other route, the dedicated server tool in a Steam library, does require owning the game.
Why can't players find my server in the browser?
Check that 27015 and 15000 are open as well as 7777, and that bAdvertiseServerViaSteam is not set to False in Game.ini. The wiki suggests quakestat -a2s against the server's address and query port as an outside check; it ships in the qstat package.
How many players can one instance hold?
The cap is MaxSlots and MaxPlayers in Game.ini. The wiki advises against going above 64 because of engine performance, and against raising tick rate and players together. Watch the average tick rate with stats at full load and settle on the highest cap that holds it.
Can I set a password without putting it on the command line?
Yes. ServerPassword, AdminPassword and RconPassword all live in Game.ini, which the steps above leave readable only by the mordhau account. None of them appears in the launch line or the process list.