ISPConfig Setup · 7 min read · Sep 08, 2025
Configuración Perfecta de Multiserver ISPConfig en Ubuntu 20.04 y Debian 10

Este tutorial te guiará a través de la instalación de tu propia configuración de multiserver ISPConfig 3 con servidores dedicados para el panel, web, DNS, correo y webmail. Tanto el servidor DNS como el de correo tendrán un servidor espejo para redundancia. Puedes agregar fácilmente más servidores de un tipo determinado después.
Se utilizará el instalador automático oficial de ISPConfig para configurar los servidores. Se usará Debian 10 como sistema operativo. La guía también ha sido probada con Ubuntu 20.04.2.
Puedes leer más sobre el instalador automático aquí.
1. Nota Preliminar
Estos serán los hosts que estamos instalando:
host FQDN IP
panel panel.example.com 10.0.64.12
web01 web01.example.com 10.0.64.13
mx1 mx1.example.com 10.0.64.14
mx2 mx2.example.com 10.0.64.15
ns1 ns1.example.com 10.0.64.16
ns2 ns2.example.com 10.0.64.17
webmail webmail.example.com 10.0.64.18Usaremos nombres de host, direcciones IP y rangos de IP de ejemplo. Asegúrate de cambiarlos en consecuencia en tus comandos/configuración.
Todos los servidores están en la misma red privada pero tienen su propia IP pública. Si tus servidores no tienen una red local compartida, utiliza sus direcciones IPv4 públicas.
Antes de comenzar la instalación de un servidor, configura un registro A y eventual registro AAAA que apunte a la IP pública de tu servidor. Por ejemplo, si el nombre de host es panel.example.com y la IP pública es 11.22.33.44, deberías configurar un registro A para panel.example.com apuntando a 11.22.33.44. Cada servidor debe tener su propia IP pública y nombre de host. **
2. Instalando el servidor maestro
Inicia sesión como root o ejecuta
su -para convertirte en el usuario root en tu servidor antes de continuar. IMPORTANTE: Debes usar ‘su -‘ y no solo ‘su’, de lo contrario, tu variable PATH se configurará incorrectamente por Debian.
2.1 Configurar el nombre de host y hosts
El nombre de host de tu servidor debe ser un subdominio como “panel.example.com”. No uses un nombre de dominio sin una parte de subdominio como “example.com” como nombre de host, ya que esto causará problemas más adelante con tu configuración de correo. Primero, debes verificar el nombre de host en /etc/hosts y cambiarlo cuando sea necesario. La línea debe ser: “Dirección IP - espacio - nombre de host completo incl. dominio - espacio - parte del subdominio”. Para nuestro nombre de host panel.example.com, el archivo debe verse así (algunas líneas pueden ser diferentes, puede variar según el proveedor de hosting):
nano /etc/hosts127.0.0.1 localhost.localdomain localhost
# Esta línea debe cambiarse en cada nodo al nombre de servidor correcto:
127.0.1.1 panel.example.com panel
# Estas líneas son las mismas en cada nodo:
10.0.64.12 panel.example.com panel
10.0.64.13 web01.example.com web01
10.0.64.14 mx1.example.com mx1
10.0.64.15 mx2.example.com mx2
10.0.64.16 ns1.example.com ns1
10.0.64.17 ns2.example.com ns2
10.0.64.18 webmail.example.com webmail
# Las siguientes líneas son deseables para hosts compatibles con IPv6
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allroutersComo puedes ver, hemos agregado los nombres de host de nuestros otros servidores también, para que puedan comunicarse a través de la red interna más tarde.
Luego edita el archivo /etc/hostname:
nano /etc/hostnameDeberá contener solo la parte del subdominio, en nuestro caso:
panelFinalmente, reinicia el servidor para aplicar el cambio:
systemctl rebootInicia sesión nuevamente y verifica si el nombre de host es correcto ahora con estos comandos:
hostname
hostname -fLa salida debe ser como esta:
root@panel:~$ hostname
panel
root@panel:~$ hostname -f
panel.example.comAhora podemos ejecutar el instalador automático para instalar todos los paquetes necesarios e ISPConfig:
wget -O - https://get.ispconfig.org | sh -s -- --no-mail --no-dns --use-php=systemDespués de un tiempo, verás:
¡ADVERTENCIA! ¡Este script reconfigurará tu servidor completo!
¡Debería ejecutarse en un servidor recién instalado y toda la configuración actual que hayas hecho probablemente se perderá!
Escribe 'yes' si realmente deseas continuar:Responde “yes” y presiona enter. El instalador comenzará ahora.
Cuando el instalador haya terminado, te mostrará la contraseña de administrador de ISPConfig y la contraseña root de MySQL de esta manera:
[INFO] Tu contraseña de administrador de ISPConfig es: 5GvfSSSYsdfdYC
[INFO] Tu contraseña root de MySQL es: kkAkft82d!kafMwqxdtYsAsegúrate de anotar esta información, junto con el servidor para el que son, ya que las necesitarás más tarde.
2.2 Configurando los usuarios MySQL remotos para nuestros servidores esclavos
Iniciaremos sesión en MySQL para permitir que los otros servidores se conecten a la base de datos ISPConfig en este nodo durante la instalación, agregando registros de usuario root de MySQL en la base de datos maestra para cada nombre de host y dirección IP de servidor esclavo.
En la terminal, ejecuta
mysql -u root -pIngresa tu contraseña de MySQL y luego ejecuta los siguientes comandos:
CREATE USER 'root'@'10.0.64.13' IDENTIFIED BY 'myrootpassword';
GRANT ALL PRIVILEGES ON * . * TO 'root'@'10.0.64.13' IDENTIFIED BY 'myrootpassword' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;CREATE USER 'root'@'10.0.64.14' IDENTIFIED BY 'myrootpassword';
GRANT ALL PRIVILEGES ON * . * TO 'root'@'10.0.64.14' IDENTIFIED BY 'myrootpassword' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;CREATE USER 'root'@'10.0.64.15' IDENTIFIED BY 'myrootpassword';
GRANT ALL PRIVILEGES ON * . * TO 'root'@'10.0.64.15' IDENTIFIED BY 'myrootpassword' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;CREATE USER 'root'@'10.0.64.16' IDENTIFIED BY 'myrootpassword';
GRANT ALL PRIVILEGES ON * . * TO 'root'@'10.0.64.16' IDENTIFIED BY 'myrootpassword' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;CREATE USER 'root'@'10.0.64.17' IDENTIFIED BY 'myrootpassword';
GRANT ALL PRIVILEGES ON * . * TO 'root'@'10.0.64.17' IDENTIFIED BY 'myrootpassword' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;CREATE USER 'root'@'10.0.64.18' IDENTIFIED BY 'myrootpassword';
GRANT ALL PRIVILEGES ON * . * TO 'root'@'10.0.64.18' IDENTIFIED BY 'myrootpassword' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;CREATE USER 'root'@'web01.example.com' IDENTIFIED BY 'myrootpassword';
GRANT ALL PRIVILEGES ON * . * TO 'root'@'web01.example.com' IDENTIFIED BY 'myrootpassword' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;CREATE USER 'root'@'mx1.example.com' IDENTIFIED BY 'myrootpassword';
GRANT ALL PRIVILEGES ON * . * TO 'root'@'mx1.example.com' IDENTIFIED BY 'myrootpassword' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;CREATE USER 'root'@'mx2.example.com' IDENTIFIED BY 'myrootpassword';
GRANT ALL PRIVILEGES ON * . * TO 'root'@'mx2.example.com' IDENTIFIED BY 'myrootpassword' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;CREATE USER 'root'@'ns1.example.com' IDENTIFIED BY 'myrootpassword';
GRANT ALL PRIVILEGES ON * . * TO 'root'@'ns1.example.com' IDENTIFIED BY 'myrootpassword' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;CREATE USER 'root'@'ns2.example.com' IDENTIFIED BY 'myrootpassword';
GRANT ALL PRIVILEGES ON * . * TO 'root'@'ns2.example.com' IDENTIFIED BY 'myrootpassword' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;CREATE USER 'root'@'webmail.example.com' IDENTIFIED BY 'myrootpassword';
GRANT ALL PRIVILEGES ON * . * TO 'root'@'webmail.example.com' IDENTIFIED BY 'myrootpassword' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;En los comandos SQL anteriores, reemplaza las direcciones IP (10.0.64.12 - 10.0.64.18) con las direcciones IP de tus servidores, web01.example.com, mx1.example.com, mx2.example.com, ns1.example.com, ns2.example.com y webmail.example.com con los nombres de host de tus servidores y myrootpassword con la contraseña root deseada (es una buena práctica usar una contraseña diferente para cada host. Anótalas, ya que las necesitarás más tarde al instalar o actualizar tus servidores esclavos).
Cuando esto esté hecho, puedes salir de MySQL con:
EXIT;Ahora puedes iniciar sesión en ISPConfig en https://panel.example.com:8080 con el nombre de usuario admin y la contraseña que el instalador te mostró.
2.3 Configurando el firewall
Lo último que queda por hacer es configurar nuestro firewall.
Inicia sesión en la interfaz de ISPConfig y ve a Sistema -> Firewall. Luego haz clic en “Agregar nuevo registro de firewall”.
Para el servidor del panel, debemos abrir los siguientes puertos:
TCP:
22,80,443,8080,8081No se deben abrir puertos UDP a través de la interfaz.
También vamos a abrir el puerto 3306, que se utiliza para MySQL, pero solo desde nuestra red local por razones de seguridad. Para hacerlo, ejecuta el siguiente comando desde la CLI, después de que el cambio desde el panel de ISPConfig se haya propagado (cuando el punto rojo haya desaparecido):
ufw allow from 10.0.64.0/24 to any port 3306 proto tcpTu panel ahora está configurado y listo para usar.
En el siguiente paso, instalaremos el servidor web.
Recibe nuevas publicaciones en tu bandeja de entrada.
No spam. Cancela la suscripción en cualquier momento.