El servidor perfecto : Ubuntu 18.04 (Nginx, MySQL, PHP, Postfix, BIND, Dovecot, Pure-FTPD e ISPConfig 3.1)

Este tutorial muestra los pasos para instalar en un servidor Ubuntu 18.04 (Bionic Beaver) con Nginx, PHP, MariaDB, Postfix, pure-ftpd, BIND, Dovecot e ISPConfig 3.1.

ISPConfig es un panel de control de alojamiento web que le permite configurar los servicios instalados a través de un navegador web.

Esta configuración proporciona un servidor de alojamiento completo con web, correo electrónico (incluido spam y filtro antivirus), servicios de bases de datos, FTP y DNS.

1. Nota preliminar

En este tutorial, usaré el nombre de servidor server1.example.com con la dirección IP 192.168.1.100 y la puerta de enlace 192.168.1.1 para la configuración de la red.

Estas configuraciones pueden diferir para usted, por lo que debe reemplazarlas cuando corresponda. Antes de continuar, necesita tener una instalación mínima básica de Ubuntu 18.04 como se explica en este tutorial.

Los pasos de este tutorial deben ser ejecutados como usuario root, por lo que no precederé a “sudo” delante de los comandos. Inicie sesión como usuario root en su servidor antes de continuar o ejecutar:

para convertirse en root cuando inicie sesión como un usuario diferente en el shell.

Los comandos para editar archivos usarán el editor “nano”, puede reemplazarlo con un editor de su elección. Nano es un editor de archivos fácil de usar desde el shell. Si te gusta usar nano y aún no lo has instalado, ejecuta:

2. Actualiza tu instalación de Linux

Edite /etc/apt/sources.list. Comente o elimine el CD de instalación del archivo y asegúrese de que el repositorio universe y los repositorios multiverse estén habilitados. Debe tener un aspecto como este:

Luego ejecute:

Para actualizar la base de datos del paquete apt y luego:

para instalar las últimas actualizaciones (si hay alguna). Si ve que se instala un kernel nuevo como parte de las actualizaciones, debe reiniciar el sistema después:

3. Cambie el Shell predeterminado

/bin/sh es un enlace simbólico a /bin/dash, sin embargo, necesitamos /bin/bash, no /bin/dash. Por lo tanto, hacemos esto:

Este comando le hará una pregunta:

Si no hace esto, la instalación de ISPConfig fallará.

4. Deshabilitar AppArmor

AppArmor es una extensión de seguridad (similar a SELinux) que debería proporcionar seguridad extendida.

Comprobaremos si está instalado y lo eliminaremos si es necesario.

En mi opinión, no es necesario que configure un sistema seguro, y generalmente causa más problemas que ventajas (piénselo después de haber pasado una semana resolviendo problemas porque algún servicio no funcionaba como se esperaba, y luego descubre que todo estaba bien, y que solo AppArmor estaba causando el problema). Por lo tanto, lo deshabilito (esto es obligatorio si desea instalar ISPConfig más adelante).

Podemos desactivarlo así:

 

5. Sincronizar el reloj del sistema

Es una buena idea sincronizar el reloj del sistema con un servidor NTP (protocolo de tiempo de red) a través de Internet. Simplemente ejecute

y la fecha y hora de su sistema siempre estará sincronizado.

6. Instalar Postfix, Dovecot, MariaDB, phpMyAdmin, rkhunter, Binutils

Para instalar postfix, debemos asegurarnos de que sendmail no esté instalado y ejecutándose. Para detener y eliminar sendmail ejecuta este comando:

El mensaje de error:

Está bien, solo significa que sendmail no estaba instalado, por lo que no había nada que eliminar.

Podemos instalar Postfix, Dovecot, MariaDB (como reemplazo de MySQL), rkhunter y binutils con un solo comando:

MariaDB es una bifurcación del servidor de base de datos MySQL, desarrollado por el desarrollador original de MySQL, Monty Widenius.

Según las pruebas encontradas en Internet, MariaDB es más rápido que MySQL y su desarrollo continúa con más velocidad, por lo tanto, la mayoría de las distribuciones de Linux reemplazaron a MySQL con MariaDB como servidor de base de datos MySQL.

En caso de que prefiera MySQL sobre MariaDB, reemplace “mariadb-client mariadb-server” en el comando anterior con “mysql-client mysql-server”.

Se le harán las siguientes preguntas:

Luego es tiempo de habilitar TLS/SSL y los puertos de envío en Postfix:

Descomente las secciones de envío y smtps de la siguiente manera: agregue la línea –o smtpd_client_restrictions=permit_sasl_authenticated,reject, rechace ambas secciones y deje todo lo que se comenta a continuación:

NOTA: ¡Los espacios en blanco delante de las líneas “-o ….” son importantes!

Reinicie Postfix después:

Queremos que MariaDB /MySQL escuche en todas las interfaces, no solo localhost. Por lo tanto, editamos /etc/mysql/mariadb.conf.d/50-server.cnf (para MariaDB o /etc/mysql/my.cnf (para MySQL) y comentamos la línea bind-address = 127.0.0.1:

MariaDB

Ahora configuramos una contraseña de root en MariaDB. Para ello deberá ejecutar:

Se le harán estas preguntas:

Establezca el método de autenticación de contraseña en MariaDB en nativo para que podamos usar PHPMyAdmin más tarde para conectarse como usuario root:

Edite el archivo /etc/mysql/debian.cnf y establezca la contraseña del root de MYSQL/MariaDB dos veces en las filas que comienzan con la contraseña.

La contraseña de root de MySQL que debe agregarse se muestra en lectura, en este ejemplo, la contraseña es “clavemysql”.

Entonces reiniciamos MariaDB:

El nombre de servicio systemd para MariaDB y MySQL es “mysql”, por lo que el comando de reinicio es el mismo para ambos servidores de bases de datos.

MySQL

Luego usted necesitará reiniciar el MySQL:

Para MySQL y MariaDB:

Ahora verifique que la red esté habilitada. Ejecutar:

La salida debería verse así:

7. Instalar Amavisd-new, SpamAssassin, y ClamAV

Para instalar amavisd-new, SpamAssassin y ClamAV, ejecutamos:

La configuración de ISPConfig 3 usa amavisd-new que carga la biblioteca del filtro SpamAssassin internamente, por lo que podemos detener SpamAssassin para liberar RAM:

Ahora hay que actualizar las firmas de antivirus ClamAV e iniciar el servicio Clamd. El proceso de actualización puede llevar un tiempo, no lo interrumpa.

El siguiente error puede ignorarse en la primera ejecución de freshclam.

El programa amavisd-new tiene actualmente un error en Ubuntu 18.04 que impide que los correos electrónicos se firmen correctamente con Dkim. Ejecute los siguientes comandos para parchear amavisd-new. (Julio/2018)

En caso de que obtenga un error para el último comando ‘parche’, entonces Ubuntu probablemente haya solucionado el problema mientras tanto, por lo que debería ser seguro ignorar ese error en ese momento.

8. Instalar Nginx, PHP 7.2 (PHP-FPM) y Fcgiwrap

Nginx está disponible como un paquete para Ubuntu que podemos instalar con el siguiente comando:

Cuando Apache2 ya está instalado en el sistema, debería det deténerlo ahora …

… y eliminar los enlaces de inicio del sistema de Apache:

Iniciar  nginx después:

(Si están instalados tanto Apache2 como nginx, el instalador de ISPConfig 3 le preguntará cuál desea usar, responda nginx en este caso. Si solo uno de estos ambos está instalado, ISPConfig realizará la configuración necesaria automáticamente).

Podemos hacer que PHP 7 funcione en nginx a través de PHP-FPM (FastCGI Process Manager) es una implementación alternativa de PHP FastCGI con algunas características adicionales útiles para sitios de cualquier tamaño, especialmente sitios muy ocupados) que instalamos de la siguiente manera:

PHP-FPM es un proceso daemon que ejecuta un servidor FastCGI en el socket /var/run/php/php7.0-fpm.sock.

Para obtener soporte MySQL en PHP, podemos instalar el paquete php7.2-mysql. Es una buena idea instalar algunos otros módulos PHP que puede necesitarlos para sus aplicaciones. Puede buscar módulos PHP disponibles de esta manera:

Elija los que necesita e instálelos así:

Luego abra /etc/php/7.2/fpm/php.ini…

… y establezca cgi.fix_pathinfo = 0 y su zona horaria:

(Puede encontrar todas las zonas horarias disponibles en los directorios /usr/share/zoneinfo y sus subdirectorios).

Ahora recarga PHP-FPM:

Para obtener soporte CGI en nginx, instalamos Fcgiwrap.

Fcgiwrap es un contenedor CGI que debería funcionar también para scripts CGI complejos y se puede usar para entornos de alojamiento compartido porque permite que cada vhost use su propio directorio cgi-bin.

Instala el paquete fcgiwrap:

Después de la instalación, el daemon fcgiwrap ya debería estar iniciado; su socket es /var/run/fcgiwrap.socket. Si no se está ejecutando, puede usar el script /etc/init.d/fcgiwrap para iniciarlo.

¡Eso es! Ahora cuando crea un nginx vhost, ISPConfig se encargará de la configuración de vhost correcta.

8.1 Instalar phpMyAdmin

Instala phpMyAdmin de la siguiente manera:

Verás las siguientes preguntas:

Ahora puede encontrar phpMyAdmin en el directorio /usr/share/phpmyadmin/.

Después de haber instalado ISPConfig 3, puede acceder a phpMyAdmin de la siguiente manera:

Las aplicaciones ISPConfig vhost en el puerto 8081 para nginx vienen con una configuración de phpMyAdmin, por lo que puede usar http://server1.example.com:8081/phpmyadmin o http://server1.example.com:8081/phpMyAdmin para acceder a phpMyAdmin.

Si desea utilizar un alias /phpmyadmin o /phpMyAdmin que puede utilizar desde sus sitios web, esto es un poco más complicado que para Apache porque nginx no tiene alias globales (es decir, alias que se pueden definir para todos los host). Por lo tanto, debe definir estos alias para cada vhost desde el que desea acceder a phpMyAdmin.

Para hacer esto, pegue lo siguiente en el campo Directivas nginx en la pestaña Opciones del sitio web en ISPConfig más adelante:

Si usa https en lugar de http para su vhost, debe agregar la línea fastcgi_param HTTPS; a su configuración de phpMyAdmin como esta:

Si usa tanto http como https para su vhost, debe agregar la siguiente sección a la sección http {} en /etc/nginx/nginx.conf (antes de cualquier línea de inclusión) que determine si el visitante usa http o https y establece la variable $fastcgi_https (que usaremos en nuestra configuración phpMyAdmin) en consecuencia:

No olvide volver a cargar nginx después:

A continuación, vaya al campo Directivas nginx nuevamente, y en lugar de fastcgi_param HTTPS on; agrega la línea fastcgi_param HTTPS $fastcgi_https; para que pueda usar phpMyAdmin para las solicitudes HTTP y HTTPS:

Ubuntu ya no permite iniciar sesión en MySQL como usuario root a través de PHPMyAdmin. Sin privilegios de administrador, no puede usar PHPMyAdmin para administrar usuarios de bases de datos o crear bases de datos.

Para eludir ese problema, crearé un nuevo usuario de MySQL con el nombre “admin”  que tiene privilegios de administrador. Este usuario administrador se puede usar para la administración de bases de datos en PHPMyAdmin.

8.2 Instalar HHVM (HipHop Virtual Machine)

En este paso, instalaremos HHVM con apt. HHVM es un motor rápido de PHP desarrollado por Facebook.

8.3. Instalar Let’s Encrypt

ISPConfig 3.1 tiene soporte integrado para SSL Certificate Authority Let’s encrypt. La función Let’s Encrypt le permite crear certificados SSL gratuitos para su sitio web en ISPConfig.

Ahora agregaremos soporte para encriptar.

Regístrese para una cuenta Let’s encrypt así:

y sigue las instrucciones en la pantalla.

9. Instalar Mailman

ISPConfig también le permite administrar (crear/modificar/eliminar) listas de correo de Mailman. Si desea hacer uso de esta función, instale Mailman de la siguiente manera:

Seleccione al menos un idioma, p. Ej .:

Antes de que podamos iniciar Mailman, se debe crear una primera lista de correo llamada mailman:

Abre /etc/postfix/aliases después …

… y agrega las siguientes líneas:

Ejecute

luego reiniciar Postfix:

Luego, inicie el daemon Mailman:

Después de haber instalado ISPConfig 3, puede acceder a Mailman de la siguiente manera:

Las aplicaciones ISPConfig vhost en el puerto 8081 para nginx vienen con una configuración de Mailman, por lo que puede usar http://server1.example.com:8081/cgi-bin/mailman/admin/<nombre de lista> o http://server1.example .com: 8081/cgi-bin/mailman/listinfo/<nombre de lista> para acceder a Mailman.

Si desea utilizar Mailman desde sus sitios web, esto es un poco más complicado que para Apache porque Nginx no tiene alias globales (es decir, alias que se pueden definir para todos los vhosts). Por lo tanto, debe definir estos alias para cada vhost desde el que desee acceder a Mailman.

Para hacer esto, pegue lo siguiente en el campo Directivas nginx en la pestaña Opciones del sitio web en ISPConfig más adelante:

Esto define el alias /cgi-bin/mailman/ para su vhost, lo que significa que puede acceder a la interfaz de administración de Mailman para obtener una lista en http://<vhost>/cgi-bin/mailman/admin/<nombrelista>, y el la página web para los usuarios de una lista de correo se puede encontrar en http://<vhost>/cgi-bin/mailman/listinfo/<nombrelista>.

En http://<vhost>/pipermail, puede encontrar los archivos de la lista de correo.

10. Instalar PureFTPd con cuotas

PureFTPd y quota se pueden instalar con el siguiente comando:

Edite el archivo /etc/default/pure-ftpd-common

… y asegúrese de que el modo de inicio esté configurado como standalone y configure VIRTUALCHROOT = true:

Ahora configuramos PureFTPd para permitir sesiones de FTP y TLS.

FTP es un protocolo muy inseguro porque todas las contraseñas y todos los datos se transfieren en texto claro.

Al usar TLS, toda la comunicación se puede encriptar, lo que hace que FTP sea mucho más seguro.

Si desea permitir sesiones de FTP y TLS, ejecute

Para usar TLS, debemos crear un certificado SSL debe crear /etc/ssl/private/, por lo tanto, crear ese directorio primero:

Luego, podemos generar el certificado SSL de la siguiente manera:

Conteste las preguntas, que son administrativas.

Luego cambie los permisos del certificado SSL:

Luego reinicie PureFTPd:

Edite /etc/fstab. El mío se ve así (agregué, usrjquota=quota.user,grpjquota=quota.group,jqfmt=vfsv0 a la partición con el punto de montaje /):

Para habilitar la cuota, ejecute estos comandos:

Los siguientes mensajes de error son normales para el comando y se pueden ignorar:

11. Instalar el servidor DNS BIND

BIND se instala de la siguiente manera:

Habilita y comienza con haveged.

12. Instalar Vlogger, Webalizer y AWStats

Vlogger, Webalizer y AWStats se pueden instalar de la siguiente manera:

Abrir /etc/cron.d/awstats

… y comentar todo en ese archivo:

13. Instalar Jailkit

Este paquete es importante para dotar de seguridad a nuestro servidor

Se puede instalar de la siguiente manera:

Luego compila el paquete jailkit ejecutando este comando:

Ahora puede instalar el paquete jailkit .deb de la siguiente manera:

14. Instalar Fail2Ban y UFW

Esto es opcional pero recomendado, porque el monitor ISPConfig intenta mostrar el registro:

Para hacer que fail2ban monitorice PureFTPd y Dovecot, cree el archivo /etc/fail2ban/jail.local:

Reinicie fail2ban después:

Para instalar el firewall UFW, ejecute este comando apt:

16. Instalar ISPConfig 3.1

Antes de iniciar la instalación de ISPConfig, asegúrese de que Apache esté detenido (si está instalado, es posible que algunos de sus paquetes instalados hayan instalado Apache como una dependencia sin que usted lo sepa). Si Apache2 ya está instalado en el sistema, deténgalo ahora …

… y elimine los enlaces de inicio del sistema de Apache:

Asegúrese de que nginx se esté ejecutando:

(Si tiene ambos Apache y nginx instalados, el instalador le pregunta cuál desea usar: Apache y nginx detectados. Seleccione el servidor para usar con ISPConfig: (apache, nginx) [apache]:

Escriba nginx. Si solo se instalan Apache o Nginx, el instalador lo detecta automáticamente y no se formula ninguna pregunta.

Para instalar ISPConfig 3.1 desde la rama estable de GIT, haga esto:

El siguiente paso es ejecutar

Esto iniciará el instalador de ISPConfig 3.1. El instalador configurará todos los servicios como Postfix, Dovecot, etc. para usted.

Responda a las preguntas que le pide la instalación, con datos que ya se expusieron anteriomente.

El instalador configura automáticamente todos los servicios subyacentes, por lo que no es necesaria una configuración manual.

Luego puede acceder a ISPConfig 3 en http(s)://server1.example.com:8080/ o http(s)://192.168.1.100:8080/ (http o https depende de lo que elija durante la instalación).

Inicie sesión con el nombre de usuario admin y la contraseña de administrador (debe cambiar la contraseña predeterminada después de su primer inicio de sesión):

El sistema ahora está listo para ser utilizado.

Para aprender a usar ISPConfig 3, recomiendo descargar el Manual de ISPConfig 3.1.

En más de 300 páginas, cubre el concepto detrás de ISPConfig (administrador, revendedores, clientes), explica cómo instalar y actualizar ISPConfig 3, incluye una referencia para todos los formularios y campos de formulario en ISPConfig junto con ejemplos de entradas válidas y proporciona tutoriales para las tareas más comunes en ISPConfig 3.

También explica cómo hacer que su servidor sea más seguro y viene con una sección de solución de problemas al final.

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.