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

Í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

 

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

En los pasos anteriores ya usted instaló Dovecot y sus paquetes asociados, a continuación, se describe como configurar el mismo para que se integre a un AD DC.

Generando los certificados SSL para Dovecot:

cd /etc/dovecot
openssl req -new -x509 -newkey rsa:2048 -days 730 -keyout privkey.pem -out dovecot.pem

-Pide entrar una contraseña: 123456
-Confirmar la contraseña: 123456

Deberá devolver algo como esto, a medida que se vayan respondiendo las preguntas:

Country Name (2 letter code) [AU]:CU
State or Province Name (full name) [Some-State]:HABANA
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) []:dovecot.empresa.midominio.cu
Email Address []:[email protected]

Generando archivo “.pem”:

openssl rsa -in privkey.pem -out privkey.pem

Pide entrar una contraseña: 123456

cat privkey.pem >> dovecot.pem

Generamos el certificado para Dovecot:

openssl req -new -x509 -days 730 -nodes -out /etc/dovecot/dovecot.pem -keyout /etc/dovecot/dovecot.pem

Deberá devolver algo como esto, a medida que se vayan respondiendo las preguntas:

Country Name (2 letter code) [AU]:CU
State or Province Name (full name) [Some-State]:HABANA
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) []:dovecot.empresa.midominio.com
Email Address []:[email protected]

Generando archivo “.pem”:

openssl rsa -in privkey.pem -out privkey.pem
cat privkey.pem >> dovecot.pem

Otorgando los permisos correctos:

chmod 0444 /etc/dovecot/dovecot.pem
chmod 0400 /etc/dovecot/privkey.pem

Haciendo una copia del archivo “dovecot.pem” para el directorio “/etc/dovecot/private/”:

cp /etc/dovecot/dovecot.pem /etc/dovecot/private/dovecot.pem

1.4.1 Configurando Dovecot

En este caso se utiliza un método de configuración no habitual para Dovecot, utilizando un único archivo de configuración, por tanto:

mv /etc/dovecot/dovecot.conf{,.orig}
nano /etc/dovecot/dovecot.conf

Agregue el siguiente contenido, adaptando a su ejemplo:

listen = *
protocols = pop3 imap
login_log_format = %$: %s
login_log_format_elements = user=<%u> method=%m rip=%r lip=%l %c
deliver_log_format = msgid=%m: %$ : Subject: %s
log_timestamp = "%Y-%m-%d %H:%M:%S "
login_greeting = Dovecot ready OK+.
mail_access_groups = vmail

# Ruta para los buzones de correo
mail_location = maildir:/home/vmail/%d/%n/Maildir:INDEX=/home/vmail/%d/%n/Maildir

mail_log_prefix = "%Us(%u): "
maildir_stat_dirs = yes
log_path = syslog
info_log_path = syslog
mail_uid = 5000
mail_gid = 5000
first_valid_uid = 5000
last_valid_uid = 5000
mail_plugins = quota mailbox_alias acl mail_log notify
mail_debug = no
auth_verbose = no
auth_debug = no
auth_debug_passwords = no
auth_verbose_passwords = plain
debug_log_path = syslog
verbose_proctitle = no

#=====
# TLS
#==============================================
# Ruta al certificado y llave
ssl_cert = </etc/dovecot/dovecot.pem
ssl_key = </etc/dovecot/private/dovecot.pem

# Lista de cifrados a ser usados por el servidor
ssl_cipher_list = ECDHE+AESGCM:-ECDSA:@STRENGTH

# Deshabilitar auth sin el uso de la encriptacioon
disable_plaintext_auth = yes
ssl = yes
verbose_ssl = no

# Establecer la preferencia del orden de cifrado por el servidor
ssl_prefer_server_ciphers = yes

# Especificamos el protocol miinimo a usar
# Debe entenderse que no todos los dispositivos soportan TLSv1.3, especificarlo incrementa a seguridad, pero sacrifica la conectividad de clientes de correo externos mas antiguos o incompatibles
ssl_min_protocol = TLSv1.2
#==============================================

