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
Notasi en el servidor ya hay un servidor web ocupando el puerto 80, usa
sudo certbot certonly --webroot -w /var/www/html -d your_domainen lugar de--standalone.
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.
