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:

sudo -s

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:

apt-get install nano

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:

nano /etc/apt/sources.list
# deb cdrom:[Ubuntu-Server 18.04 LTS _Bionic Beaver_ - Release amd64 (20180425.1)]/ bionic main restricted

#deb cdrom:[Ubuntu-Server 18.04 LTS _Bionic Beaver_ - Release amd64 (20180425.1)]/ bionic main restricted

# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.
deb http://de.archive.ubuntu.com/ubuntu/ bionic main restricted
# deb-src http://de.archive.ubuntu.com/ubuntu/ bionic main restricted

## Major bug fix updates produced after the final release of the
## distribution.
deb http://de.archive.ubuntu.com/ubuntu/ bionic-updates main restricted
# deb-src http://de.archive.ubuntu.com/ubuntu/ bionic-updates main restricted

## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team. Also, please note that software in universe WILL NOT receive any
## review or updates from the Ubuntu security team.
deb http://de.archive.ubuntu.com/ubuntu/ bionic universe
# deb-src http://de.archive.ubuntu.com/ubuntu/ bionic universe
deb http://de.archive.ubuntu.com/ubuntu/ bionic-updates universe
# deb-src http://de.archive.ubuntu.com/ubuntu/ bionic-updates universe

## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team, and may not be under a free licence. Please satisfy yourself as to
## your rights to use the software. Also, please note that software in
## multiverse WILL NOT receive any review or updates from the Ubuntu
## security team.
deb http://de.archive.ubuntu.com/ubuntu/ bionic multiverse
# deb-src http://de.archive.ubuntu.com/ubuntu/ bionic multiverse
deb http://de.archive.ubuntu.com/ubuntu/ bionic-updates multiverse
# deb-src http://de.archive.ubuntu.com/ubuntu/ bionic-updates multiverse

## N.B. software from this repository may not have been tested as
## extensively as that contained in the main release, although it includes
## newer versions of some applications which may provide useful features.
## Also, please note that software in backports WILL NOT receive any review
## or updates from the Ubuntu security team.
deb http://de.archive.ubuntu.com/ubuntu/ bionic-backports main restricted universe multiverse
# deb-src http://de.archive.ubuntu.com/ubuntu/ bionic-backports main restricted universe multiverse

## Uncomment the following two lines to add software from Canonical's
## 'partner' repository.
## This software is not part of Ubuntu, but is offered by Canonical and the
## respective vendors as a service to Ubuntu users.
# deb http://archive.canonical.com/ubuntu bionic partner
# deb-src http://archive.canonical.com/ubuntu bionic partner

deb http://security.ubuntu.com/ubuntu bionic-security main restricted
# deb-src http://security.ubuntu.com/ubuntu bionic-security main restricted
deb http://security.ubuntu.com/ubuntu bionic-security universe
# deb-src http://security.ubuntu.com/ubuntu bionic-security universe
deb http://security.ubuntu.com/ubuntu bionic-security multiverse
# deb-src http://security.ubuntu.com/ubuntu bionic-security multiverse

Luego ejecute:

apt-get update

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

apt-get upgrade

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:

reboot

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:

dpkg-reconfigure dash

Este comando le hará una pregunta:

Use dash as the default system shell (/bin/sh)? <-- No

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í:

service apparmor stop 
update-rc.d -f apparmor remove 
apt-get remove apparmor apparmor-utils

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

apt-get -y install ntp ntpdate

Con los paquetes instalados 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:

service sendmail stop; update-rc.d -f sendmail remove

El mensaje de error:

Failed to stop sendmail.service: Unit sendmail.service not loaded.

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:

apt-get -y install postfix postfix-mysql postfix-doc mariadb-client mariadb-server openssl getmail4
rkhunter binutils dovecot-imapd dovecot-pop3d dovecot-mysql dovecot-sieve dovecot-lmtpd sudo

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:

General type of mail configuration: <-- Internet Site
System mail name: <-- server1.example.com

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

nano /etc/postfix/master.cf

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:

[...]
submission inet n       -       -       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
#  -o smtpd_reject_unlisted_recipient=no
#  -o smtpd_client_restrictions=$mua_client_restrictions
#  -o smtpd_helo_restrictions=$mua_helo_restrictions
#  -o smtpd_sender_restrictions=$mua_sender_restrictions
#  -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
#  -o milter_macro_daemon_name=ORIGINATING
smtps     inet  n       -       -       -       -       smtpd
  -o syslog_name=postfix/smtps
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
#  -o smtpd_reject_unlisted_recipient=no
#  -o smtpd_client_restrictions=$mua_client_restrictions
#  -o smtpd_helo_restrictions=$mua_helo_restrictions
#  -o smtpd_sender_restrictions=$mua_sender_restrictions
#  -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
#  -o milter_macro_daemon_name=ORIGINATING
[...]

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

Reinicie Postfix después:

service postfix restart

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

nano /etc/mysql/mariadb.conf.d/50-server.cnf
[...]
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
#bind-address           = 127.0.0.1
[...]

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

mysql_secure_installation

Se le harán estas preguntas:

Enter current password for root (enter for none): <-- presione enter
Set root password? [Y/n] <-- y
New password: <-- Ingese el nuevo password de root para MariaDB 
Re-enter new password: <-- Repita el password
Remove anonymous users? [Y/n] <-- y
Disallow root login remotely? [Y/n] <-- y
Reload privilege tables now? [Y/n] <-- y

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:

echo "update mysql.user set plugin = 'mysql_native_password' where user='root';" | mysql -u 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.

nano /etc/mysql/debian.cnf

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

# Automatically generated for Debian scripts. DO NOT TOUCH!
[client]
host = localhost
user = root
password = clavemysql
socket = /var/run/mysqld/mysqld.sock
[mysql_upgrade]
host = localhost
user = root
password = clavemysql
socket = /var/run/mysqld/mysqld.sock
basedir = /usr

Entonces reiniciamos MariaDB:

service mysql restart

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

nano /etc/mysql/my.cnf
[...]
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
#bind-address           = 127.0.0.1
[...]

Luego usted necesitará reiniciar el MySQL:

service mysql restart

Para MySQL y MariaDB:

Ahora verifique que la red esté habilitada. Ejecutar:

netstat -tap | grep mysql

La salida debería verse así:

root@server1:~# netstat -tap | grep mysql
tcp6 0 0 [::]:mysql [::]:* LISTEN 12210/mysqld

7. Instalar Amavisd-new, SpamAssassin, y ClamAV

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

apt-get -y install amavisd-new spamassassin clamav clamav-daemon unzip bzip2 arj nomarch lzop 
cabextract apt-listchanges libnet-ldap-perl libauthen-sasl-perl clamav-docs daemon libio-string-perl
libio-socket-ssl-perl libnet-ident-perl zip libnet-dns-perl postgrey

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:

service spamassassin stop
update-rc.d -f spamassassin remove

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.

freshclam
service clamav-daemon start

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

ERROR: /var/log/clamav/freshclam.log is locked by another process
ERROR: Problem with internal logger (UpdateLogFile = /var/log/clamav/freshclam.log).

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)

cd /tmp
wget https://git.ispconfig.org/ispconfig/ispconfig3/raw/stable-3.1/helper_scripts/ubuntu-amavisd-new-2.11.patch
cd /usr/sbin
cp -pf amavisd-new amavisd-new_bak
patch &lt; /tmp/ubuntu-amavisd-new-2.11.patch

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:

apt-get install nginx

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

service apache2 stop

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

update-rc.d -f apache2 remove

Iniciar  nginx después:

service nginx start

(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:

apt-get -y install php7.2-fpm

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:

apt-cache search php7.2

Elija los que necesita e instálelos 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

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

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

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

[...]
cgi.fix_pathinfo=0
[...]
date.timezone="America/Argentina/Cordoba"
[...]

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

Ahora recarga PHP-FPM:

service php7.2-fpm reload

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:

apt-get -y install 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:

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

Verás las siguientes preguntas:

Web server to reconfigure automatically: <-- selecciones none 
                                        (por que solo apache2 y lighttpd estan disponibles)
MySQL application password for phpmyadmin: <-- Presione Enter

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:

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.0-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 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:

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.0-fpm.sock;
                       fastcgi_param HTTPS on; # &lt;-- 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 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:

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

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

No olvide volver a cargar nginx después:

service nginx reload

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:

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.0-fpm.sock;
                       fastcgi_param HTTPS $fastcgi_https; # &lt;-- 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;
        }

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.

