Webmin es un panel web de código abierto para administrar servidores Linux: usuarios, paquetes, servicios, cron, firewall y archivos de configuración desde el navegador, con módulos para Apache, Nginx, BIND, Postfix y muchos otros servicios. En este tutorial instalarás Webmin desde su repositorio oficial en Ubuntu 24.04, lo publicarás con un certificado válido de Let's Encrypt y restringirás el acceso para que el panel no quede abierto a todo Internet.

Requisitos previos

  • Un servidor con Ubuntu 24.04 LTS, por ejemplo un VPS de CubePath, con al menos 1 GB de RAM.
  • Un usuario no root con privilegios sudo. Webmin permite iniciar sesión con este usuario.
  • Un nombre de dominio, que en esta guía aparece como your_domain, con un registro DNS A que apunte a la IP pública del servidor. Es necesario para el certificado del paso 5.
  • La dirección IP pública desde la que administrarás el servidor (your_ip), para restringir el acceso en el paso 6.

Paso 1: Añadir el repositorio oficial de Webmin

El proyecto Webmin publica un script que añade su repositorio de paquetes y su clave de firma. Así Webmin se actualiza con apt como cualquier otro paquete.

Descarga el script:

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

Revisa su contenido antes de ejecutarlo como root:

less webmin-setup-repo.sh

Ejecútalo. Te pedirá confirmación antes de configurar el repositorio; responde y:

sudo sh webmin-setup-repo.sh

El script crea el archivo /etc/apt/sources.list.d/webmin-stable.list con la clave de firma en /usr/share/keyrings. Compruébalo:

cat /etc/apt/sources.list.d/webmin-stable.list
deb [signed-by=/usr/share/keyrings/debian-webmin-developers.gpg] https://download.webmin.com/download/newkey/repository stable contrib

La ruta exacta de la clave y del repositorio puede variar ligeramente entre versiones del script; lo importante es que incluya signed-by y apunte a download.webmin.com.

Paso 2: Instalar Webmin

Instala el paquete con sus dependencias recomendadas, que añaden módulos de Perl usados por varias funciones del panel:

sudo apt update
sudo apt install --install-recommends webmin

Webmin se instala como un servicio de systemd que escucha en el puerto 10000 con HTTPS y un certificado autofirmado. Comprueba que está activo:

sudo systemctl status webmin --no-pager
● webmin.service - Webmin server daemon
     Loaded: loaded (/usr/lib/systemd/system/webmin.service; enabled; preset: enabled)
     Active: active (running) since Thu 2026-09-24 10:12:44 UTC; 20s ago

Confirma que el puerto está a la escucha:

sudo ss -tlnp | grep 10000
LISTEN 0      4096         0.0.0.0:10000      0.0.0.0:*    users:(("miniserv.pl",pid=4821,fd=5))

Paso 3: Abrir el puerto en el firewall

Permite SSH antes de activar UFW para no perder el acceso, y abre el puerto de Webmin solo para tu IP:

sudo ufw allow OpenSSH
sudo ufw allow from your_ip to any port 10000 proto tcp
sudo ufw enable

Verifica las reglas:

sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
10000/tcp                  ALLOW       your_ip
OpenSSH (v6)               ALLOW       Anywhere (v6)

Si tu IP cambia con frecuencia, puedes usar sudo ufw allow 10000/tcp de forma temporal, pero no dejes el panel expuesto a todo Internet de forma permanente: es un objetivo habitual de escaneos y ataques de fuerza bruta.

Paso 4: Iniciar sesión por primera vez

Abre en el navegador https://your_server_ip:10000. Verás un aviso de certificado no válido, porque de momento Webmin usa uno autofirmado; acepta la excepción para continuar (el paso 5 lo sustituye).

Inicia sesión con tu usuario sudo y su contraseña. Webmin permite la entrada a root y a los usuarios que pueden ejecutar cualquier comando con sudo, y les da acceso completo.

Una vez dentro, el panel Dashboard muestra el sistema operativo, la carga, la memoria y el uso de disco. Desde el menú lateral tienes, entre otros:

  • System > Software Package Updates: actualizaciones pendientes.
  • System > Users and Groups: usuarios y grupos del sistema.
  • System > Bootup and Shutdown: servicios de systemd.
  • System > Scheduled Cron Jobs: tareas programadas.
  • Tools > File Manager y Tools > Terminal: archivos y consola en el navegador.

Paso 5: Usar un certificado de Let's Encrypt

Un certificado válido elimina el aviso del navegador y evita que te acostumbres a aceptar certificados sin comprobarlos. Usarás Certbot en modo standalone, que levanta un servidor web temporal en el puerto 80 para validar el dominio.

Instala Certbot y abre el puerto 80 para la validación:

