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
- A Linux VPS running Ubuntu 22.04/24.04, Debian 12, AlmaLinux 8/9 or Rocky 8/9.
- Root SSH access, or a normal user with
sudo. If you have neither yet, read Connect to your Linux VPS with SSH and Create a sudo user on Ubuntu, Debian, AlmaLinux and Rocky Linux. - Your server's public IP address. Examples here use
203.0.113.10. - Ten minutes and a browser.
Start by refreshing packages so the new repository resolves cleanly:
# Debian and Ubuntu
sudo apt update
# AlmaLinux and Rocky
sudo dnf check-updateNote: 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:
curl -o webmin-setup-repo.sh https://raw.githubusercontent.com/webmin/webmin/master/webmin-setup-repo.sh
sh webmin-setup-repo.shThe script prints the repository it configured. Then install the package, which pulls in the Perl modules and helper tools Webmin needs:
# Debian and Ubuntu
sudo apt update
sudo apt install --install-recommends webmin# AlmaLinux and Rocky
sudo dnf install webminInstallation takes a minute or two. When it finishes, the service is usually started already. Make sure it survives a reboot:
sudo systemctl enable --now webminIf 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:
sudo ufw allow 10000/tcp
sudo ufw statusOn AlmaLinux and Rocky with firewalld:
sudo firewall-cmd --permanent --add-port=10000/tcp
sudo firewall-cmd --reloadWarning: 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:
groups deployNow tighten the setup, in this order:
- Limit who can reach it. Go to Webmin → Webmin Configuration → IP Access Control and allow only the addresses you administer from.
- Turn on two-factor authentication. Go to Webmin → Webmin Configuration → Two-Factor Authentication and enable TOTP, then add the secret to your authenticator app.
- 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
sudoorwheelgroup. - 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:
systemctl is-enabled webmin
systemctl is-active webmin
ss -tlnp | grep 10000You want enabled and active, plus a listening socket on 0.0.0.0:10000 or :::10000. You can also test locally without leaving SSH:
curl -kI https://127.0.0.1:10000An 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, thenss -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; ifsudoorwheelis 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
- Work through First steps after your Linux VPS is ready to cover updates, timezone and SSH hardening.
- Watch the server with [Monitor CPU, memory, disk and logs on a Linux server
