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

Í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

 

5. Copias de Carbón Ocultas

Las Copias de Carbón Ocultas (BCC, por sus siglas en inglés o Blind Carbon Copy) hace referencia a las copias de los correos entrante o saliente de su dominio o subdominios. También se puede utilizar para redirigir una copia de los correos pertenecientes a un buzón en específico hacia otro buzón. Para ello es necesario entender tres directivas:

  • “always_bcc =”: Se utiliza para crear siempre una BCC, tanto para el correo entrante, como para el saliente.
  • “sender_bcc_maps =”: Para hacer BCC a un correo saliente.
  • “recipient_bcc_maps =”: Para hacer BCC a un correo entrante.

Creando directorio que contendrá los archivos para copias al carbón:

mkdir /etc/postfix/bcc

Creando el archivo que contiene las direcciones de usuarios y la dirección de correo que recibe las copias de los correos recibidos:

nano /etc/postfix/bcc/recipient_maps

Agregue el siguiente contenido, en caso que usted desee crear una copia de todo el correo entrante referente a su dominio. En este caso el valor “@empresa.midominio.cu” se refiere al dominio en cuestión, y “[email protected]” se refiere al buzón donde se van a guardar las copias:

# NOTA!!!: Este fichero requiere un "postmap"

# BCC para todo el correo entrante
@empresa.midominio.cu [email protected]

También puede agregar el siguiente contenido, en caso que usted desee crear una copia del contenido de un buzón en específico hacia otro buzón. En este caso el valor “[email protected]” se refiere al buzón que se le hará la copia y “[email protected]” se refiere al buzón donde se van a guardar o redirigir las copias del correo entrante del buzón de “usuario1.apellido” (OPCIONAL):

# [...]
# BCC para todo el correo entrante de usuarios especificos
[email protected] [email protected]

Generando el mapa del archivo creado anteriormente:

postmap /etc/postfix/bcc/recipient_maps

#======================================
NOTA:
Tenga en cuenta crear el usuario “trazas”, por mecanismo de autenticación implementado en el servidor. Como usamos autenticación LDAP, se debe crear una cuenta en el AD para dicho usuario.
#======================================

Creando el archivo que contiene las direcciones de usuarios y la dirección de correo que recibe las copias de los correos enviados:

nano /etc/postfix/bcc/sender_maps

Agregamos lo siguiente, la cual se considera de interés tener una copia del correo saliente especificado:

# NOTA!!!: Este fichero requiere un "postmap"

# BCC para todo el correo saliente
#@empresa.midominio.cu [email protected]

# BCC para todo el correo saliente de usuarios especificos
[email protected] [email protected]

Generando el mapa del archivo creado anteriormente:

postmap /etc/postfix/bcc/sender_maps

Declarando las nuevas reglas en el archivo de configuración de postfix:

nano /etc/postfix/main.cf

Busque el fragmento «BCC» y descomente las siguientes líneas, resaltadas en color blanco:

# [...]
recipient_bcc_maps = hash:/etc/postfix/bcc/recipient_maps
# [...]
sender_bcc_maps = hash:/etc/postfix/bcc/sender_maps
# [...]

Recargamos Postfix:

systemctl reload postfix.service

Para complementar, es importante que cualquier correo electrónico enviado directamente a la cuenta “trazas” se elimine automáticamente, ya que de otra forma habría correos duplicados en su buzón. Para lograr este fin, se edita el fichero “/etc/postfix/reglas/recipient_checks.pcre”:

nano /etc/postfix/reglas/recipient_checks.pcre

Agregamos lo dirección de correo del usuario “trazas” y la acción realizarse:

# [...]
# Direccioon de correo usada para BCC
/^trazas\@empresa\.midominio\.cu$/
521 "En lista negra"

Recargamos Postfix:

systemctl reload postfix.service

Cuando alguien intente escribirle directamente a “[email protected]”, recibirá el siguiente mensaje del servidor:

Si enviamos un correo desde el “usuario1.apellido” a cualquier destino, se guardará una copia de ese correo saliente en el buzon de “trazas”:

Si enviamos un correo a un usuario del dominio de correo, desde cualquier destino, se guardará una copia de ese correo saliente en el buzon de “trazas”:

La cuota del buzón de trazas debe ser lo suficientemente grande como para almacenar correos de toda la empresa por al menos 1 año.

6. Listas de distribución con Mailman 2

Usted puede agregar a su servicio de correo elementos adicionales como en este caso son las listas de distribución, estas pueden ser usadas con diversos fines, envío masivo a todos los usuarios de su institución, listas de debates temáticos a fin de compartir el conocimiento, entre otros. Para tales fines existen varios programas entre los que se encuentra Mailman.

