Networking AWS

Virtualmin GPL on AWS User Guide

| Product: Virtualmin GPL

Virtualmin GPL on AWS User Guide

Virtualmin GPL is a free, open source web hosting control panel built on Webmin. From one point-and-click panel it provisions and manages many websites on a single server, wiring together the Apache web server, MariaDB databases, Postfix and Dovecot email, BIND DNS and per-site users for each virtual server (hosting account) you create.

This cloudimg Amazon Machine Image delivers the complete hosting stack fully installed and configured on Ubuntu 24.04, so a working control panel is running within minutes of launch. The panel is served over HTTPS on port 10000 by Webmin's own web server (miniserv); Apache owns ports 80 and 443 for the websites you host. The edition installed is the fully open source GPL edition (GPL-3.0) — core hosting management is completely functional with no per-domain licensing.

This guide covers connecting to your instance, retrieving the per-instance administrator password, signing in to the panel, creating your first virtual server, scoping the admin port, installing a real TLS certificate and renaming the server.

Virtualmin sign-in page

The panel is root-equivalent. The Virtualmin admin has full control of the server and provisions system users, mailboxes and DNS zones. Treat its password as root-equivalent and restrict the admin port (10000) to trusted source IPs (see Securing the admin port below).


Architecture at a glance

Component Detail
Control panel Virtualmin GPL 8.1.0 on Webmin 2.652, served on port 10000 over HTTPS
Web server Apache (apache2) on ports 80 / 443, one virtual host per hosted site
Database MariaDB, managed per hosted site
Email Postfix (SMTP) and Dovecot (IMAP/POP3), per hosted domain
DNS BIND (named), one zone per hosted domain
Admin panel URL https://<instance-public-ip>:10000/ (self-signed certificate)
Health endpoint https://127.0.0.1:10000/session_login.cgi (returns the login page)

Virtualmin manages the whole server, so its data (hosted-site home directories, the MariaDB datadir, mail spools and DNS zones) lives across the operating-system disk rather than on a separate volume. Grow the root EBS volume if you host many sites.


Connecting to your instance

Connect over SSH on port 22 as the default login user for your operating-system variant.

OS variant SSH login user
Ubuntu 24.04 ubuntu
ssh -i /path/to/your-key.pem ubuntu@<instance-public-ip>

Replace <instance-public-ip> with the public IPv4 address of your instance (visible in the EC2 console) and /path/to/your-key.pem with the private key you launched the instance with.


Per-instance credentials

On the first boot of every instance, a one-shot service (virtualmin-firstboot.service) generates identity that is unique to that instance:

  • a fresh self-signed TLS certificate for the panel, and
  • a fresh 24-character administrator password for the Virtualmin root panel user.

No default or shared credentials ship in the image, and the operating-system root account stays locked. The panel password is written to a root-only file. Retrieve it over SSH:

cat /root/virtualmin-credentials.txt

The file looks like this (your URL and password will differ):

VIRTUALMIN_URL=https://<instance-public-ip>:10000/
VIRTUALMIN_USERNAME=root
VIRTUALMIN_PASSWORD=************************

Sign in to the panel as user root with the VIRTUALMIN_PASSWORD value.


Signing in to the panel

Browse to https://<instance-public-ip>:10000/. The appliance ships a self-signed certificate, so your browser shows a certificate warning the first time — this is expected; proceed to the site (and see Installing a real TLS certificate below to replace it for production). Sign in as root with the password from the credentials file.

Virtualmin system dashboard after sign-in

The dashboard shows the running GPL edition, live CPU / memory / disk usage and the package status of the server at a glance.


Securing the admin port (important)

Port 10000 is the control panel and is root-equivalent, so it must not be open to the whole internet. In your EC2 security group, scope inbound tcp/10000 to the specific source IP addresses your administrators connect from (for example your office or VPN egress), and leave ports 80 and 443 open for the websites you host. SSH (port 22) should likewise be scoped to trusted sources.

You can confirm which services are listening on the instance:

ss -tln | grep -E ':(80|443|10000)\b'

Creating your first virtual server

A virtual server is one hosted domain with its own website, database, mailboxes, DNS zone and Unix user. Create one from Create Virtual Server in the panel: enter the domain name and an administration password, and Virtualmin provisions the whole stack for that domain in one step.

Creating a virtual server

The Enabled features section shows everything provisioned for the domain — the Apache website, MariaDB database, DNS zone, mailboxes and spam/virus filtering. Every hosted domain you create is listed and managed from the Virtual Servers page.

The virtual servers management page

You can do the same from the command line. This lists the hosted domains (empty on a fresh instance):

virtualmin list-domains --name-only

To create a domain from the shell (replace the domain and choose a strong password):

virtualmin create-domain --domain example.test --pass 'CHANGE-ME' --unix --dir --web --dns --mail

Managing the hosting stack

The hosting daemons run as systemd services. Confirm they are active:

systemctl is-active webmin apache2 mariadb postfix dovecot named

Each prints active:

active
active
active
active
active
active

Manage any of them with systemctl (for example systemctl restart apache2). The control panel itself is the webmin service.

You can confirm the installed edition is the open source GPL edition:

grep '^SerialNumber=' /etc/virtualmin-license
SerialNumber=GPL

Installing a real TLS certificate

The panel ships a self-signed certificate. For production, install a trusted certificate:

  • For the panel itself: in Webmin go to Webmin → Webmin Configuration → SSL Encryption and either upload a certificate or request one from Let's Encrypt for a hostname that resolves to this instance.
  • For a hosted website: open the virtual server, then Server Configuration → SSL Certificate → Let's Encrypt, and request a certificate for that domain (its DNS must point at this instance first).

Renaming the server

The appliance boots with a placeholder hostname (virtualmin.cloudimg.co.uk) that Virtualmin baked into its Apache, Postfix and BIND configuration at build time, and cloud-init is configured to preserve it. To give the server its own name, rename it from within Virtualmin so every dependent service is updated together:

  1. Webmin → Networking → Network Configuration → Hostname and DNS Client — set the new fully-qualified hostname.
  2. Virtualmin → System Settings → Re-Check Configuration — so Virtualmin re-reads the new identity across Apache, Postfix and BIND.

Do not change the hostname with hostnamectl alone, as that would desynchronise the hosting stack from the name Virtualmin has recorded.


Support

This AMI includes 24/7 technical support from cloudimg by email and live chat. We help with deployment, creating and managing virtual servers, DNS and mail configuration, TLS certificate installation, backups and upgrades.

All product and company names are trademarks or registered trademarks of their respective holders. Use of them does not imply any affiliation with or endorsement by them.