Configuración de ISPConfig Perfect Multiserver en Ubuntu 20.04 y Debian 10

Este tutorial te llevará a instalar tu propia configuración multiservidor ISPConfig 3 con servidores dedicados para el panel, la web, el DNS, el correo y el webmail. Tanto el servidor DNS como el de correo tendrán un servidor espejo para la redundancia. Después puedes añadir fácilmente más servidores de un tipo determinado.

Se utilizará el autoinstalador oficial de ISPConfig para configurar los servidores. Se utilizará Debian 10 como sistema operativo. La guía se ha probado también con Ubuntu 20.04.2.

Puedes leer más sobre el auto-instalador aquí.

1. Nota preliminar

Estos serán los hosts que instalaremos:

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

Utilizaremos 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 iniciar la instalación de un servidor, configura un registro A y eventualmente AAAA que apunte a la dirección IP pública de tu servidor. Por ejemplo, si el nombre de host es panel.ejemplo.com y la IP pública es 11.22.33.44, debes configurar un registro A para panel.ejemplo.com que apunte a 11.22.33.44. Cada servidor debe tener su propia IP pública y su propio nombre de host.

2. Instalar el servidor maestro

Inicia sesión como root o ejecuta

su -

para convertirte en el usuario root de tu servidor antes de proceder. IMPORTANTE: Debes utilizar ‘su -‘ y no sólo ‘su’, de lo contrario tu variable PATH será configurada erróneamente por Debian.

2.1 Configurar el nombre de host y los hosts

El nombre de host de tu servidor debe ser un subdominio como «panel.ejemplo.com». No utilices un nombre de dominio sin una parte de subdominio como «ejemplo.com» como nombre de host, ya que esto causará problemas más adelante con la configuración de tu correo. En primer lugar, debes comprobar el nombre de host en/etc/hosts y cambiarlo cuando sea necesario. La línea debería ser «Dirección IP – espacio – nombre de host completo incluyendo el dominio – espacio – parte del subdominio». Para nuestro nombre de host panel.example.com, el archivo deberá tener este aspecto (algunas líneas pueden ser diferentes, puede variar según el proveedor de alojamiento):

nano /etc/hosts
127.0.0.1 localhost.localdomain   localhost
# This line should be changed on every node to the correct servername:
127.0.1.1 panel.example.com panel
# These lines are the same on every node: 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 # The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters

Como puedes ver, hemos añadido también los nombres de host de nuestros otros servidores, para que puedan comunicarse posteriormente a través de la red interna.

A continuación, edita el archivo /etc/hostname:

nano /etc/hostname

En nuestro caso, sólo contendrá la parte del subdominio:

panel

Por último, reinicia el servidor para aplicar el cambio:

systemctl reboot

Vuelve a entrar y comprueba si el nombre de host es ahora correcto con estos comandos:

hostname
hostname -f

El resultado será el siguiente:

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

Ahora podemos ejecutar el autoinstalador para instalar todos los paquetes necesarios y ISPConfig:

wget -O - https://get.ispconfig.org | sh -s -- --no-mail --no-dns --use-php=system

Después de un tiempo, verás:

WARNING! This script will reconfigure your complete server!
It should be run on a freshly installed server and all current configuration that you have done will most likely be lost!
Type 'yes' if you really want to continue:

Responde «sí» y pulsa intro. Ahora se iniciará el instalador.

Cuando el instalador termine, te mostrará la contraseña de administrador de ISPConfig y la de root de MySQL así:

[INFO] Your ISPConfig admin password is: 5GvfSSSYsdfdYC
[INFO] Your MySQL root password is: kkAkft82d!kafMwqxdtYs

Asegúrate de anotar esta información, junto con el servidor para el que están, ya que los necesitarás más adelante.

2.2 Configurar los usuarios remotos de MySQL para nuestros servidores esclavos

Entraremos en MySQL para permitir que los otros servidores se conecten a la base de datos de ISPConfig en este nodo durante la instalación, añadiendo registros de usuarios root de MySQL en la base de datos maestra para cada nombre de host y dirección IP de los servidores esclavos.

En el terminal, ejecuta

mysql -u root -p

Introduce 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, sustituye las direcciones IP(10.0.64.12 – 10.0.64.18) por 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 por los nombres de host de tus servidores y myrootpassword por la contraseña raíz deseada (es una buena práctica utilizar una contraseña diferente para cada host. Anótalas, ya que las necesitarás más adelante cuando instales o actualices tus servidores esclavos).

Una vez hecho esto, puedes salir de MySQL con:

EXIT;

Ahora puedes entrar en ISPConfig en https://panel.example.com:8080 con el nombre de usuario admin y la contraseña que te mostró el instalador.

2.3 Configurar el cortafuegos

Lo último que hay que hacer es configurar nuestro cortafuegos.

Entra en la UI de ISPConfig, y ve a Sistema -> Cortafuegos. Luego haz clic en «Añadir nuevo registro de cortafuegos».

Para el servidor del panel, tenemos que abrir los siguientes puertos

TCP:

22,80,443,8080,8081

No hay que abrir ningún puerto UDP a través de la UI.

También vamos a abrir el puerto 3306, que se utiliza para MySQL, pero sólo desde nuestra red local por razones de seguridad. Para ello, ejecuta el siguiente comando desde la CLI, después de que el cambio del panel de ISPConfig se propague (cuando el punto rojo haya desaparecido):

ufw allow from 10.0.64.0/24 to any port 3306 proto tcp

Ahora tu panel está configurado y listo para ser utilizado.

En el siguiente paso, instalaremos el servidor web.

También te podría gustar...