mail_temp_dir = /tmp
auth_username_chars = abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@
auth_mechanisms = plain login
deliver_log_format = from=%{from}, envelope_sender=%{from_envelope}, subject=%{subject}, msgid=%m, size=%{size}, %$
service stats {
unix_listener stats-reader {
group = mail
mode = 0666
}
unix_listener stats-writer {
group = mail
mode = 0666
}
}

service anvil {
unix_listener anvil {
group = mail
mode = 0666
}
}
service auth {
unix_listener /var/spool/postfix/private/auth {
user = postfix
group = postfix
mode = 0666
}
unix_listener auth-master {
user = vmail
group = vmail
mode = 0666
}
unix_listener auth-userdb {
user = vmail
group = vmail
mode = 0660
}
user = root
}
# Mapeo de las cuentas virtuales de correo
userdb {
args = /etc/dovecot/dovecot-ldap.conf
driver = ldap
}
passdb {
args = /etc/dovecot/dovecot-ldap.conf
driver = ldap
}
plugin {
mailbox_alias_old = Sent
mailbox_alias_new = Sent Messages
mailbox_alias_old2 = Sent
mailbox_alias_new2 = Sent Items
mail_log_events = delete undelete copy expunge mailbox_delete mailbox_rename
mail_log_fields = uid box msgid size from subject
trash = /etc/dovecot/trash.conf
# Cuota para el correo definida desde el AD DC
quota = maildir:User quota
quota_rule2 = Trash:storage=+100M
quota_warning = storage=95%% quota-warning 95 %u
quota_warning2 = storage=80%% quota-warning 80 %u
quota_grace = 10%%
# 10% es el valor por defecto
quota_status_success = DUNNO
quota_status_nouser = DUNNO
quota_status_overquota = "552 5.2.2 Mailbox is full"
}
service dict {
unix_listener dict {
mode = 0660
user = vmail
group = vmail
}
}
namespace {
type = private
separator = /
prefix =
inbox = yes

mailbox Sent {
auto = subscribe
special_use = \Sent
}
mailbox "Sent Messages" {
auto = no
special_use = \Sent
}
mailbox "Sent Items" {
auto = no
special_use = \Sent
}
mailbox Drafts {
auto = subscribe
special_use = \Drafts
}

mailbox Trash {
auto = subscribe
special_use = \Trash
}
mailbox "Deleted Messages" {
auto = no
special_use = \Trash
}

mailbox Junk {
auto = subscribe
special_use = \Junk
}
mailbox Spam {
auto = no
special_use = \Junk
}
mailbox "Junk E-mail" {
auto = no
special_use = \Junk
}

mailbox Archive {
auto = no
special_use = \Archive
}
mailbox Archives {
auto = no
special_use = \Archive
}
}
protocol lda {
mail_plugins = $mail_plugins
lda_mailbox_autocreate = yes
lda_mailbox_autosubscribe = yes
info_log_path = syslog
log_path = syslog
mail_plugin_dir = /usr/lib/dovecot/modules
mail_plugins = $mail_plugins
postmaster_address = [email protected]
sendmail_path = /usr/lib/sendmail
}
protocol imap {
mail_max_userip_connections = 10
mail_plugin_dir = /usr/lib/dovecot/modules
imap_client_workarounds = tb-extra-mailbox-sep
mail_plugins = $mail_plugins imap_acl
}
protocol pop3 {
mail_plugins = $mail_plugins
pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
pop3_uidl_format = %08Xu%08Xv
mail_max_userip_connections = 10
pop3_logout_format = top=%t/%p, retr=%r/%b, del=%d/%m, size=%s
mail_plugin_dir = /usr/lib/dovecot/modules
mail_plugins = $mail_plugins
}
# Procesos de auth habilitados
service imap-login {
inet_listener imap {
address = *
port = 143
}

inet_listener imaps {
address = *
port = 993
ssl = yes
}
service_count = 1
}
service pop3-login {
inet_listener pop3 {
address = *
port = 110
}

inet_listener pop3s {
address = *
port = 995
}
service_count = 1
}
service imap {
process_limit = 512
vsz_limit = 1 G
}
service pop3 {
process_limit = 512
vsz_limit = 1 G
}
service quota-warning {
executable = script /config/scripts/quota-warning.sh
unix_listener quota-warning {
user = vmail
}
}
service quota-status {
executable = quota-status -p postfix
inet_listener {
port = 12340
}
client_limit = 1
}