sudo apt install certbot
sudo ufw allow 80/tcp

Solicita el certificado. Sustituye your_domain y your_email:

sudo certbot certonly --standalone -d your_domain -m your_email --agree-tos --no-eff-email
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/your_domain/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/your_domain/privkey.pem

Indica a Webmin que use el certificado. Su servidor web interno, miniserv, se configura en /etc/webmin/miniserv.conf:

sudo nano /etc/webmin/miniserv.conf

Busca las líneas keyfile y certfile, sustitúyelas y añade extracas para la cadena intermedia:

keyfile=/etc/letsencrypt/live/your_domain/privkey.pem
certfile=/etc/letsencrypt/live/your_domain/cert.pem
extracas=/etc/letsencrypt/live/your_domain/chain.pem

Reinicia Webmin:

sudo systemctl restart webmin

Comprueba desde tu equipo que el certificado es el nuevo:

echo | openssl s_client -connect your_domain:10000 -servername your_domain 2>/dev/null | openssl x509 -noout -issuer -enddate
issuer=C = US, O = Let's Encrypt, CN = R11
notAfter=Dec 23 10:20:11 2026 GMT

Certbot renueva los certificados automáticamente con el temporizador certbot.timer, pero Webmin solo carga el certificado al arrancar. Crea un hook que lo reinicie tras cada renovación:

sudo nano /etc/letsencrypt/renewal-hooks/deploy/restart-webmin.sh
#!/usr/bin/env bash
set -euo pipefail
systemctl restart webmin

Hazlo ejecutable y prueba la renovación en modo simulación:

sudo chmod 755 /etc/letsencrypt/renewal-hooks/deploy/restart-webmin.sh
sudo certbot renew --dry-run

La salida debe terminar con Congratulations, all simulated renewals succeeded. Con --standalone, la renovación necesita el puerto 80 accesible, así que mantén abierta la regla de UFW para ese puerto.

Paso 6: Restringir el acceso dentro de Webmin

UFW ya limita el puerto 10000, pero Webmin tiene su propio control de acceso por IP. Configurarlo añade una segunda barrera si alguna vez cambias las reglas del firewall.

Edita de nuevo /etc/webmin/miniserv.conf:

sudo nano /etc/webmin/miniserv.conf

Añade al final una línea allow con las IP o redes autorizadas, separadas por espacios. Incluye 127.0.0.1 para no bloquear el acceso local:

allow=127.0.0.1 your_ip

Reinicia el servicio:

sudo systemctl restart webmin

Desde una IP que no esté en la lista, Webmin responderá con un error de acceso denegado aunque el firewall permita la conexión. Puedes hacer el mismo cambio desde el panel en Webmin > Webmin Configuration > IP Access Control.

En esa misma sección de configuración, revisa también Authentication, donde puedes activar el bloqueo de hosts y usuarios tras varios intentos de inicio de sesión fallidos.

Paso 7: Mantener Webmin actualizado

Como Webmin viene de un repositorio de apt, se actualiza junto con el resto del sistema:

sudo apt update
sudo apt upgrade

Comprueba la versión instalada:

apt policy webmin

Si tienes activadas las actualizaciones automáticas de seguridad con unattended-upgrades, ten en cuenta que por defecto solo instalan paquetes de los repositorios de Ubuntu; Webmin se actualizará cuando ejecutes apt upgrade.

Solución de problemas

El navegador no carga el panel. Comprueba que el servicio está activo (sudo systemctl status webmin), que escucha en el puerto 10000 (sudo ss -tlnp | grep 10000) y que tu IP actual coincide con la de las reglas de UFW y la línea allow. Consulta el registro de errores de Webmin:

sudo tail -n 30 /var/webmin/miniserv.error

Has olvidado la contraseña o no puedes iniciar sesión. Si el usuario root de Webmin usa autenticación Unix, basta con cambiar la contraseña del sistema. Para restablecer directamente la contraseña de un usuario de Webmin, usa el script incluido:

sudo /usr/share/webmin/changepass.pl /etc/webmin root 'your_new_password'

Webmin no arranca tras cambiar el certificado. Revisa que las rutas de keyfile, certfile y extracas existen y que el dominio coincide exactamente con el nombre del directorio en /etc/letsencrypt/live/.

Conclusión

Webmin está instalado desde su repositorio oficial, sirve el panel con un certificado de Let's Encrypt que se renueva solo y únicamente acepta conexiones desde las IP que has autorizado, tanto en UFW como en su propia configuración. Como siguientes pasos, crea usuarios de Webmin con acceso solo a los módulos que necesiten desde Webmin > Webmin Users, programa copias de la configuración con Webmin > Backup Configuration Files y revisa periódicamente Webmin > Webmin Actions Log para auditar los cambios hechos desde el panel.