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.