Servidor de correo con Postfix+Dovecot+RainLoop+Mailman2 y auth LDAP para usuarios del AD DC [Debian 10] – PART IV

ÍNDICE

La documentación abarcará lo siguiente:

1.Implementación de un servidor de correo con buzones.

1.1.Datos de interés.

1.2.Sincronización de tiempo.

1.3. Implementación y configuración de ESMTP Postfix.

1.3.1. Selección de cifrados.

1.3.2. Configurando Postfix.

1.3.3. Creando los archivos de controles para Postfix-LDAP.

1.3.4. Comprobando la integración con LDAP y mapeos de aliases.

1.4.Implementación y configuración de Dovecot.

1.4.1.Configurando Dovecot

1.4.2.Creando archivo de control para Dovecot-LDAP

1.4.3.Script “quota-warnings.sh”

2. Implementación del cliente de correo web

2.1. Instalación de RainLoop

2.2. Fortaleciendo la seguridad del cliente de correo web

2.3. Configuraciones desde la WebGUI de RainLoop

3. Clientes de correo externo

3.1. Outlook 2016

3.2. Outlook 2019

3.3. Thunderbird 78.8.0

4. Filtrado de correos

4.1. Filtrado de correos por categorías

4.2. Filtrado para el remitente y destinatario

4.3. Filtrado para encabezado, adjuntos y cuerpo del correo

5. Copias de Carbón Ocultas

6. Listas de distribución con Mailman 2

6.1. Configuración de Nginx para Mailman 2

6.2. Instalación y configuración de Mailman 2

6.3. Integración de Mailman 2 a Postfix

6.4. Creando otras listas en Mailman 2

7. Rotación de logs y envío de reportes

8. Comprobando la encriptación TLS

9. Iptables

 

2. Implementación del cliente de correo web

Existen varias soluciones para implementar clientes de correo web con el objetivo de gestionar sus correos por protocolo IMAP o IMAPs, entre estos se encuentran: Neomail, Squirrelmail, Horde, Roundcube, Rainloop, entre otros. En este caso se utiliza RainLoop puesto que es un cliente de correos novedoso y se ajusta más a los estándares funcionales actuales.

2.1. Instalación de RainLoop

Como antes se menciona Rainloop se gestiona mediante una página web la cual debe contar con un soporte web para páginas dinámicas, por lo que se debe contar con un servidor web con soporte para interprete PHP y un gestor de bases de datos. En este caso se utilizarán Nginx, PHP7 y MariaDB.

Instalación de Nginx:

apt -y install nginx

Instalación de MariaDB:

apt -y install mariadb-server

Reconfiguramos MariaDB:

mysql_secure_installation
  • Establecemos una contraseña para el usuario “root” de MariaDB: mariadbadmin
  • Removemos el usuario “anonymous”.
  • Deshabilitamos al login remoto con el usuario “root” de MariaDB.
  • Removemos la base de datos de prueba.

Habilitamos que MySQL/MariaDB escuche por todas las interfaces. Para ello editamos el fichero de configuración del servidor:

nano /etc/mysql/mariadb.conf.d/50-server.cnf

Modificamos la opción “bind-address” y la dejamos como sigue:

bind-address = *

Reiniciamos el servicio:

systemctl restart mariadb.service

PHP con las extensiones necesarias:

apt -y install php7.3-{fpm,mbstring,mysql,pgsql,sqlite3,common,cli,curl,xml,json,ldap}

Configuramos php.ini:

nano /etc/php/7.3/fpm/php.ini

Editamos las siguientes opciones:

# [...]
post_max_size = 10M
# [...]
memory_limit = 256M
# [...]
upload_max_filesize = 10M
# [...]
date.timezone = America/Havana

Sin embargo, cuando se tiene una solución web Nginx+PHP, no basta con modificar los ficheros de “php.ini” (como sucede en con PHP+Apache), sino que también debe agregarse un último paso con respecto a Nginx. Por defecto, cuando instalamos un servidor Nginx este viene con un límite de subida de ficheros de 1 MB. Si se quiere aumentar este límite en Nginx, se debe hacer lo siguiente:

