How to configure the firewall by port (game/connect/web) in MU Online
Learn how to map and open only the right ports of your MU Online server (ConnectServer, GameServer and Web), blocking the rest to reduce the attack surface without kicking players out.
Configuring the firewall by port is one of the most important — and most poorly executed — tasks in administering a MU Online server. Many server owners simply turn off the entire firewall to "solve" a connection problem, and in doing so they throw SQL Server, the admin panel and internal services w
Configuring the firewall by port is one of the most important — and most poorly executed — tasks in administering a MU Online server. Many server owners simply turn off the entire firewall to "solve" a connection problem, and in doing so they throw SQL Server, the admin panel and internal services wide open to the whole internet. The result is predictable: hijacked accounts, a leaked database and a downed server. The correct approach is the opposite: deny everything by default and open only the ports that players and the site truly need. In this guide you will learn to separate ports into three groups — game, connect and web — and to create surgical rules in Windows Firewall that keep the server reachable while, at the same time, closed to what should not be exposed.
This tutorial assumes a Windows server (Windows Server 2016/2019/2022 or Windows 10/11 in a test environment) with a MuServer already installed. If you are still building the base of your project, start with the step-by-step guide on how to create a MU Online server and come back here once the processes are already starting up correctly.
Prerequisites
Before touching any rule, make sure you have:
- Administrator access to the server's Windows (an elevated PowerShell or Command Prompt).
- Alternative access to the server via the VPS provider's panel KVM/VNC console. This is non-negotiable: if you get a rule wrong and lose RDP, the console is the only way to recover access without calling support.
- The static IP of your admin computer (find it on sites like "what is my ip"). It will be used to restrict RDP.
- Your MuServer configuration files at hand, mainly the
ConnectServer.iniand the GameServer definition file. - A notepad to document each port before opening it.
Understanding the three port groups
The most common conceptual mistake is treating all ports the same. In practice, a MU server has ports with three very different purposes, and each group calls for a distinct policy.
Connect is the entry point. When the player opens the client, main.exe connects to the ConnectServer, receives the list of sub-servers and the IP/port of each one. This port needs to be open to the entire world, otherwise no one even sees the server selection screen.
Game are the sub-servers themselves. After choosing a server from the list, the client opens a new connection directly to the corresponding GameServer. Each sub-server usually has its own port. These also need to be public.
Web is the server's site/panel (account registration, ranking, donation shop). Exposure only exists here if the site is on the same machine as the game. It is the most sensitive group because it attracts application attacks (SQL injection, brute force on the admin login).
Beyond these three, there is a fourth group that should never be exposed: the internal ports (DataServer, JoinServer, EventServer) and SQL Server. They only talk within the machine itself.
Step 1: map your server's real ports
Do not trust numbers "from memory." Open the configuration files and note what is actually configured. The paths and names vary by provider/version of MuServer, but the logic is always the same.
In ConnectServer.ini (inside the ConnectServer folder, something like ConnectServer/Data/ConnectServer.ini) look for something like:
[ConnectServerInfo]
ConnectServerPortTCP = 44405
MaxUserCount = 1000
In the server list file that the Connect delivers to the client (often ServerList.dat or an equivalent .xml/.ini), check each GameServer's ports:
[Server1]
ServerName = ViciadosMU - Season 6
IP = 0.0.0.0
Port = 55901
[Server2]
ServerName = ViciadosMU - PvP
IP = 0.0.0.0
Port = 55902
Build a table like this with your values (the ones below are just examples and vary by provider/version):
| Group | Component | Port (example) | Protocol | Exposure |
|---|---|---|---|---|
| Connect | ConnectServer | 44405 | TCP | Public (internet) |
| Game | GameServer 1 | 55901 | TCP | Public (internet) |
| Game | GameServer 2 | 55902 | TCP | Public (internet) |
| Web | Site HTTP | 80 | TCP | Public or redirect |
| Web | Site HTTPS | 443 | TCP | Public |
| Internal | DataServer | 55960 | TCP | Localhost only |
| Internal | JoinServer | 55970 | TCP | Localhost only |
| Internal | SQL Server | 1433 | TCP | Localhost only |
| Admin | RDP | 3389 | TCP | Restricted to your IP |
Confirm which ports are actually listening with:
netstat -ano | findstr "LISTENING" | findstr "44405 55901 55902 1433 3389"
Step 2: set the default block policy
The correct security principle is default deny: block everything inbound and open only what is needed. Before applying it, create the RDP rule (Step 3, item 1) — but conceptually the policy comes first.
netsh advfirewall set allprofiles state on
netsh advfirewall set allprofiles firewallpolicy blockinbound,allowoutbound
The first command ensures the firewall is on across all three profiles (Domain, Private, Public). The second sets the policy: block inbound, allow outbound.
Step 3: open the ports in the correct order
Follow this numbered order. It was designed so you never lock yourself out.
- Open RDP only for your IP (replace
203.0.113.10with your real IP):
netsh advfirewall firewall add rule name="ADMIN - RDP restrito" dir=in action=allow protocol=TCP localport=3389 remoteip=203.0.113.10
- Open the ConnectServer (connect group) for everyone:
netsh advfirewall firewall add rule name="MU - ConnectServer 44405" dir=in action=allow protocol=TCP localport=44405
- Open the GameServers (game group). One rule per port keeps the log more readable:
netsh advfirewall firewall add rule name="MU - GameServer 1 (55901)" dir=in action=allow protocol=TCP localport=55901
netsh advfirewall firewall add rule name="MU - GameServer 2 (55902)" dir=in action=allow protocol=TCP localport=55902
If you have many sub-servers in sequence, a range solves it:
netsh advfirewall firewall add rule name="MU - GameServers 55901-55910" dir=in action=allow protocol=TCP localport=55901-55910
- Open the web group — only if the site is on the same machine:
netsh advfirewall firewall add rule name="WEB - HTTP 80" dir=in action=allow protocol=TCP localport=80
netsh advfirewall firewall add rule name="WEB - HTTPS 443" dir=in action=allow protocol=TCP localport=443
- Explicitly block the internal ports and SQL from the internet. Since the policy is already block, this is redundant in theory, but an explicit block rule protects against future accidental openings and serves as documentation:
netsh advfirewall firewall add rule name="BLOCK - SQL 1433 externo" dir=in action=block protocol=TCP localport=1433
netsh advfirewall firewall add rule name="BLOCK - DataServer 55960 externo" dir=in action=block protocol=TCP localport=55960
netsh advfirewall firewall add rule name="BLOCK - JoinServer 55970 externo" dir=in action=block protocol=TCP localport=55970
Step 4: harden SQL Server at the service level
Blocking 1433 in the firewall is good, but defense in depth calls for binding SQL itself to the loopback. Open the SQL Server Configuration Manager → SQL Server Network Configuration → Protocols → TCP/IP → IP Addresses tab. Keep enabled only the IPAll/IP1 that corresponds to 127.0.0.1 and disable the addresses pointing to the public IP. This way, even if someone opens 1433 by mistake, SQL will not be listening on the public interface.
Step 5: do the same thing through the graphical interface (optional)
If you prefer clicking to typing, run wf.msc and follow:
- Inbound Rules → New Rule.
- Type Port → TCP → enter the port (e.g. 44405).
- Allow the connection.
- Check all three profiles (Domain, Private, Public).
- Give it a standardized name, like
MU - ConnectServer 44405.
To restrict by IP (as with RDP), after creating the rule: right-click → Properties → Scope tab → under Remote IP address choose "These IP addresses" and add yours.
Step 6: test from the outside in
Testing from within the server itself is misleading, because local traffic does not pass through the same internet rules. Test from outside:
- Ask a friend (or use your phone on 4G, off the Wi-Fi) to open the client and check whether the server list loads (validates Connect) and whether they enter the world (validates Game).
- From another machine, confirm that 1433 is closed. A simple way in PowerShell:
Test-NetConnection -ComputerName YOUR_PUBLIC_IP -Port 1433
The expected result is TcpTestSucceeded : False. If it returns True, SQL is exposed — stop everything and fix it before moving on.
Common errors and fixes
| Symptom | Likely cause | Fix |
|---|---|---|
| Server list does not load | ConnectServer port blocked or wrong | Confirm the port in ConnectServer.ini and the corresponding inbound rule |
| List appears, but freezes on entering | GameServer with no allow rule | Create the dir=in action=allow rule for the sub-server port |
| I lost RDP access | Block policy applied without allowing 3389 | Enter via the KVM console, run netsh advfirewall reset and redo it in order |
| SQL reachable from the internet | 1433 open or SQL listening on 0.0.0.0 | Block 1433 and bind SQL to 127.0.0.1 in Configuration Manager |
| Site opens over HTTP but not HTTPS | Missing 443 rule or certificate not installed | Create the 443 rule and check the SSL binding in IIS |
| Rules "disappear" after a restart | Firewall was turned off by another app/service | Confirm netsh advfirewall show allprofiles and keep the state ON |
Launch checklist
- All real ports mapped from the
.inifiles (not from memory) - RDP rule restricted to my IP created before the general block
- Default policy set to
blockinbound,allowoutbound - ConnectServer opened to the internet
- Each GameServer with its own inbound rule
- Web ports (80/443) opened only if the site is on the same machine
- SQL (1433) and internal ports explicitly blocked
- SQL Server listening only on 127.0.0.1
- Test done from outside (phone/friend) validating Connect and Game
Test-NetConnectionconfirming 1433 closed- Backup of rules exported with
netsh advfirewall export - Provider's KVM/VNC access tested and working
With this per-group mapping, your server exposes exactly what players need and nothing beyond that. It is the security foundation on which you will later stack anti-flood, anti-DDoS and web panel hardening — but it all starts with knowing, precisely, which ports are open and why.
Frequently asked questions
Do I need to open SQL Server port 1433 in the firewall?
No. SQL Server is only accessed by the server's own processes (DataServer, GameServer) on the same machine. Keep 1433 blocked from the internet and, ideally, configure SQL to listen only on 127.0.0.1.
Which port do players actually use to enter the game?
The client first connects to the ConnectServer (a common example is 44405 TCP) to receive the server list, and then to the chosen GameServer (example 55901 TCP). Both need to be open to the internet. The exact numbers vary by provider/version and live in your MuServer's .ini files.
I blocked everything and now I can't access via RDP anymore. What now?
Use the KVM/VNC console from your VPS provider's panel, which works even with port 3389 blocked. Run 'netsh advfirewall reset' to return to defaults and reapply the rules, always starting by allowing RDP for your IP.
Should I open ports 80 and 443 of the site along with the game?
Only if the site is hosted on the same machine as the game. If the web panel is on another server, keep 80/443 closed on the game machine. When you open them, prefer redirecting everything to HTTPS (443) and restricting the /admin area by IP.
Inbound or outbound rule: which one do I configure?
To expose the server to players you configure INBOUND rules. Outbound traffic can usually stay open. The focus of this tutorial is inbound, which is what exposes ports to the internet.