Arma 3 is the milsim sandbox behind Exile, Antistasi, King of the Hill and DayZ's roots. A dedicated server with Steam Workshop mods and custom missions powers everything from hardcore milsim to massive PvP. This step-by-step guide shows you how to set up an Arma 3 server in minutes — no manual install, no command line.
Pick a plan sized for your Arma 3 community. We recommend about 6–16 GB of RAM; start smaller and upgrade in one click as you add players or mods. Arma 3 plans start at $17.99/mo.
Check out and your Arma 3 server provisions automatically in under 60 seconds, with console access right away — no manual install, no command line.
Once your Arma 3 server is online, share its address (IP and port) with your friends so they can join. Start, stop and restart it anytime from the control panel.
Your Arma 3 server supports Steam Workshop, Mods, Missions, CBA, FTP/SFTP. Install Steam Workshop mods and mission files straight from the one-click installer, or upload your own from the control panel — then tweak settings in the visual config editor.
Enable scheduled automatic backups, set restart timers, and monitor CPU, RAM and player counts from the dashboard. Always-on DDoS protection and 24/7 support keep your Arma 3 server stable.
Ready to start? Deploy your Arma 3 server in under 60 seconds — 7-day money-back guarantee.
The default ports are all UDP, and the Steam ports are derived from the game port, so changing -port= shifts the whole block.
| Port | Direction | Purpose |
|---|---|---|
| 2302 UDP | in | Game port, including Voice over Net (VON) |
| 2303 UDP | in | Steam query (+1) |
| 2304 UDP | in | Steam master (+2) |
| 2305 UDP | in | VON (+3), allocated but not currently used |
| 2306 UDP | in | BattlEye traffic (+4) |
| 2344 TCP+UDP | out | BattlEye, to 81.0.236.111 (arma31.battleye.com) |
| 2345 TCP | out | BattlEye, same destination |
beserver.cfg (beserver_x64.cfg for the 64-bit server), where RConPassword sets the password and RConPort the port it listens on.The server is its own Steam application, appID 233780, documented for Windows Server 2008 or later and for Linux. Ownership of the game is not checked, but anonymous SteamCMD login is refused, so real credentials have to be supplied.
On Linux, inside steamcmd.sh:
force_install_dir /home/steam/arma3
login <steam-login> <steam-password>
app_update 233780 validate
quit
The same steps work as a single Windows command line:
steamcmd.exe +login USERNAME PASSWORD +force_install_dir "C:\arma3" +app_update 233780 validate +quit
validate re-checks every file against Steam's manifest, which is what catches a corrupted download; the same app_update line is also how you patch later. Install the server in its own directory, kept apart from any Arma 3 client on the same machine.
The resulting binary is arma3server_x64 on Linux — 64-bit arrived with the 2.0 patch — while arma3server is the older 32-bit build; on Windows it is arma3server.exe. A first launch looks like this:
./arma3server_x64 -name=server -config=server.cfg -port=2302The file name itself carries no meaning: the file is chosen with -config=, and there is no default, so omitting the parameter means no server configuration is loaded at all.
| Key | Notes |
|---|---|
| hostname | Name shown in the server browser |
| password | Join password; empty means anyone may connect |
| passwordAdmin | Password used by #login in chat |
| serverCommandPassword | Authorises #exec and scripted server commands |
| maxPlayers | 64 by default; headless clients occupy slots too |
| persistent | 1 keeps the mission running with nobody connected |
| verifySignatures | 2 is the default; 0 switches checking off |
| allowedFilePatching | 0 blocks it, 1 allows headless clients only, 2 allows everyone |
| BattlEye | 1 by default; 0 disables the anti-cheat |
| kickDuplicate | 1 kicks a second client sharing an ID |
| motd[] / motdInterval | Lines shown on join, and the gap between them |
| voteThreshold / voteMissionPlayers | Fraction of votes needed, and players required before voting starts |
| headlessClients[] / localClient[] | IPs accepted as headless clients, and IPs treated as local |
| logFile | Writes the console output to a file |
| requiredBuild | Refuses clients below the build named; 0 by default |
For a public server the documented protection set is BattlEye = 1;, verifySignatures = 2; and allowedFilePatching = 0; used together, described as the de facto standard for public servers.
Mod folders are conventionally named with a leading @, and the server is told which ones to load on the command line:
# Windows
arma3server_x64.exe "-mod=@cba_a3;@ace" "-serverMod=@admintools"
# Linux: escape each semicolon so the shell does not split the command
./arma3server_x64 -mod=@cba_a3\;@ace -serverMod=@admintools
-mod= covers anything the clients have to load too, while -serverMod= covers folders that stay on the server and are never sent out..bisign file, and the matching .bikey has to be copied into the server's keys folder. A vanilla installation holds only Bohemia's own bi.bikey, so a forgotten key produces the "not signed by a key accepted by this server" kick.meta.cpp in the mod's root containing protocol = 1; and publishedid = 123456789;, taking the number from the Workshop URL. Without it, players have to activate the mod manually.ciopfs, a case-insensitive filesystem.Custom missions go into the server's MPMissions folder as .pbo files. Which of them run, and in what order, is set by a class Missions block in the server config:
class Missions
{
class Rotation01
{
template = "MyMission.Altis";
difficulty = "Veteran";
class Params
{
RespawnDelay = 15;
};
};
};
class keyword must be lowercase; a capitalised one throws a parsing error. The same parser is equally unforgiving about missing semicolons, unmatched quotes and stray braces.template is the mission name joined to its terrain — MyMission.Altis for a mission built on Altis — so the entry changes when the mission moves to another map.difficulty names the preset the mission runs under. Custom is the exception: it reads its values from the server profile instead of a built-in preset.class Params is optional and overrides that mission's own parameter defaults, which are declared in its Description.ext.Beyond -config=, the parameters that matter on a first run are:
-port= — the game port; the Steam query and master ports follow it automatically.-cfg= — the basic configuration file, which holds the network tuning values rather than the gameplay ones.-name= — the profile name, which also determines where the profile is written.-pid= — writes the process ID to a file that stop and restart scripts can read.-bePath= — points BattlEye at a folder other than the default.-enableHT — uses logical cores, but it is overridden whenever -cpuCount or -cpuAffinity is present, so combining them achieves nothing.-profiles= is the exception: it does not work on Linux. Run the server with -name=server instead, and the profile is created on first start at ~/.local/share/Arma 3 - Other Profiles/server/server.Arma3Profile, in the home directory of the user the server process runs as. That file holds the difficulty settings, which is what a difficulty = "Custom" entry in the mission cycle reads from.
arma3server.exe -mod=.upnp = 1 on a host with an active firewall or anti-DDoS measures can hold the server back for 600 seconds; it is not recommended where the ports are already open or forwarded.MaxMsgSend defaults to 128, and higher values cause desync when the available processing power or bandwidth cannot support them.steamProtocolMaxDataSize caps the Steam query packet length at 1024 by default. Raising it lifts that limit, but it can push UDP packets past the MTU, and some older routers do not support the resulting fragmentation.