nano /etc/nginx/nginx.conf

Para aplicar esto a todos los servidores, en el contexto “http”, agregamos la siguiente línea:

http {

# [...]
     client_max_body_size 10M;
}

Reiniciamos ambos servicios:

systemctl restart php7.3-fpm.service
systemctl restart nginx.service

Creando la base de datos y usuario de conexión con la misma para MariaDB:

mysql -u root -p

-Enter password: mariadbpassword
-Confirmación de contraseña: mariadbpassword

Una vez dentro del intérprete de comandos de MariaDB, ejecute los siguientes comandos, adaptando a su escenario:

CREATE DATABASE rainloop;
GRANT ALL ON rainloop.* TO 'rainloop'@'localhost' IDENTIFIED BY 'dbpassword';
GRANT ALL ON rainloop.* TO 'rainloop'@'%' IDENTIFIED BY 'dbpassword';
FLUSH PRIVILEGES;
EXIT;

Creando el directorio donde se va a hospedar RainLoop:

mkdir /var/www/rainloop

Usted debe obtener los archivos fuentes de RainLoop puesto que este no viene disponible en los repositorios para Debian, usted puede obtenerlo mediante su URL oficial:

cd /var/www/rainloop
wget -c https://www.rainloop.net/repository/webmail/rainloop-community-latest.zip
unzip rainloop-community-latest.zip
rm -rf *.zip

Modificando los permisos:

chown -R www-data.www-data /var/www/rainloop
chmod -R 755 /var/www/rainloop

Creando un alias o Host Virtual en apache para RainLoop, en caso de utilizar Host Virtual debe agregar una entrada en su DNS para este:

nano /etc/nginx/sites-available/rainloop.vhost

Agregue el siguiente contenido, adaptando a su escenario de red:

server {
       listen 80;
       server_name webmail.empresa.midominio.cu;

       error_log /var/log/nginx/webmail_error.log;
       access_log /var/log/nginx/webmail_access.log;

       root /var/www/rainloop;
       index index.php index.html index.htm;

       location ~ \.php$ {
       include snippets/fastcgi-php.conf;
       fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
       }

       location ^~ /data {
       deny all;
       }

       # index.php fallback
       location / {
       #try_files $uri $uri/ =404;
       try_files $uri $uri/ /index.php?q=$uri&$args;
       }

       location ~ \.php$ {
       try_files $uri =404;

       fastcgi_pass unix:/run/php/php7.3-fpm.sock;
       fastcgi_index index.php;
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
       fastcgi_buffer_size 128k;
       fastcgi_buffers 256 16k;
       fastcgi_busy_buffers_size 256k;
       fastcgi_temp_file_write_size 256k;
       include fastcgi_params;
       #include fastcgi.conf;
       }
}

Creamos un enlace simbólico para activar la configuración:

ln -s /etc/nginx/sites-available/rainloop.vhost /etc/nginx/sites-enabled/

Comprobamos i hay errores de sintaxis en Nginx:

nginx -t

Si todo está bien, debe devolver lo siguiente:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Reiniciamos Nginx y PHP-fpm para aplicar los cambios:

systemctl restart nginx
systemctl restart php7.3-fpm

Rainloop ya puede ser accedido a través del siguiente enlace:

http://webmail.empresa.midominio.cu

Recuerde que es de buena práctica asegurar además el acceso de los usuarios a RainLoop mediante conexión segura HTTPS. Para ello se han de seguir una serie de pasos que se describen en el siguiente apartado:

2.2. Fortaleciendo la seguridad del cliente de correo web

Editamos el fichero de configuración de Nginx:

nano /etc/nginx/nginx.conf

Modificamos la opción “gzip on” y la dejamos como sigue:

# [...]
     gzip off
# [...]

Creando Certificado SSL Autofirmado:

openssl req -x509 -nodes -days 730 -newkey rsa:2048 -keyout /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crt

