Control panels

How to install Webmin on a Linux VPS

Install Webmin on a Linux VPS from the official repository, open port 10000 in your firewall and secure the login with two-factor authentication.

BeginnerLinux server5 min read

To install Webmin on a Linux VPS you add the official Webmin repository, install the package and reach the panel over HTTPS on port 10000. This guide covers Ubuntu 22.04/24.04, Debian 12 and AlmaLinux/Rocky 8–9, then walks through the firewall rule and the settings that stop a public admin panel from being an open door.

Webmin is an open-source browser interface for the server itself: users, services, cron jobs, packages, firewall rules and logs. It is not a hosting panel, so it does not manage websites or mailboxes for you. If you want that, pick a hosting panel instead.

Before you start

Start by refreshing packages so the new repository resolves cleanly:

Bash
# Debian and Ubuntu
sudo apt update

# AlmaLinux and Rocky
sudo dnf check-update

Note: Webmin changes its install method and supported releases from time to time. If a command here fails on a very new distribution, check the official Webmin documentation before improvising.

Install Webmin from the official repository

Webmin publishes a setup script that detects your distribution, adds its APT or DNF repository and imports the signing key. Download it and run it:

Bash
curl -o webmin-setup-repo.sh https://raw.githubusercontent.com/webmin/webmin/master/webmin-setup-repo.sh
sh webmin-setup-repo.sh

The script prints the repository it configured. Then install the package, which pulls in the Perl modules and helper tools Webmin needs:

Bash
# Debian and Ubuntu
sudo apt update
sudo apt install --install-recommends webmin
Bash
# AlmaLinux and Rocky
sudo dnf install webmin

Installation takes a minute or two. When it finishes, the service is usually started already. Make sure it survives a reboot:

Bash
sudo systemctl enable --now webmin

If you would rather not run a script from the internet, the official documentation explains how to add the repository by hand and how to install from a tarball. The tarball route works, but you then manage updates yourself.

Tip: Keep Webmin updated with your normal package manager (sudo apt upgrade or sudo dnf upgrade). Panel updates often include security fixes.

Open port 10000 in the firewall

Webmin listens on TCP port 10000 and speaks HTTPS. Nothing will load until that port is reachable.

On Ubuntu and Debian with UFW:

Bash
sudo ufw allow 10000/tcp
sudo ufw status

On AlmaLinux and Rocky with firewalld:

Bash
sudo firewall-cmd --permanent --add-port=10000/tcp
sudo firewall-cmd --reload

Warning: Opening port 10000 to the whole internet means anyone can load your login page. Where you have a fixed office or home address, restrict the rule to that address instead — for example sudo ufw allow from 203.0.113.10 to any port 10000 proto tcp — and keep the broader rule only while you set things up.

If your provider offers a firewall in its dashboard, check it too: a port blocked there stays blocked no matter what your server says. For background on the available firewalls, see UFW vs firewalld vs nftables vs iptables.

Sign in and secure the panel

Open https://203.0.113.10:10000/ in a browser. The certificate is self-signed until you replace it, so expect a warning page and continue past it.

Log in with root, or with any user that has sudo rights. Check a user's groups if login fails:

Bash
groups deploy

Now tighten the setup, in this order:

  1. Limit who can reach it. Go to Webmin → Webmin Configuration → IP Access Control and allow only the addresses you administer from.
  2. Turn on two-factor authentication. Go to Webmin → Webmin Configuration → Two-Factor Authentication and enable TOTP, then add the secret to your authenticator app.
  3. Stop logging in as root. Use your sudo user for daily work. See Add a user to a group in Linux if the account needs the sudo or wheel group.
  4. Install a real certificate. Point a hostname at the server, then use Webmin → Webmin Configuration → SSL Encryption → Let's Encrypt so the browser stops warning you.

Warning: Changing the Webmin port or enabling "SSL only" settings can lock you out of the panel if you forget to update the firewall rule. Note what you change before you save it, and keep SSH open in another terminal.

Check it works

Confirm the service is running and listening:

Bash
systemctl is-enabled webmin
systemctl is-active webmin
ss -tlnp | grep 10000

You want enabled and active, plus a listening socket on 0.0.0.0:10000 or :::10000. You can also test locally without leaving SSH:

Bash
curl -kI https://127.0.0.1:10000

An HTTP response header means the panel is up. Finally, load the address from your own machine, log in and open a page such as System → Users and Groups to confirm the interface responds.

Troubleshooting

  • "This site can't be reached" or connection refused — either the service is down or the port is blocked. Run systemctl status webmin, then ss -tlnp | grep 10000, then re-check UFW, firewalld and your provider's firewall.
  • Browser warns the certificate is not trusted — expected with the self-signed certificate Webmin creates at install. Install a Let's Encrypt certificate through the SSL Encryption module once a hostname points at the server.
  • Login rejected for a normal user — Webmin only accepts accounts with administrative rights. Run groups deploy; if sudo or wheel is missing, add it and try again.
  • The setup script or package install fails — usually an unsupported distribution release or a blocked outbound connection. Verify your OS version and check the official Webmin documentation for the current repository settings.
  • Panel unreachable after a reboot — the service is not enabled. Run sudo systemctl enable --now webmin.

Next steps

Was this guide helpful?

Still stuck?

Ask MdmHost AI for a quick answer, or open a ticket and our team will take a look. We are here 24/7.