apt-get -y install hhvm

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.

apt-get -y install certbot

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

certbot register

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:

apt-get -y install mailman

Seleccione al menos un idioma, p. Ej .:

Languages to support: <-- es (Español)
Missing site list <-- Ok

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

newlist mailman
root@server1:~# newlist mailman
Enter the email of the person running the list: <-- admin email, ej. listadmin@example.com
Initial mailman password: <-- admin password para la lista mailman
To finish creating your mailing list, you must edit your /etc/aliases (or
equivalent) file by adding the following lines, and possibly running the
`newaliases' program:

## 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"

Hit enter to notify mailman owner... <-- ENTER

root@server1:~#

Abre /etc/postfix/aliases después …

nano /etc/postfix/aliases

… y agrega 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"

Ejecute

newaliases

luego reiniciar Postfix:

service postfix restart

Luego, inicie el daemon Mailman:

service mailman start

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/ o http://server1.example .com: 8081/cgi-bin/mailman/listinfo/ 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:

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

En http:///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:

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

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

nano /etc/default/pure-ftpd-common

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

[...]
STANDALONE_OR_INETD=standalone
[...]
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

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

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

mkdir -p /etc/ssl/private/

Luego, 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

Conteste las preguntas, que son administrativas.

Luego cambie los permisos del certificado SSL:

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

Luego reinicie PureFTPd:

service pure-ftpd-mysql restart

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 /):

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,<strong>usrjquota=quota.user,grpjquota=quota.group,jqfmt=vfsv0</strong> 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 habilitar la cuota, ejecute estos comandos:

mount -o remount /
quotacheck -avugm
quotaon -avug

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

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 y comienza con haveged.

systemctl enable haveged
service haveged start

12. Instalar Vlogger, Webalizer y AWStats

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

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

Abrir /etc/cron.d/awstats

nano /etc/cron.d/awstats

… y comentar todo 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

Este paquete es importante para dotar de seguridad a nuestro servidor

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 compila el paquete jailkit ejecutando este comando:

./debian/rules binary

Ahora puede 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 recomendado, porque el monitor ISPConfig intenta mostrar el registro:

apt-get -y install fail2ban

Para hacer que fail2ban monitorice PureFTPd y Dovecot, cree 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

Reinicie fail2ban después:

service fail2ban restart

Para instalar el firewall UFW, ejecute este comando apt:

apt-get install ufw

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 …

service apache2 stop

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

update-rc.d -f apache2 remove

Asegúrese de que nginx se esté ejecutando:

service nginx restart

(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:

cd /tmp
wget -O ispconfig.tar.gz https://git.ispconfig.org/ispconfig/ispconfig3/repository/archive.tar.gz?ref=stable-3.1
tar xfz ispconfig.tar.gz
cd ispconfig3*/install/

El siguiente paso es ejecutar

php -q install.php

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

root@server1:/tmp/ispconfig3-stable-3.1-da1e393d7bed829d180dd9006019201e3370e77a/install# php install.php

--------------------------------------------------------------------------------
_____ ___________ _____ __ _ ____
|_ _/ ___| ___ \ / __ \ / _(_) /__ \
| | \ `--.| |_/ / | / \/ ___ _ __ | |_ _ __ _ _/ /
| | `--. \ __/ | | / _ \| '_ \| _| |/ _` | |_ |
_| |_/\__/ / | | \__/\ (_) | | | | | | | (_| | ___\ \
\___/\____/\_| \____/\___/|_| |_|_| |_|\__, | \____/
__/ |
|___/
--------------------------------------------------------------------------------


>> Initial configuration

Operating System: Ubuntu 18.04 LTS (Bionic Beaver)


[...]

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.

Avatar
Carlos Dagorret
CTO Facultad de Ciencias Económicas

My research interests include distributed robotics, mobile computing and programmable matter.

Relacionado

comments powered by Disqus