Debe devolver lo siguiente, mientras se van completando las preguntas:

Generating a RSA private key
..+++++
.....+++++
writing new private key to '/etc/ssl/private/nginx-selfsigned.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:CU
State or Province Name (full name) [Some-State]:CUBA
Locality Name (eg, city) []:LaHabana
Organization Name (eg, company) [Internet Widgits Pty Ltd]:EMPRESA
Organizational Unit Name (eg, section) []:REDES
Common Name (e.g. server FQDN or YOUR name) []:mail.empresa.midominio.cu, webmail.empresa.midominio.cu
Email Address []:[email protected]

Configuramos el parámetro DH:

openssl dhparam -out /etc/nginx/dhparam.pem 2048

Configuración de Nginx para que use SSL:

mkdir /etc/ssl/certs/webmail
mkdir /etc/ssl/private/webmail
mkdir /etc/nginx/webmail
chmod 700 -R /etc/ssl/private/webmail

Movemos la llave y certificado a sus respectivos directorios:

mv /etc/ssl/certs/nginx-selfsigned.crt /etc/ssl/certs/webmail/
mv /etc/ssl/private/nginx-selfsigned.key /etc/ssl/private/webmail/

Creamos el siguiente fichero:

nano /etc/nginx/webmail/self-signed.conf

Agregamos lo siguiente:

ssl_certificate /etc/ssl/certs/webmail/nginx-selfsigned.crt;
ssl_certificate_key /etc/ssl/private/webmail/nginx-selfsigned.key;

Editamos los parámetros SSL para el sitio:

nano /etc/nginx/webmail/ssl-params.conf

Agregamos lo siguiente, adaptando a su red:

# Autorizar solamente el uso de los protocolos TLSv1.2 y TLSv1.3
ssl_protocols TLSv1.2 TLSv1.3;

# Imponer la seleccion del cifrado por el servidor y no por el cliente
ssl_prefer_server_ciphers on;

# Autorizar cifrados de tipo AEAD y Perfect Forward Secrecy (FS-ECDHE) para TLSv1.2:
# (para TLSv1.3 no es necesario especificar los cifrados, pues todos son seguros)
ssl_ciphers ECDHE+AESGCM:-ECDSA:@STRENGTH;

# Especificar una curva para cifrados ECDHE:
ssl_ecdh_curve secp384r1;

# Parametro Diffie-Hellman para la suite de cifrados de tipo DHE:
ssl_dhparam /etc/nginx/dhparam.pem;

# Habilitar reanudacion de la sesion para mejorar rendimiento de HTTPS:
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_session_tickets off;

# Habilitar OCSP stapling:
ssl_stapling on;
ssl_stapling_verify on;
resolver ns1.empresa.midominio.cu valid=300s;
resolver_timeout 5s;

# HSTS (HTTP Strict Transport Security):
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";

# Proteccion contra ataque Clickjacking:
add_header X-Frame-Options SAMEORIGIN;

# Proteccion de rastreo del navegador:
add_header X-Content-Type-Options nosniff;

# Filtro Cross-site scripting (XSS):
add_header X-XSS-Protection "1; mode=block";

Editamos el fichero de configuración de Nginx para el sitio:

nano /etc/nginx/sites-available/rainloop.vhost

Ajustando la configuración SSL para Nginx, adaptando lo que se encuentra resaltado en color blanco, por los datos de su red:

server {
       listen 80;
       server_name webmail.empresa.midominio.cu;

       # Redireccion permanente a HTTPS
       return 302 https://$server_name$request_uri;
       }

