What you are setting up, and who wrote the manual
Your server is a separate program from the game. On Linux it is launched by a small script, MordhauServer.sh, which runs the real program, MordhauServer-Linux-Shipping, from the Binaries/Linux folder of the install. Settings go into two text files, Game.ini and Engine.ini, under Mordhau/Saved/Config/LinuxServer.
Those paths come from community sources, not from Triternion. The Mordhau Wiki on Fandom says it is written and kept up by players, and its current hosting guide hands Linux users over to LinuxGSM; an older revision of that guide walked through Linux by hand, and LinuxGSM's own config uses the same folders. Wherever Triternion's patch notes speak to a setting, such as the beacon port or how mods are added, this page goes with them.
The doors players knock on
Your firewall decides whether people can join. The wiki lists four defaults, and each can be moved with a launch switch:
- 7777, TCP and UDP: the game itself (
-Port=). Open it. - 27015, TCP and UDP: answers the server browser (
-QueryPort=). Open it, or your server stays invisible. - 15000, TCP and UDP: the beacon (
-BeaconPort=). Triternion's Patch #4 notes say players now reserve a slot through it before loading in, and that owners have to keep it reachable. Open it. - 7778, TCP: RCON, the remote admin console (
RconPort=in Game.ini). Keep this one shut and reach it through SSH, as shown further down.
Will one machine keep up?
It depends on your player cap and tick rate, and nobody publishes hardware figures for them, Triternion included. What the wiki does say: more than 64 players tends to cause engine performance trouble, and pushing players and tick rate up at the same time makes it fall off fast. So treat your first full match as the test. Fill the server, type stats over RCON to see average and top tick rates, and keep an eye on top while it runs.
Pick an Intel or AMD machine. That is our inference rather than anything the wiki states: Valve documents SteamCMD as a 32-bit x86 program, and no source we read mentions ARM. So skip the ARM servers, including the small ARM cartridge, which is limited to Ubuntu 16.04 and 18.04.
What you get from our game server machines: the whole box with root access, an unmetered port that comes as 500 Mbps or 1 Gbps depending on the line, one IPv4, and a port that is not shared with any other customer at the access switch. On rack servers and blades you also get a browser-based remote console after you set up a console login in the dashboard, handy if a reboot goes wrong. A server already in the rack is ready in about 30 minutes, though payment verification can add time; a custom build is 4 to 24 hours when we hold the parts and longer when they must be bought in. Machines already racked are listed on instant servers.
Getting it installed
Start from Ubuntu or Debian (see Linux servers) and work as your own sudo user. You will create a separate mordhau user so the game never runs with root rights.
- Install SteamCMD's 32-bit library, create the user, and download SteamCMD into its home.
- Pull the server files:
force_install_dirfirst, then the anonymous login, thenapp_update 629800 validate. - Switch on IPv6 in ufw before writing any rule, allow SSH, enable the firewall, and only then open the three player ports.
- Leave 7778 closed.
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/game +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
If the server later refuses to start and names a missing library, install whichever package provides it. An old version of the wiki guide listed a handful (for example libnss3), but that list is several years old.
Keeping it running and patched
A systemd service starts the server at boot, brings it back if it exits, and checks for a Mordhau update each time it starts. Create /etc/systemd/system/mordhau.service with:
[Unit]
Description=Mordhau community server
After=network-online.target
Wants=network-online.target
[Service]
User=mordhau
Group=mordhau
WorkingDirectory=/home/mordhau/game
ExecStartPre=-/home/mordhau/steamcmd/steamcmd.sh +force_install_dir /home/mordhau/game +login anonymous +app_update 629800 +quit
ExecStart=/bin/bash /home/mordhau/game/MordhauServer.sh SKM_Contraband -log -Port=7777 -QueryPort=27015 -BeaconPort=15000
KillSignal=SIGINT
Restart=always
RestartSec=10
TimeoutStartSec=1800
[Install]
WantedBy=multi-user.target
- Run
sudo systemctl daemon-reloadand thensudo systemctl enable --now mordhau. - Give it a minute to finish loading. According to the Patch #22 Hotfix 1 notes from Triternion, a fresh server writes its default settings into Game.ini on the first run.
- Stop it with
sudo systemctl stop mordhaubefore you edit anything.
A few details are worth knowing. The map name has to come first on the launch line, the wiki says. That the script passes the map and your switches on to the real program is our own reading, not something a source spells out: the wiki's older guide gives port switches to the script, while its sample unit and LinuxGSM launch MordhauServer-Linux-Shipping directly, with Mordhau placed ahead of the map. If your server comes up on the wrong map, replace the script in ExecStart with that program from the Binaries/Linux folder, putting Mordhau as its first argument. The minus in front of ExecStartPre means a failed update check still lets the server start, but it does nothing for an update that hangs; that case is handled by TimeoutStartSec=1800, because systemd's usual 90-second limit counts the update too. The server never patches itself, according to the wiki, so after a Mordhau patch you simply run sudo systemctl restart mordhau. And since Restart=always revives the process whatever made it exit, an RCON shutdown will come straight back: use systemctl when you really want it off.
Making it yours: name, admins and maps
With the server stopped, open /home/mordhau/game/Mordhau/Saved/Config/LinuxServer/Game.ini as the game user (sudo -u mordhau nano followed by that path). The stop matters: the wiki explains that the server saves whatever it holds in memory over this file when it shuts down, so edits made while it runs get lost. Add these keys under the headings already in the file instead of pasting duplicate headings:
[/Script/Mordhau.MordhauGameSession]
ServerName=Our Mordhau Community
MaxSlots=32
ServerPassword=
Admins=YOUR_PLAYFAB_ID
Admins=FRIENDS_PLAYFAB_ID
RconPassword=pick-a-long-random-phrase
RconPort=7778
[/Script/Engine.GameSession]
MaxPlayers=32
[/Script/Mordhau.MordhauGameMode]
MapRotation=SKM_Contraband
MapRotation=FL_Grad
MapRotation=TDM_ThePit
MapRotation=FFA_Camp
Lock it down afterwards with chmod 600, run as the game user, so nobody else on the machine can read your RCON password, and start the service again.
- Finding a PlayFab ID: join your server, open the console with the backtick key and type
PlayerList. If you only know someone's SteamID64,LookupPlayerturns it into the PlayFab ID. - Admin password: the wiki offers
AdminPasswordas an alternative, but cautions that whoever has it can add more admins without asking you. TheAdmins=list is safer. - Player cap: the wiki sets both
MaxSlotsandMaxPlayers, so change them together. - Map names: use the map-name list on the wiki. The prefix gives the mode, for instance FL for Frontline, SKM for Skirmish, INV for Invasion and HRD for Horde.
Mods, remote admin and a second server
Mods. Find the mod on mod.io and copy its resource ID. Since Patch #18, Triternion's notes say a server installs mods from one Mods= line per ID under [/Script/Mordhau.MordhauGameSession], with no mod.io token needed. Some server-side mods ask to be listed as a server actor in SpawnServerActorsOnMapLoad= under [/Script/Mordhau.MordhauGameMode] instead. For a modded map, the name that goes in your rotation is whatever its author gives on mod.io.
Remote admin. RCON uses the same protocol as Source engine servers, so a Source RCON tool will connect. From your own computer, run ssh -N -L 17778:127.0.0.1:7778 you@your-server and connect the tool to 127.0.0.1:17778. No source says whether RCON answers on 127.0.0.1, so treat the loopback target as a guess. Should that connect without any reply, swap 127.0.0.1 in the -L part for the server's public IP. Handy commands include playerlist, kick, changelevel and say.
A second server. Give it a whole separate setup: its own install folder via a second SteamCMD run into /home/mordhau/game2, its own service file such as mordhau2.service, its own Game.ini, and four new ports, say 7787, 27016 and 15001 on the launch line plus RconPort=7788 in its Game.ini. Open its three player ports in ufw and keep 7788 shut.
Before you commit
- Console friends. Per the wiki, PlayStation and Xbox players cannot run private servers at all, and when Triternion announced crossplay in 2024 it spoke only of official servers. Don't count on console players reaching yours.
- Steam and Epic. The wiki says players from both stores can join a server set up like this.
- Your settings are your backup to make. With the service stopped, archive the config folder using
sudo tar -czf ~/mordhau-settings.tgz -C /home/mordhau/game/Mordhau/Saved Config, hand it to your user withsudo chown "$USER": ~/mordhau-settings.tgz, look inside withtar -tzf ~/mordhau-settings.tgz, and download it to your own computer. If you ever unpack it back,sudo ls -l /home/mordhau/game/Mordhau/Saved/Config/LinuxServerconfirms the files landed; using sudo there means the check works however the game user's home folder happens to be locked down. - Small groups. If you only play the odd evening match with a few friends, a whole server is more than you need.
Questions people ask
- Do I have to buy Mordhau to run a server?
- No. SteamCMD downloads app 629800 with an anonymous login. The wiki does mention a second route through the Steam library's Tools section, and that one needs a copy of the game on the account.
- My server is running but nobody can see it. What should I check?
- First, ports 27015 and 15000, not just 7777: the browser and the slot reservation both depend on them. Then look in Game.ini for
bAdvertiseServerViaSteam, which the wiki's example sets to True. From another computer, the wiki'squakestat -a2scheck (from theqstatpackage) tells you whether the server answers queries. - How do I give a friend admin rights?
- Stop the server, add an
Admins=line with their PlayFab ID to Game.ini, and start it again. Any admin can also useAddAdminin game, and the wiki warns that admins added that way can add others in turn, so choose carefully. - Where are my passwords kept?
- In Game.ini, not on the launch line, so they never show up in the list of running processes. Setting the file to mode 600 keeps other users on the machine out of it.