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

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

Este tutorial lo guiará a través de la instalación de su propia configuración multiservidor ISPConfig 3 con servidores dedicados para el panel, web, DNS, correo y correo web. Tanto el DNS como el servidor de correo tendrán un servidor espejo para redundancia. Puede agregar fácilmente más servidores de cierto tipo después.

Se utilizará el instalador automático oficial de ISPConfig para configurar los servidores. Se utilizará Debian 10 como sistema operativo. La guía también ha sido probada con Ubuntu 20.04.2.

Puede 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 ejemplos de nombres de host, direcciones IP y rangos de IP. Aseg√ļrese de cambiarlos en consecuencia en sus comandos/configuraci√≥n.

Todos los servidores est√°n en la misma red privada pero tienen su propia IP p√ļblica. Si sus servidores no tienen una red local compartida, use sus direcciones IPv4 p√ļblicas.

Antes de iniciar la instalaci√≥n de un servidor, configure un registro A y eventual AAAA que apunte al p√ļblico Direcci√≥n IP de su servidor. Por ejemplo, si el nombre de host es panel.example.com y la IP p√ļblica es 11.22.33.44, debe configurar un registro A para panel.example.com que apunte a 11.22.33.44. Cada servidor debe tener su propia IP p√ļblica y nombre de host.

2. Instalación del servidor maestro

Iniciar sesión como root o ejecutar

su -

para convertirse en el usuario ra√≠z de su servidor antes de continuar. IMPORTANTE: debe usar ‘su -‘ y no solo ‘su’, de lo contrario, Debian configura incorrectamente su variable PATH.

2.1 Configurar el nombre de host y los hosts

El nombre de host de su servidor debe ser un subdominio como ¬ępanel.example.com¬Ľ. No use 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 la configuraci√≥n de su correo. Primero, debe 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, incluido el dominio – espacio – parte del subdominio¬Ľ. Para nuestro nombre de host panel.example.com, el archivo se ver√° as√≠ (algunas l√≠neas pueden ser diferentes, puede diferir 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 puede ver, también agregamos los nombres de host de nuestros otros servidores, para que puedan comunicarse a través de la red interna más tarde.

Luego edite el archivo /etc/hostname:

nano /etc/hostname

Contendr√° √ļnicamente la parte del subdominio, en nuestro caso:

panel

Finalmente, reinicie el servidor para aplicar el cambio:

systemctl reboot

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

hostname
hostname -f

La salida será así:

[email protected]:~$ hostname
panel
[email protected]:~$ 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:

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:

Responda ¬ęs√≠¬Ľ y presione enter. Ahora se iniciar√° el instalador.

Cuando el instalador haya terminado, le mostrar√° el administrador de ISPConfig y la contrase√Īa de root de MySQL de esta manera:

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

Aseg√ļrese de anotar esta informaci√≥n, junto con el servidor al que pertenecen, ya que los necesitar√° m√°s adelante.

2.2 Configuración de los usuarios remotos de MySQL 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 raíz de MySQL en la base de datos maestra para cada nombre de host y dirección IP del servidor esclavo.

En la terminal, ejecuta

mysql -u root -p

Ingrese su contrase√Īa de MySQL y luego ejecute 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, reemplace las direcciones IP (10.0.64.12 – 10.0.64.18) con las direcciones IP de sus 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 sus servidores y myrootpassword con la contrase√Īa ra√≠z deseada (es una buena pr√°ctica usar una contrase√Īa diferente para cada host. An√≥telas, ya que las necesitar√° m√°s adelante al instalar o actualizar sus servidores esclavos).

Cuando haya terminado, puede salir de MySQL con:

EXIT;

Ahora puede iniciar sesi√≥n 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 Configuración del cortafuegos

Lo √ļltimo que debemos hacer es configurar nuestro firewall.

Inicie sesi√≥n en la interfaz de usuario de ISPConfig y vaya a Sistema -> Firewall. Luego haga clic en ¬ęAgregar nuevo registro de firewall¬Ľ.

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

TCP:

22,80,443,8080,8081

No es necesario abrir puertos UDP a través de la interfaz de usuario.

También vamos a abrir el puerto 3306, que se usa para MySQL, pero solo desde nuestra red local por razones de seguridad. Para hacerlo, ejecute el siguiente comando desde la CLI, después de que se propague el cambio desde el panel ISPConfig (cuando el punto rojo desaparezca):

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

Su panel ahora est√° configurado y listo para usar.

En el siguiente paso, instalaremos el servidor web.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *