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

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

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

apt-get install nginx

Si Apache2 ya está instalado en el sistema, detenlo ahora…

service apache2 stop

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

update-rc.d -f apache2 remove

Inicia después nginx:

service nginx start

(Si tanto Apache2 como nginx están instalados, el instalador de ISPConfig 3 te preguntará cuál quieres usar – responde nginx en este caso. Si sólo está instalado uno de los dos, ISPConfig hará la configuración necesaria automáticamente).

Podemos hacer que PHP 7 funcione en nginx a través de PHP-FPM (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 los más concurridos) que instalamos como sigue:

apt-get -y install php7.2-fpm

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

Para conseguir soporte para MySQL en PHP, podemos instalar el paquete php7.2-mysql. Es una buena idea instalar también otros módulos de PHP, ya que podrías necesitarlos para tus aplicaciones. Puedes buscar los módulos PHP disponibles así:

apt-cache search php7.2

Elige los que necesites e instálalos así:

apt-get -y install php7.2 php7.2-common php7.2-gd php7.2-mysql php7.2-imap php7.2-cli php7.2-cgi php-pear mcrypt imagemagick libruby php7.2-curl php7.2-intl php7.2-pspell php7.2-recode php7.2-sqlite3 php7.2-tidy php7.2-xmlrpc php7.2-xsl memcached php-memcache php-imagick php-gettext php7.2-zip php7.2-mbstring php-soap php7.2-soap

A continuación, abre /etc/php/7.2/fpm/php.ini

nano /etc/php/7.2/fpm/php.ini

… y pon cgi.fix_pathinfo=0 y tu zona horaria:

[...]
cgi.fix_pathinfo=0
[...]
date.timezone="Europe/Berlin"
[...]

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

Ahora vuelve a cargar PHP-FPM:

service php7.2-fpm reload

Para conseguir soporte CGI en nginx, instalamos Fcgiwrap.

Fcgiwrap es una envoltura CGI que debería funcionar también para scripts CGI complejos y puede utilizarse para entornos de alojamiento compartido porque permite que cada vhost utilice su propio directorio cgi-bin.

Instala el paquete fcgiwrap:

apt-get -y install fcgiwrap

Tras la instalación, el demonio fcgiwrap debería estar ya iniciado; su socket es /var/run/fcgiwrap.socket. Si no se está ejecutando, puedes utilizar el script /etc/init.d/fcgiwrap para iniciarlo.

Ya está. Ahora cuando crees un vhost nginx, ISPConfig se encargará de la configuración correcta del vhost.

8.1 Instalar phpMyAdmin

Instala phpMyAdmin de la siguiente manera:

apt-get -y install phpmyadmin php-mbstring php-gettext

Verás las siguientes preguntas:

Servidor web a reconfigurar automáticamente: <– selecciona ninguno (porque sólo están disponibles apache2 y lighttpd como opciones)
Contraseña de la aplicación MySQL para phpmyadmin:
<– Pulsa Intro

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

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

El vhost de aplicaciones de ISPConfig en el puerto 8081 para nginx viene con una configuración de phpMyAdmin, por lo que puedes utilizar http://server1.example.com:8081/phpmyadmin o http://server1.example.com:8081/phpMyAdmin para acceder a phpMyAdmin.

Si quieres utilizar un alias /phpmyadmin o /phpMyAdmin que puedas usar desde tus 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 tanto, tienes que definir estos alias para cada vhost desde el que quieras acceder a phpMyAdmin.

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

        location /phpmyadmin {
               root /usr/share/;
               index index.php index.html index.htm;
               location ~ ^/phpmyadmin/(.+\.php)$ {
                       try_files $uri =404;
                       root /usr/share/;
                       fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
                       fastcgi_index index.php;
                       fastcgi_param SCRIPT_FILENAME $request_filename;
                       include /etc/nginx/fastcgi_params;
                       fastcgi_param PATH_INFO $fastcgi_script_name;
                       fastcgi_buffer_size 128k;
                       fastcgi_buffers 256 4k;
                       fastcgi_busy_buffers_size 256k;
                       fastcgi_temp_file_write_size 256k;
                       fastcgi_intercept_errors on;
               }
               location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {
                       root /usr/share/;
               }
        }
        location /phpMyAdmin {
               rewrite ^/* /phpmyadmin last;
        }

Si utilizas https en lugar de http para tu vhost, debes añadir la línea fastcgi_param HTTPS on; a tu configuración de phpMyAdmin de la siguiente manera:

        location /phpmyadmin {
               root /usr/share/;
               index index.php index.html index.htm;
               location ~ ^/phpmyadmin/(.+\.php)$ {
                       try_files $uri =404;
                       root /usr/share/;
                       fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
                       fastcgi_param HTTPS on; # <-- add this line
                       fastcgi_index index.php;
                       fastcgi_param SCRIPT_FILENAME $request_filename;
                       include /etc/nginx/fastcgi_params;
                       fastcgi_param PATH_INFO $fastcgi_script_name;
                       fastcgi_buffer_size 128k;
                       fastcgi_buffers 256 4k;
                       fastcgi_busy_buffers_size 256k;
                       fastcgi_temp_file_write_size 256k;
                       fastcgi_intercept_errors on;
               }
               location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {
                       root /usr/share/;
               }
        }
        location /phpMyAdmin {
               rewrite ^/* /phpmyadmin last;
        }

Si utilizas tanto http como https para tu vhost, debes añadir la siguiente sección a la sección http {} en /etc/nginx/nginx.conf (antes de cualquier línea de inclusión) que determina si el visitante utiliza http o https y establece la variable $fastcgi_https (que utilizaremos en nuestra configuración de phpMyAdmin) en consecuencia:

nano /etc/nginx/nginx.conf
[...]
http {
[...]
        ## Detect when HTTPS is used
        map $scheme $fastcgi_https {
          default off;
          https on;

        }
[...]
}
[...]

No olvides recargar nginx después:

service nginx reload

A continuación, ve al campo Directivas de nginx de nuevo, y en lugar de fastcgi_param HTTPS on; añade la línea fastcgi_param HTTPS $fastcgi_https; para que puedas utilizar phpMyAdmin tanto para peticiones HTTP como HTTPS:

        location /phpmyadmin {
               root /usr/share/;
               index index.php index.html index.htm;
               location ~ ^/phpmyadmin/(.+\.php)$ {
                       try_files $uri =404;
                       root /usr/share/;
                       fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
                       fastcgi_param HTTPS $fastcgi_https; # <-- add this line
                       fastcgi_index index.php;
                       fastcgi_param SCRIPT_FILENAME $request_filename;
                       include /etc/nginx/fastcgi_params;
                       fastcgi_param PATH_INFO $fastcgi_script_name;
                       fastcgi_buffer_size 128k;
                       fastcgi_buffers 256 4k;
                       fastcgi_busy_buffers_size 256k;
                       fastcgi_temp_file_write_size 256k;
                       fastcgi_intercept_errors on;
               }
               location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {
                       root /usr/share/;
               }
        }
        location /phpMyAdmin {
               rewrite ^/* /phpmyadmin last;
        }

8.2 Instalar HHVM (HipHop Virtual Machine)

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

apt-get -y install hhvm

8.4. Instalar Let’s Encrypt

ISPConfig 3.1 tiene soporte incorporado para la Autoridad de Certificados SSL gratuita Let’s encrypt. La función Let’s Encrypt te permite crear certificados SSL gratuitos para tu sitio web en ISPConfig.

Ahora vamos a añadir soporte para Let’s encrypt.

apt-get -y install certbot

Registra una cuenta de Let’s encrypt así

certbot register

y sigue las instrucciones que aparecen en la pantalla.

9. Instalar Mailman

ISPConfig también te permite gestionar (crear/modificar/borrar) listas de correo Mailman. Si quieres hacer uso de esta función, instala Mailman como sigue:

apt-get -y install mailman

Selecciona al menos un idioma, por ejemplo

Idiomas a soportar: <– es (inglés)
Falta la lista de sitios <– Ok

Antes de poder iniciar Mailman, hay que crear una primera lista de correo llamada mailman:

newlist mailman

root@server1:~# newlist mailman
Introduce el correo electrónico de la persona que dirige la lista: <– dirección de correo electrónico del administrador,
por [email protected]
Contraseña inicial de mailman:<– contraseña de administrador de la lista mailman Para terminar de
crear tu lista de correo,debes editar tu/etc/aliases (o su equivalente en
) añadiendo las siguientes líneas, y posiblemente ejecutando el programa
`newaliases’:

## mailman mailing list
mailman:»|/var/lib/mailman/mail/mailman post mailman»
mailman-admin:»|/var/lib/mailman/mail/mailman admin mailman»
mailman-bounces:»|/var/lib/mailman/mailman bounces mailman»
mailman-confirm:»|/var/lib/mailman/mailman confirma mailman»
mailman-join:»|/var/lib/mailman/mailman join mailman»
mailman-leave:»|/var/lib/mailman/mailman leave mailman»
mailman-owner:»|/var/lib/mailman/mailman owner mailman»
mailman-request:»|/var/lib/mailman/mailman request mailman»
mailman-subscribe:»|/var/lib/mailman/mail/mailman subscribe mailman»
mailman-unsubscribe: «|/var/lib/mailman/mail/mailman unsubscribe mailman»

Pulsa enter para notificar al propietario de mailman…<– ENTER

root@server1:~#

Abre después /etc/aliases

nano /etc/aliases

… y añade las siguientes líneas:

[...]
## mailman mailing list
mailman:              "|/var/lib/mailman/mail/mailman post mailman"
mailman-admin:        "|/var/lib/mailman/mail/mailman admin mailman"
mailman-bounces:      "|/var/lib/mailman/mail/mailman bounces mailman"
mailman-confirm:      "|/var/lib/mailman/mail/mailman confirm mailman"
mailman-join:         "|/var/lib/mailman/mail/mailman join mailman"
mailman-leave:        "|/var/lib/mailman/mail/mailman leave mailman"
mailman-owner:        "|/var/lib/mailman/mail/mailman owner mailman"
mailman-request:      "|/var/lib/mailman/mail/mailman request mailman"
mailman-subscribe:    "|/var/lib/mailman/mail/mailman subscribe mailman"
mailman-unsubscribe:  "|/var/lib/mailman/mail/mailman unsubscribe mailman"

Ejecuta

newaliases

después y reinicia Postfix:

service postfix restart

Luego inicia el demonio Mailman:

service mailman start

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

El vhost de aplicaciones de ISPConfig en el puerto 8081 para nginx viene con una configuración de Mailman, así que puedes usar http://server1.example.com:8081/cgi-bin/mailman/admin/<listname> o http://server1.example.com:8081/cgi-bin/mailman/listinfo/<listname> para acceder a Mailman.

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

Para ello, pega lo siguiente en el campo Directivas nginx de la pestaña Opciones del sitio web en ISPConfig más adelante:

        location /cgi-bin/mailman {
               root /usr/lib/;
               fastcgi_split_path_info (^/cgi-bin/mailman/[^/]*)(.*)$;
               include /etc/nginx/fastcgi_params;
               fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
               fastcgi_param PATH_INFO $fastcgi_path_info;
               fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
               fastcgi_intercept_errors on;
               fastcgi_pass unix:/var/run/fcgiwrap.socket;
        }

        location /images/mailman {
               alias /usr/share/images/mailman;
        }

        location /pipermail {
               alias /var/lib/mailman/archives/public;
               autoindex on;
        }

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

En http://<vhost>/pipermail puedes encontrar los archivos de las listas de correo.

10. Instalar PureFTPd y Quota

Puedes instalar PureFTPd y quota con el siguiente comando:

apt-get -y install pure-ftpd-common pure-ftpd-mysql quota quotatool

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

nano /etc/default/pure-ftpd-common

… y asegúrate de que el modo de inicio está configurado como independiente y establece VIRTUALCHROOT=true:

[...]
STANDALONE_OR_INETD=standalone
[...]
VIRTUALCHROOT=true
[...]

Ahora configuramos PureFTPd para permitir sesiones FTP y TLS. El FTP es un protocolo muy inseguro porque todas las contraseñas y todos los datos se transfieren en texto claro. Al utilizar TLS, toda la comunicación puede ser encriptada, lo que hace que el FTP sea mucho más seguro.

Si quieres permitir sesiones FTP y TLS, ejecuta

echo 1 > /etc/pure-ftpd/conf/TLS

Para utilizar TLS, debemos crear un certificado SSL. Yo lo creo en /etc/ssl/privado/, por lo que primero creo ese directorio:

mkdir -p /etc/ssl/private/

Después, podemos generar el certificado SSL de la siguiente manera

openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem

Nombre del país (código de 2 letras) [AU]: <– Introduce el nombre de tu país (por ejemplo, «DE»).
Nombre del Estado o Provincia (nombre completo) [Algún Estado]:
<– Introduce el nombre de tu Estado o Provincia.
Nombre de la localidad (por ejemplo, ciudad) []:
<– Introduce tu Ciudad.
Nombre de la organización (por ejemplo, empresa) [Internet Widgits Pty Ltd]:
<– Introduce el nombre de tu organización (por ejemplo, el nombre de tu empresa).
Nombre de la Unidad Organizativa (por ejemplo, sección) []:
<– Introduce el Nombre de tu Unidad Organizativa (por ejemplo, «Departamento de Informática»).
Nombre común (por ejemplo, TU nombre) []:
<– Introduce el Nombre de Dominio Completamente Cualificado del sistema (por ejemplo, «servidor1.ejemplo.com»).
Dirección de correo electrónico []:
<– Introduce tu dirección de correo electrónico.

Cambia los permisos del certificado SSL:

chmod 600 /etc/ssl/private/pure-ftpd.pem

A continuación, reinicia PureFTPd:

service pure-ftpd-mysql restart

Edita /etc/fstab. El mío tiene este aspecto (he añadido ,usrjquota=quota.user,grpjquota=quota.group,jqfmt=vfsv0 a la partición con el punto de montaje /):

nano /etc/fstab
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
/dev/mapper/server1--vg-root / ext4 errors=remount-ro,usrjquota=quota.user,grpjquota=quota.group,jqfmt=vfsv0 0 1
# /boot was on /dev/sda1 during installation
UUID=39762f15-3a49-4982-add3-139d5040b48a /boot ext2 defaults 0 2
/dev/mapper/server1--vg-swap_1 none swap sw 0 0
/dev/fd0 /media/floppy0 auto rw,user,noauto,exec,utf8 0 0

Para activar la cuota, ejecuta estos comandos:

mount -o remount /
quotacheck -avugm
quotaon -avug

Los siguientes mensajes de error son normales para el comando y pueden ser ignorados:

quotacheck: Scanning /dev/mapper/server1--vg-root [/] done
quotacheck: Cannot stat old user quota file //quota.user: No such file or directory. Usage will not be subtracted.
quotacheck: Cannot stat old group quota file //quota.group: No such file or directory. Usage will not be subtracted.
quotacheck: Cannot stat old user quota file //quota.user: No such file or directory. Usage will not be subtracted.
quotacheck: Cannot stat old group quota file //quota.group: No such file or directory. Usage will not be subtracted.
quotacheck: Checked 18566 directories and 110119 files
quotacheck: Old file not found.
quotacheck: Old file not found.

11. Instalar el servidor DNS BIND

BIND se instala de la siguiente manera:

apt-get -y install bind9 dnsutils haveged

Habilita e inicia haveged.

systemctl enable haveged
service haveged start

12. Instalar Vlogger, Webalizer y AWStats

Vlogger, Webalizer y AWStats se instalan de la siguiente manera:

apt-get -y install vlogger webalizer awstats geoip-database libclass-dbi-mysql-perl

Abre /etc/cron.d/awstats después…

nano /etc/cron.d/awstats

… y comenta todo lo que hay en ese archivo:

#MAILTO=root

#*/10 * * * * www-data [ -x /usr/share/awstats/tools/update.sh ] && /usr/share/awstats/tools/update.sh

# Generate static reports:
#10 03 * * * www-data [ -x /usr/share/awstats/tools/buildstatic.sh ] && /usr/share/awstats/tools/buildstatic.sh

13. Instalar Jailkit

Se puede instalar de la siguiente manera:

apt-get -y install build-essential autoconf automake1.11 libtool flex bison debhelper binutils
cd /tmp 
wget http://olivier.sessink.nl/jailkit/jailkit-2.19.tar.gz
tar xvfz jailkit-2.19.tar.gz
cd jailkit-2.19
echo 5 > debian/compat

Luego construye el paquete jailkit ejecutando este comando:

./debian/rules binary

Ahora puedes instalar el paquete Jailkit . deb de la siguiente manera:

cd ..
dpkg -i jailkit_2.19-1_*.deb
rm -rf jailkit-2.19*

14. Instalar Fail2Ban y UFW

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

apt-get -y install fail2ban

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

nano /etc/fail2ban/jail.local
[pure-ftpd]
enabled  = true
port     = ftp
filter   = pure-ftpd
logpath  = /var/log/syslog
maxretry = 3

[dovecot]
enabled = true
filter = dovecot
action = iptables-multiport[name=dovecot-pop3imap, port="pop3,pop3s,imap,imaps", protocol=tcp]
logpath = /var/log/mail.log
maxretry = 5

[postfix]
enabled  = true
port     = smtp
filter   = postfix
logpath  = /var/log/mail.log
maxretry = 3

Reinicia fail2ban después:

service fail2ban restart

Para instalar el cortafuegos UFW, ejecuta este comando apt:

apt-get install ufw

También te podría gustar...