server {
       listen 443 ssl http2;
       server_name webmail.empresa.midominio.cu;

       include webmail/self-signed.conf;
       include webmail/ssl-params.conf;

       error_log /var/log/nginx/webmail_error.log;
       access_log /var/log/nginx/webmail_access.log;

       root /var/www/rainloop;
       index index.php index.html intex.htm;

       location ^~ /data {
       deny all;
       }

       # index.php fallback
       location / {
       #try_files $uri $uri/ =404;
       try_files $uri $uri/ /index.php?q=$uri&$args;
       }

       location ~ \.php$ {
       try_files $uri =404;
       fastcgi_pass unix:/run/php/php7.3-fpm.sock;
       fastcgi_index index.php;
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
       fastcgi_buffer_size 128k;
       fastcgi_buffers 256 16k;
       fastcgi_busy_buffers_size 256k;
       fastcgi_temp_file_write_size 256k;
       include fastcgi_params;
       }
}

Verificamos errores de sintaxis:

nginx -t

Nos debe devolver la siguiente alerta, la cual omitiremos, eguido de una notificación de configuración correcta:

nginx: [warn] "ssl_stapling" ignored, issuer certificate not found for certificate "/etc/ssl/certs/webmail/nginx-selfsigned.crt"
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Reiniciamos Nginx y PHP-fpm para aplicar los cambios:

systemctl restart php7.3-fpm
systemctl restart nginx

Llegado a este punto ya usted puede acceder a la interface web administrativa de RainLoop en la cual puede realizar una serie de modificaciones acorde a sus necesidades.

2.3. Configuraciones desde la WebGUI de RainLoop

Accedemos a la WebGUI de RainLoop para configurarlo:

http://webmail.empresa.midominio.cu/?admin

El navegador nos advierte de que el servidor web usa un certificado que no está validado. Si vemos la información del certificado podemos ver cómo se generó con alias:

Como se trata de un certificado auto-firmado, aceptamos el riesgo y continuamos.

Donde las credenciales de acceso inicialmente son:

-Usuario: admin
-Contraseña: 12345

A continuación, se representan algunos ejemplos a tener en cuenta para configurar RainLoop mediante la interface web administrativa.

Lo primero que nos aparecerá en la web administrativa del sitio, es que una alerta que nos pide cambiemos las credenciales del usuario “admin”:

Esto se puede lograr con desplazarse hasta la pestaña de seguridad o haciendo un “click” en el hipervínculo indicado.

En la opción “General” queda a su consideración el idioma, tema a modo global, y permitir la selección de estos por parte de sus usuarios. Se adecua además el valor del tamaño máximo permitido para los adjuntos, el cual en el ejemplo aparece disponible para 10 MB. Se recomienda mantener desmarcadas las opciones “Permitir cuentas adicionales” y “Permitir Múltiples identidades”, para evitar la suplantación de identidad, a través de RainLoop:

Opción “Dominios” donde usted debe agregar manualmente su dominio mediante el botón “Agregar dominio”:

En la opción “Dominio”, una vez presionado el botón “Agregar dominio” aparece una ventana similar a la que se refleja en el ejemplo, donde usted debe llenar los campos referentes a su dominio, y los campos referentes a las entradas que ya debe tener creadas con antelación para IMAP y SMTP. En sustitución, puede utilizar direcciones IP también, además debe tener en cuenta los mecanismos de seguridad antes configurados en su servicio de correo en correspondencia a los puertos de escucha y cifrado, declarándolos. En este caso se configurará RainLoop para que use modo SSL/TLS implícito para IMAP y STARTTLS para SMTP.

También aparecen las opciones de correo corto, la cual se refiere a que el usuario para autenticarse al servicio web de correo no tiene necesariamente que introducir como identificador su nombre de usuario más el dominio ej: “[email protected]”, simplemente con escribir “usuario1.apellido. Como paso final puede utilizar el botón “Probar” antes de seguir con las opciones siguientes.

Dejamos habilitado el dominio de correo:

En la opción “Pantalla de ingreso” usted debe escribir manualmente el nombre de su dominio en caso que no aparezca, quedando a su consideración permitir la selección de idioma, y que RainLoop encuentre automáticamente el nombre del dominio.

Opción “Personalización” Aquí usted puede configurar el título que aparece en la página más una breve descripción de la misma, además de un favicon personalizado, las demás opciones aparecen disponibles solo en la versión Premium.