Agregando el archivo de configuración para la papelera:

nano /etc/dovecot/trash.conf

Agregue el siguiente contenido:

1 Spam
2 Trash

Reiniciamos el servicio:

systemctl restart dovecot.service

Comprobando el soporte para SSL/TLS para IMAPS:

openssl s_client -servername dovecot.empresa.midominio.cu -connect dovecot.empresa.midominio.cu:imaps

A lo que debe responder, algo similar a lo siguiente:

CONNECTED(00000003)
depth=0 C = CU, ST = HABANA, L = LaHabana, O = EMPRESA, OU = REDES, CN = dovecot.empresa.midominio.cu, emailAddress = [email protected]
verify error:num=18:self signed certificate
verify return:1
depth=0 C = CU, ST = HABANA, L = LaHabana, O = EMPRESA, OU = REDES, CN = dovecot.empresa.midominio.cu, emailAddress = [email protected]
verify return:1
# [...]
+OK Dovecot ready OK+.

Comprobando el soporte para SSL/TLS para POP3S:

openssl s_client -servername dovecot.empresa.midominio.cu -connect dovecot.empresa.midominio.cu:pop3s

A lo que debe responder, algo similar a lo siguiente:

CONNECTED(00000003)
depth=0 C = CU, ST = HABANA, L = LaHabana, O = EMPRESA, OU = REDES, CN = dovecot.empresa.midominio.cu, emailAddress = [email protected]
verify error:num=18:self signed certificate
verify return:1
depth=0 C = CU, ST = HABANA, L = LaHabana, O = EMPRESA, OU = REDES, CN = dovecot.empresa.midominio.cu, emailAddress = [email protected]
verify return:1
# [...]
+OK Dovecot ready OK+.

1.4.2 Creando archivo de control para Dovecot-LDAP

Creando el archivo de conexión con el AD DC:

nano /etc/dovecot/dovecot-ldap.conf

Agregue el siguiente contenido y modifiquesegún sus datos de red:

hosts = dc1.empresa.midominio.cu:389
auth_bind = yes
ldap_version = 3
dn = [email protected]
dnpass = Admin*123
base = OU=Usuarios,DC=empresa,DC=midominio,DC=cu
deref = never
scope = subtree
user_filter = (&(objectClass=person)(mail=%u)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))
user_attrs = =home=/home/vmail/%Ld/%Ln/,=mail=maildir:/home/vmail/%d/%n/Maildir,=quota_rule=*:bytes=%{ldap:physicalDeliveryOfficeName}
pass_filter = (&(objectClass=person)(mail=%u)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))
pass_attrs = userPassword=password
default_pass_scheme = CRYPT

1.4.3. Script “quota-warnings.sh”

Creando script de aviso, en caso que un usuario sobrepase la cuota:

mkdir -p /config/scripts
nano /config/scripts/quota-warning.sh

Agregue el siguiente contenido y modifique lo que aparece resaltado según sus datos de red:

#!/bin/sh
PERCENT=$1
USER=$2
MAILDOMAIN=`/bin/cat /etc/mailname`
cat << EOF | /usr/lib/dovecot/dovecot-lda -d $USER -o "plugin/quota=maildir:User quota:noenforcing"
From: postmaster@$MAILDOMAIN
Subject: Advertencia de cuota por $PERCENT% de uso.

Su buzon solo puede almacenar una cantidad limitada de correo. Actualmente esta al $PERCENT% de su capacidad. Si usted alcanza el 100%, entonces los nuevos correos no podrán ser almacenados.
Gracias por su comprensión.
EOF

Asignando permisos de ejecución al script:

chmod 755 /config/scripts/quota-warning.sh

Integrando Postfix con el sistema de cuotas de Dovecot, integradas al AD DC:

nano /etc/postfix/main.cf

En el apartado “RESTRICCIONES”, el fragmento relacionado con “smtpd_relay_restrictions =” descomentamos la siguiente línea:

# [...]
smtpd_relay_restrictions =
# [...]
check_policy_service inet:127.0.0.1:12340,
# [...]

Recargamos Postfix y reiniciamos Dovecot:

systemctl reload postfix.service
systemctl restart dovecot.service

Las cuotas pueden ser como figuran en los siguientes ejemplos:

  • 520 = 520 KILOBYTE
  • 1M = 1 MEGABYTE
  • 1G = 1 GIGABYTE
  • 0 (SIN CUOTA)

#========================================
NOTA:
En caso de no asignar cuota a algún usuario, tras intentar autenticarse con dicho usuario, nos dará un error de autenticación. En los logs el error de autenticación es reflejado:

LDA([email protected]): Fatal: Failed to initialize quota: Invalid quota root quota: Invalid rule *:bytes=: Invalid bytes limit:

Si se envían correos por IMAP, aún cuando se conecte por POP3, solo se descargarán aquellos correos que se encuentren en la bandeja de entrada y no los enviados. Esto provocara de que, aún se mantengan ocupando espacio en el buzón del usuario y consumiendo parte de su cuota. El usuario debe borrar dichos correos desde el webmail y de su papelera de reciclaje.
#========================================

Se puede prescindir de las RSAT de Windows y agregar la cuota del usuario por comandos de samba, especificando la opción: «–physical-delivery-office=», que corresponde al campo “physicalDeliveryOfficeName”, usando las opciones del comando “samba-tool”. En cambio, si se desea configurar las cuotas, haciendo uso de las RSAT de Windows, basta con ir a la pestaña “General”, en el combo editable “Oficina” y agregar la cuota del usuario.

Si se alcanza alguno de los limites para alerta de quota definidos en dovecot (80% y 90%), desde un cliente configurado por IMAP, como sería por ejemplo en el webmail, debería mostrarnos el siguiente mensaje:

Si se intenta enviar un mensaje que sobrepasa el límite de cuota definido para almacenamiento en el buzón de usuario, aparecerá lo siguiente en los logs del correo:

Mar 21 17:03:30 mail dovecot: LDA([email protected]): [email protected], envelope_sender=MAILER-DAEMON, subject=Rejected: test, msgid=<[email protected]>, size=1828, rejected: Quota exceeded (mailbox for user is full)

El usuario no podrá enviar correos hasta tanto no vacíe espacio en su buzón.

Después del primer inicio de sesión exitoso para los usuarios de correo, si listamos el directorio de los buzones, por ejemplo:

ls /home/vmail/empresa.midominio.cu/

Debería poder aparecer los buzones de los usuarios que lograron iniciar una conexión exitosa por vez primera:

u3apellido usuario1.apellido usuario2

Hasta este punto se tiene configurado Dovecot, con soporte para IMAP, IMAPS, POP3, POP3S y STARTTLS.

 

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

¡Haz clic en una estrella para puntuar!

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

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. Google Chrome 97.0.4692.71 Google Chrome 97.0.4692.71 GNU/Linux x64 GNU/Linux x64
    Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36

    Me pasa lo mismo con los comandos openssl, al final me da error

  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

    Saludos
    Por fin, en lo que se muestra en el comentario anterior, es así

  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

    Da OK, pero también da otros errores cómo se muestra a continuación.
    Favor de decirme si es algo normal.

    openssl s_client -servername dovecot.empresa.midominio.cu -connect dovecot.empresa.midominio.cu:imaps
    #devuelve al final
    read R BLOCK
    * OK [CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID ENABLE IDLE LITERAL+ AUTH=PLAIN AUTH=LOGIN] Dovecot ready OK+.
    * BAD Error in IMAP command received by server.
    * BAD Error in IMAP command received by server.
    * BYE Too many invalid IMAP commands.
    closed

    *******************************************************************

    openssl s_client -servername dovecot.empresa.midominio.cu -connect dovecot.empresa.midominio.cu:pop3s
    #devuelve al final

    read R BLOCK
    +OK Dovecot ready OK+.
    -ERR Unknown command.
    -ERR Unknown command.
    -ERR Unknown command.
    -ERR Too many invalid bad commands.
    closed

    • 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

      No deberia dar error. Espero que estes adaptando a tu dominio y nombres FQDN propios de tu red o al menos, un escenario espejo con respecto al mio.

      • 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

        Sí, lo he adaptado a mi red. de todas formas seguiré probando. Saludos

Responder a Franco Diaz Hurtado Cancelar la respuesta

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


*