En este tutorial se utilizará Mailman v2, el cual no tiene soporte para autenticación por STARTTLS. Esto implicará que se debe deshabilitar la autenticación forzada por TLS en el MTA Postfix para el localhost. En la configuración de Postfix ya habíamos especificado TLS oportunístico, lo cual no obliga a que los clientes SMTP a iniciar una conexión encriptada de forma obligatoria. Tener habilitado el puerto 25 para SMPT a nivel de servicio no resulta un problema si el firewall del servidor controla los accesos a este puerto (permitido solamente para las redes confiables, como el localhost y relayhost).

#======================================
NOTA:
Antes de comenzar con la implementación de Mailman, usted debe crear en su DNS una entrada referente al nombre que tendrá su servicio de listas, en este caso se tomará como ejemplo “listas.empresa.midominio.cu”.
#======================================

6.1. Configuración de Nginx para Mailman 2

Instalamos FCGIWrap para que Mailman muestre correctamente su interfaz web, para correr aplicaciones CGI con FastCGI y Nginx:

apt install fcgiwrap -y

Nos aseguramos que FCGI y Nginx corren bajo el mismo usuario “www-data”. Si no es el caso lo cambiamos. Para ello verificamos el siguiente fichero:

nano /etc/init.d/fcgiwrap

Verificamos las opciones siguientes:

# [...]
FCGI_USER="www-data"
FCGI_GROUP="www-data"
# [...]

Si se tuvo que hacer algún cambio, se recomienda reiniciar el servicio “fcgiwrap”.

Creando una entrada en Nginx para Mailman:

nano /etc/nginx/sites-available/mailman.conf

Agregar lo siguiente:

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

       location /cgi-bin/mailman {
       gzip off;
       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;
       }

       location ~ /\.ht {
       deny all;
       }

       # Logs
       error_log /var/log/nginx/listas_error.log;
       access_log /var/log/nginx/listas_access.log;
}

 

 

Creando un enlace simbólico:

ln -s /etc/nginx/sites-available/mailman.conf /etc/nginx/sites-enabled/

Reiniciando Nginx:

systemctl restart nginx.service

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

apt-get install mailman -y

Seleccione con la barra espaciadora el idioma español cuando se lo pida. Luego Mailman nos indica que falta la lista por defecto “mailman” y si verificamos el estado del servicio veremos que no inició correctamente debido a esto. Por ahora solo aceptamos la información y continuamos.

Configurando Mailman:

nano /etc/mailman/mm_cfg.py

Busque las coincidencias que aparecen a continuación y modifique los parámetros, adecuándolos a su red:

# [...]
#-------------------------------------------------------------
# Default domain for email addresses of newly created MLs
# Aqui va el dominio de su correo
DEFAULT_EMAIL_HOST = 'empresa.midominio.cu'
#-------------------------------------------------------------
# Default host for web interface of newly created MLs
# Aqui va el host virtual creado para mailman
DEFAULT_URL_HOST = 'listas.empresa.midominio.cu'
# [...]
#-------------------------------------------------------------
# The default language for this server.
# Aqui va el idioma por defecto
DEFAULT_SERVER_LANGUAGE = 'es'

Creamos un fichero que contendrá todos los aliases para poder interactuar con las listas de correo gestionadas por Mailman:

nano /etc/postfix/mailman_alias

Agregamos lo siguiente, para el caso de la lista “mailman”, que se creará luego:

## lista de distribución "mailman"
[email protected] mailman
[email protected] mailman-admin
[email protected] mailman-bounces
[email protected] mailman-confirm
[email protected] mailman-join
[email protected] mailman-leave
[email protected] mailman-owner
[email protected] mailman
[email protected] mailman-subscribe
[email protected] mailman-unsubscribe

Generamos el mapa del fichero:

postmap /etc/postfix/mailman_alias

Creando la primera lista, la cual se llama “mailman” y es obligatoria:

newlist mailman

Pedirá un usuario de correo para que administre esta lista ponemos el usuario, por ejemplo: “[email protected]”.

Indique la dirección de correo de la persona que gestionará la lista: [email protected]

Pedirá una contraseña para el administrador de esta lista:

Indique la dirección de correo de la persona que gestionará la lista: [email protected]
Clave inicial de mailman: mailmanpassword

Damos “ENTER” y se termina creando la lista. Entre las líneas que devuelve la acción anterior, se muestran las siguientes:

# [...]
## lista de distribución mailman
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"
# [...]

6.3. Integración de Mailman 2 a Postfix

Editamos el fichero de configuración de Mailman:

nano /etc/mailman/mm_cfg.py

Busque la siguiente coincidencia en el archivo de configuración de Mailman y descomente la siguiente línea, dejándola sin el espacio inicial:

MTA='Postfix'

Creamos un nuevo fichero “/etc/postfix/transport” y agregamos la lista por defecto con su dominio y el usuario “mailman”:

echo "[email protected] mailman:" > /etc/postfix/transport

Generamos el mapa del fichero:

postmap /etc/postfix/transport

Verificamos que no se ofrece autenticación para localhost:

cat /etc/postfix/reglas/esmtp_access.cidr | grep 127.0.0.0/8

Lo anterior deberá devolver lo siguiente:

127.0.0.0/8 silent-discard, auth, etrn, dsn

Hecho lo anterior, ya sabemos que nuestro servidor no ofrece autenticación al propio cliente SMTP del localhost, el cual será usado por Mailman para el envío de correo a las listas.

Editamos el fichero de configuración de Postfix:

nano /etc/postfix/main.cf

En el apartado “TRANSPORT” descomentamos la siguiente línea, dejándola como se muestra en color blanco:

# [...]
transport_maps = hash:${config_directory}/transport
# [...]

En el apartado “NETWORK” descomentamos la línea que hace referencia a las listas, en las opciones de “mydestination”. La línea hace referencia al nombre por el cual responde la URL de Mailman:

# [...]
mydestination =
localhost,
localhost.localdomain,
localhost.$mydomain,
listas.$mydomain,
$myhostname
# [...]

En el apartado “MAILBOX” descomentamos las siguientes líneas, dejándolas como se muestran:

# [...]
owner_request_special = no
dovecot_destination_recipient_limit = 1
# [...]

Reiniciamos Mailman y recargamos Postfix:

systemctl restart mailman.service
systemctl reload postfix.service

Cambiando permisos en algunos archivos y directorios de Mailman:

chown -R root:root /var/lib/mailman
chown root:list /var/lib/mailman
chown -R root:list /var/lib/mailman/archives
chown -R root:list /var/lib/mailman/data
chown -R root:list /var/lib/mailman/lists
chown -R root:list /var/lib/mailman/messages
chown -R root:list /var/lib/mailman/spam
chown -R root:list /var/lib/mailman/.version
chown -R list:list /var/lib/mailman/qfiles

6.4. Creando otras listas en Mailman 2

No se debe usar la lista por defecto de Mailman para mensajes de difusión. En su lugar debemos crear una nueva lista que hará esta función. Antes de crear la nueva lista comentamos el MTA:

Editamos el fichero “/etc/mailman/mm_cfg.py”:

nano /etc/mailman/mm_cfg.py

Comentamos el MTA:

#MTA='Postfix'

Agregamos al fichero “/etc/postfix/virtual-mailman” los alias virtuales que se usaran en la nueva lista por crear “todos”:

nano /etc/postfix/virtual_alias_mailman_maps

Agregamos lo siguiente:

# [...]
## lista de distribución "todos"
[email protected] todos
[email protected] todos-admin
[email protected] todos-bounces
[email protected] todos-confirm
[email protected] todos-join
[email protected] todos-leave
[email protected] todos-owner
[email protected] todos
[email protected] todos-subscribe
[email protected] todos-unsubscribe

Actualizamos el mapa del fichero:

postmap /etc/postfix/virtual_alias_mailman_maps

Creando la lista “todos”:

newlist todos

Pedirá un usuario de correo para que administre esta lista ponemos el usuario, por ejemplo: “[email protected]”.

Indique la dirección de correo de la persona que gestionará la lista: [email protected]

Pedirá una contraseña para el administrador de esta lista:

Indique la dirección de correo de la persona que gestionará la lista: [email protected]
Clave inicial de todos: todoslistpassword

Damos “ENTER” y se termina creando la lista. Entre las líneas que devuelve la acción anterior, se muestran las siguientes:

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

También, cada vez que se cree una nueva lista, se debe agregar al fichero “/etc/postfix/transport” el nombre de la lista con su dominio, acompañado del usuario “mailman”, como se muestra a continuación:

echo "[email protected] mailman:" >> /etc/postfix/transport

Actualizamos el mapa del fichero:

postmap /etc/postfix/transport

También debemos correr el siguiente comando tras la creación de una lista:

/var/lib/mailman/bin/genaliases

Editamos el fichero de configuración de Mailman:

nano /etc/mailman/mm_cfg.py

Descomentamos nuevamente el MTA Postfix:

MTA='Postfix'

Reiniciamos Mailman

systemctl restart mailman.service

Accediendo a las listas creadas en Mailman, para mostrar la relación de las listas creadas.

http://listas.empresa.midominio.cu/cgi-bin/mailman/listinfo

Accediendo a las listas creadas en Mailman, para administrarlas y configurarlas vía web:

http://listas.empresa.midominio.cu/cgi-bin/mailman/admin

Si más adelante se desea borrar alguna lista creada y sus conversaciones, simplemente correr el siguiente comando:

rmlist -a <nombre_de_lista>

Dentro de la web de administración de “Todos”, configuramos el idioma a usarse:

  • Opciones de idiomas:

Una vez echo, reconfiguramos Mailman para que configure todo el sitio en este idioma (si no se hace, existirán algunas palabras en inglés mezclado con español en el sitio):

dpkg-reconfigure mailman

Seleccionamos el idioma “es (Español)” con la barra espaciadora y aceptamos los cambios. Mailman se reconfigurará e instalará el idioma. Si devuelve que no fue necesario realizar actualizaciones, es porque ya se había instalado correctamente desde la primera vez.

Se recomiendan las siguientes configuraciones en la lista de correo “Todos”:

  • Opciones generales:

Definimos en la siguiente imagen que, cuando se responda a un correo de la lista “Todos”, se envíe a una dirección especifica, la cual puede dejarse o bloquearse a nivel del MTA Postfix:

Las notificaciones para bienvenida y baja de un miembro de la lista:

Otras configuraciones:

  • Suscripciones masivas:

Mailman 2 no da la posibilidad de integrarlo con el LDAP del AD DC, por lo que cada usuario debe agregarse manualmente a la lista creada desde la web de gestión de Mailman, o mediante aprobación ante una solicitud de suscripción.

  • Lista de suscriptores:

Recordar siempre marcar la casilla de “mod” para que el usuario sea moderado y, por ende, que las reglas configuradas en Mailman sea aplicables a dicho usuario. En este caso no se marca la casilla de moderación para el usuario “usuario1.apellido”, por ser administrador de la lista.

  • Reglas para la suscripción:

  • Opciones de entrega regular:

  • Filtrado del remitente:

Con las opciones anteriores, existen algunos mensajes predefinidos y algunas restricciones que nos permitirá automatizar un poco la gestión de la lista de correo “Todos”. A continuación, se muestran algunos ejemplos de respuestas o mensajes enviados al suscriptor o al desuscriptor:

  • Códigos HTML:

Editamos el código HTML de las páginas de acceso y los ficheros de texto públicos, específicamente para el del mensaje de bienvenida, dejándolo como sigue:

  • Si un usuario se hace suscriptor de la lista “Todos” recibirá el siguiente mensaje de bienvenida:

  • Si un usuario moderado responde a un mensaje de la lista de correo “Todos” o le escribe directamente, recibirá el siguiente mensaje, según las reglas anteriormente configuradas:

En este caso, la integración de Mailman con Postfix usuando usuarios virtuales LDAP, nos trajo una serie problemas cuando se interactúan con algunos alias del programa, generados para cada lista. Para el caso de la lista “Todos”, al tratarse de una lista informativa para los usuarios de la red, se decidió filtrar a nivel del MTA Postfix, el envió de mensajes a dichas direcciones que corresponden a los alias: “todos-owner” y “todos-bounces”. De manera que, si un administrador de la lista le escribe a la lista, se enviará el correo a cada miembro de la lista y en caso de que algún miembro de la lista sin permisos o no miembro de la misma intente escribirle a dicha lista o dicho correo, proveniente del nombre de la lista, se recibirá el mesnaje de rechazo (de estar configurado). Sin embargo, si el usuario vuelve a intentar escribirle a la respuesta de dicha lista, ya no será para el nombre de la lista, sino para uno de sus alias y es aquí donde se el servidor de correo pasa a filtrar dicha dirección. Para implementar estas restricciones seguimos los siguientes pasos.

Editamos el siguiente fichero:

nano /etc/postfix/reglas/recipient_checks.pcre

Agregamos lo siguiente, al final del fichero:

# [...]
# Direccioon de correo de la lista cuando enviia una respuesta predefinida por el administrador (adaptar a su dominio)
/^todos-owner\@empresa\.midominio\.cu$/
521 "En lista negra"

# Direccioon de correo que enviia la lista tras dar de alta al usuario (adaptar a su dominio)
/^todos-bounces\@empresa\.midominio\.cu$/
521 "En lista negra"

Si esto no se hace, el mensaje es enviado y Postfix termina respondiéndonos en un correo, de que el usuario es desconocido y no se pudo entregar el mensaje, lo cual recae en procesamiento innecesario de Postfix y no uso eficiente de los recursos disponibles para el servidor. Si alguien le escribe a alguna de dichas direcciones, Postfix lo denegará, como muestran los logs:

Mar 14 19:13:07 mail postfix/submission/smtpd[22274]: NOQUEUE: reject: RCPT from mail.empresa.midominio.cu[192.168.120.37]: 554 5.7.1 <[email protected]>: Recipient address rejected: 521 "En lista negra"; from=<[email protected]> to=<[email protected]> proto=ESMTP helo=<webmail.empresa.midominio.cu>

 

¿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

1 comentario

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

    Buenos días,, alguien ha usado mailman3 o podían agregar en la guía soporte para usar mailman3

    Saludos

Dejar una contestacion

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


*