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.18

Usaremos 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/hosts
127.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-allrouters

Como 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/hostname

Deberá contener solo la parte del subdominio, en nuestro caso:

panel

Finalmente, reinicia el servidor para aplicar el cambio:

systemctl reboot

Inicia sesión nuevamente y verifica si el nombre de host es correcto ahora con estos comandos:

hostname  
hostname -f

La salida debe ser como esta:

root@panel:~$ hostname  
panel  
root@panel:~$ hostname -f  
panel.example.com

Ahora 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=system

Despué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!kafMwqxdtYs

Asegú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 -p

Ingresa 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,8081

No 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 tcp

Tu panel ahora está configurado y listo para usar.

En el siguiente paso, instalaremos el servidor web.

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

No spam. Cancela la suscripción en cualquier momento.