La opción “Contactos” queda a su consideración permitir los contactos y permitir la sincronización de estos con un servidor externo que brinde información mediante CardDAV. Permite, además, declarar los parámetros de conectividad con la base de datos asociada a RainLoop, la cual ya fue creada anteriormente.

La opción “Complementos” permite la descarga desde internet de los complementos y plugins disponibles para Rainloop. Usted puede descargarlos manualmente y ponerlos en la siguiente ruta “var/www/rainloop/data/_data_/_default_/plugins”. Una vez puestos los complementos en este directorio debe refrescar la página para que sean reconocidos por RainLoop y configurar en caso que sea necesario cada uno de estos. Este ejemplo no usará ninguno, pues la mayoría están asociados a cambios de contraseña según el método de autenticación y otros no necesarios para nuestro ejemplo.

La versión de RainLoop sobre la cual fueron hechas estas configuraciones se muestra en la siguiente imagen:

Con estos pasos ya usted puede gestionar su correo mediante RainLoop accediendo a la dirección URL a fin con este:

https://webmail.empresa.midominio.cu

RainLoop nos recibirá con su login:

El nombre de usuario que se especifique, puede ser con inicio de sesión corto o largo. Si fuese necesario, RainLoop ya esta preparado para agregar el dominio por omisión.

 

¿De cuánta utilidad te ha parecido este contenido?

¡Haz clic en una estrella para puntuar!

Promedio de puntuación 5 / 5. Recuento de votos: 1

Hasta ahora, ¡no hay votos!. Sé el primero en puntuar este contenido.

Sobre Franco Diaz Hurtado 27 artículos
Ing. Telecomunicaciones y Electrónica; 1er Especialista en Redes de ECASA Nivel Central

5 comentarios

  1. Firefox 87.0 Firefox 87.0 Windows 10 x64 Edition Windows 10 x64 Edition
    Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:87.0) Gecko/20100101 Firefox/87.0

    Ok, esperaré por las modificaciones, favor de avisar en cuanto estén.
    Gracias. Saludos

  2. Firefox 87.0 Firefox 87.0 Windows 10 x64 Edition Windows 10 x64 Edition
    Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:87.0) Gecko/20100101 Firefox/87.0

    Ok. AHora me ha estado dando otro error, he instalado varias veces pero el error persiste.
    Y es el siguiente.
    Cuando accedo por el Rainloop a la hora de enviar un msj, me dice
    «No se puede enviar el mensaje»

    Y si pruebo por el outlook, cuando lo configuro, que le doy
    PROBAR CONFIGURACION DE LA CUENTA….
    -Iniciar sesión en el servidor de correo entrante (POP3) okkkkkk
    -Enviar mensaje de correo electrónico de prueba da el siguiente error
    Enviar mensaje de correo electrónico de prueba: el servidor respondió: 451 4.3.0 [email protected]

    En espera de su respuesta

    • Firefox 87.0 Firefox 87.0 Windows 10 x64 Edition Windows 10 x64 Edition
      Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:87.0) Gecko/20100101 Firefox/87.0

      He realizado modificaciones en la configuracion que aun han de ser reflejadas en este articulo. De todas formas, las actuales deberian poder funcionar. El problema se debe a que, es posible, que la web interprete mal algunos caracteres de la configuracion. Trata de bajar las configuraciones del enlace de la primera parte e ir adapatando a lo que se va modificando por articulo.
      SL2

      PD: en estos dias actualizo el tutorial

  3. Firefox 87.0 Firefox 87.0 Windows 10 x64 Edition Windows 10 x64 Edition
    Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:87.0) Gecko/20100101 Firefox/87.0

    en el apartado:
    # Habilitar OCSP stapling:
    ssl_stapling on;
    ssl_stapling_verify on;
    resolver ns1.empresa.midominio.cu valid=300s;
    resolver_timeout 5s;

    Quien es «ns1»

Responder a Armando Felipe Fuentes Denis Cancelar la respuesta

Tu dirección de correo electrónico no será publicada.


*