Sistema de Correo Electrónico integrado con un Directorio Activo de Microsoft o Samba 4 de Sernet (Parte IV [Final])

3.5.- MTA o Servidor de Correo que atiende los protocolos IMAP, IMAPS, POP3 y POP3S: Dovecot

Ahora toca el turno al MTA que atiende la gestión de los buzones de correo por parte de los ususarios, o sea, los servicios IMAP y POP3 y sus correspondientes variantes a través de conexiones seguras SSL/TLS.

NOTA: No les voy a negar que mi intención inicial fue usar Courier IMAP en vez de Dovecot, pero al ver que el primero no me trabajaba bien con un Directorio Activo (con OpenLDAP sí trabaja perfecto), tuve que optar por Dovecot.

Primero que todo, debemos instalar los paquetes correspondientes al core del servicio Dovecot y los módulos para lectura de datos en directorios LDAP:

# aptitude install dovecot-common dovecot-core dovecot-imapd dovecot-pop3d dovecot-ldap

En el caso  del Dovecot, la configuración es un poquito más compleja de lo habitual, dado que hay que establecer dos archivos, uno con las configuraciones generales, y otro con la configuración de la conexión o binding al Servidor de Directorio del Samba 4 Active Directory (ya sea al servicio LDAP o al Catálogo Global).

Ahora procederemos a explicar algunos aspectos de la configuración de la misma forma como la hicimos en el epígrafe anterior. Por lo tanto, se aplican las mismas características y aclaraciones.

El contenido de dichos archivos de configuración son los siguientes:

/etc/dovecot/dovecot.conf:

protocols = imap pop3

 

service imap {

    inet_listener = *:143

}

 

service pop3 {

    inet_listener = *:110

}

 

auth_username_chars = abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@

 

auth_username_format = %Lu

auth_mechanisms = plain login cram-md5

auth_debug = yes

auth_debug_passwords = yes

auth_verbose = yes

 

mail_debug = yes

verbose_proctitle = yes

verbose_ssl = no

 

mail_location = maildir:/srv/services/vmail/%Ld/%Ln/Maildir

 

mail_uid=vmail

mail_gid=vmail

 

first_valid_uid = 5000

last_valid_uid = 5000

 

first_valid_gid = 5000

last_valid_gid = 5000

 

valid_chroot_dirs = /srv/services/vmail

 

disable_plaintext_auth=yes

 

mbox_write_locks = fcntl

 

passdb {

    driver = ldap

    args = /etc/dovecot/dovecot-ldap.conf

}

 

userdb {

    driver = ldap

    args = /etc/dovecot/dovecot-ldap.conf

}

 

service imap-login {

process_min_avail = 1

}

 

service pop3-login {

process_min_avail = 1

}

 

service auth {

unix_listener auth-client {

mode = 0660

group = Debian-exim

}

 

unix_listener auth-master {

mode = 0660

group = Debian-exim

}

}

 

ssl = required

ssl_cert = </etc/exim4/ssl/certs/karas.co.cu.pem

ssl_key = </etc/exim4/ssl/certs/karas.co.cu.pem

 

protocol imap {

mail_max_userip_connections = 10

imap_idle_notify_interval = 2 mins

}

 

protocol pop3 {

mail_max_userip_connections = 10

imap_idle_notify_interval = 2 mins

}

 

log_path = /var/log/dovecot.log

info_log_path = /var/log/dovecot-info.log

debug_log_path = /var/log/dovecot-debug.log

 

syslog_facility = local7

 

/etc/dovecot/dovecot-ldap.conf:

 

hosts = pdc-karas.karas.co.cu:3268

ldap_version = 3

auth_bind = yes

 

dn = CN=vmail,CN=Users,DC=karas,DC=co,DC=cu

dnpass = <Contraseña>

base = OU=KARAS Project,DC=karas,DC=co,DC=cu

scope = subtree

deref = never

 

user_attrs = =home=/srv/services/vmail/%Ld/%Ln/Maildir/,=mail=maildir:/srv/services/vmail/%Ld/%Ln/Maildir/

user_filter = (&(|(objectClass=person)(objectClass=user))(sAMAccountType=805306368)(&(memberOf=CN=Mail Service Allowed Users,CN=Users,DC=karas,DC=co,DC=cu)(!(memberOf=CN=Mail Service Denied Users,CN=Users,DC=karas,DC=co,DC=cu)))(userPrincipalName=%u))

 

pass_attrs = userPrincipalName=user

pass_filter = (&(|(objectClass=person)(objectClass=user))(sAMAccountType=805306368)(&(memberOf=CN=Mail Service Allowed Users,CN=Users,DC=karas,DC=co,DC=cu)(!(memberOf=CN=Mail Service Denied Users,CN=Users,DC=karas,DC=co,DC=cu)))(userPrincipalName=%u))

 

default_pass_scheme = CRAM-MD5

 

Las explicaciones correspondientes de los parámetros resaltados vienen a continuación:

 

  • Definición de las interfaces de red y puertos que estarán a la escucha de los servicios IMAP y POP3

 

protocols = imap pop3

service imap {

    inet_listener = *:143

}

service pop3 {

   inet_listener = *:110

}

En el caso que nos cupa, todas las interfaces de red del servidor (tanto, la Localhost [lo], como las Ethernets [ethX]) escucharán por los puertos 110/tcp y 143/tcp, y si se activa la característica de conexión segua a través de SSL/TLS, pues, escucharán también por los puertos 993/tcp y 995/tcp.

  • Definición de las características iniciales de la autenticación de usuarios

 

Aquí se especifica cuales serán los caracteres que se consideran válidos en el nombre de cuenta de usuario:

auth_username_chars = abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@

Aquí se especifica el formato del nombre de usuario, o sea, independiendemente de como se introduzca, se convertirá a minúsculas todo:

auth_username_format = %Lu

Aquí se especifican los mecanismos de autenticación que se utilizarán, en nuestro caso serán 3:

auth_mechanisms = plain login cram-md5

  • Definición de los diferentes tipos de registros que se generarán y los archivos locales donde se guardarán

 

auth_debug = yes

auth_debug_passwords = yes

auth_verbose = yes

mail_debug = yes

log_path = /var/log/dovecot.log

info_log_path = /var/log/dovecot-info.log

debug_log_path = /var/log/dovecot-debug.log

Aquí hay que tener especial cuidado en cuanto a los registros ue se van a guardar, dado que si se eleva el nivel de verbosidad del log, puede correrse el riesgo de que también se guarden las contraseñas en texto claro de los usuarios. Por  lo tanto, este log debe guardarse bajo un estricto nivel de seguridad y confidencialidad para evitar accesos no autorizados.

  • Definición de la carpeta o subdirectorio raíz donde se guardarán los buzones de los usuarios de correo electrónico

 

Antes de seguir con la explicación de este punto, hay que realizar algunos pasos previos para que esta parte de la configuración de Dovecot funcione adecuadamente.

Primero que todo, es recomendable destinar o una partición del disco duro, u otro disco duro para almacenar los buzones de los usuarios, dado que esta es la parte más crítica del sistema de correo electrónico; y una vez que se garantice ese recurso, pues, se pasa a crear dicha carpeta o subdirectorio raíz, o sea, /srv/services/vmail.

La vía más sencilla es creando primeramente el grupo al que pertenecerá el usuario, y luego crear el usuario (si se realizó este paso en el epígrafe donde hablamod del MTA Exim, estos pasos no son necesarios).

El grupo se crea de la siguiente manera:

# groupadd -g 5000 vmail

Y el usuario de esta manera:

# useradd -u 5000 -g 5000 -c “Usuario del Sistema de Correo Electrónico” -s /bin/false -d /srv/services/vmail vmail

Al cual, por supuesto, hay que establecerle una contraseña lo más compleja posible aunque no se utilice directamente este usuario para autenticarse en el servidor localmente.

Así tendremos las condiciones iniciales completadas para el funcionamiento correcto del servicio. Así que seguimos con las explicaciones.

Aquí se especifica que el buzón del usuario se encontrará en la ubicación /srv/services/vmail/<Dominio de la cuenta de usuario en minúsculas>/<Nombre de usuario en minúsculas (o sea, lo que está delante de la @)>/Maildir:

mail_location = maildir:/srv/services/vmail/%Ld/%Ln/Maildir

En el caso del uso de usuarios virtuales, todos ellos usarán un mismo UID/GID de usuario del sistema, lo cual se establece mediante los parámetros mail_uid y mail_gid como se ve a continuación:

mail_uid=vmail

mail_gid=vmail

first_valid_uid = 5000

last_valid_uid = 5000

first_valid_gid = 5000

last_valid_gid = 5000

Y la carpeta o subdirectorio base que se considera válido para el trabajo de Dovecot:

valid_chroot_dirs = /srv/services/vmail

  • Evitar la autenticación con contraseña en texto plano

 

disable_plaintext_auth=yes

Esto por si hay algún gracioso sniffeando la red en busca de contraseñas de incautos para luego hacer un uso indebido de los datos robados

  • Definición del almacén de cuentas de usuarios y contraseñas de donde se extraerán los datos para la autenticación

 

En nuestro caso, dicho almacén se encuentra dentro del Directorio Activo o servidor de directorios:

passdb {

    driver = ldap

    args = /etc/dovecot/dovecot-ldap.conf

}

userdb {

    driver = ldap

    args = /etc/dovecot/dovecot-ldap.conf

}

 

  • Activación de la característica de conexiones seguras SSL/TLS de Dovecot

 

Como paso previo a la habilitación de esta característica, se requiere tener de antemano los archivos de certificado y llave privada SSL, ya sea en archivos separados o en un solo archivo:

ssl = required

ssl_cert = </etc/exim4/ssl/certs/karas.co.cu.pem

ssl_key = </etc/exim4/ssl/certs/karas.co.cu.pem

Hasta aquí la explicación de los elementos más importantes en el archivo de configuración principal de Dovecot.

Ahora damos paso a la configuración del almacén de cuentas de usuarios y contraseñas, el cual, como se dijo anteriormente, está dentro del Directorio Activo o servidor de directorios.

  • Datos generales para la autenticación contra el Directorio Activo

 

Aquí se definen los parámetros generales para que Dovecot pueda acceder a los datos del Directorio Activo. Estos son los siguientes:

hosts = pdc-karas.karas.co.cu:3268

ldap_version = 3

auth_bind = yes

dn = CN=vmail,CN=Users,DC=karas,DC=co,DC=cu

dnpass = <Contraseña>

base = OU=KARAS Project,DC=karas,DC=co,DC=cu

scope = subtree

deref = never

Y luego los atributos que se devolverán a Dovecot (el camino al buzón del usuario dentro del servidor de correo), así como el filtro de búsqueda de las cuentas de usuario en el directorio:

user_attrs = =home=/srv/services/vmail/%Ld/%Ln/Maildir/,=mail=maildir:/srv/services/vmail/%Ld/%Ln/Maildir/

user_filter = (&(|(objectClass=person)(objectClass=user))(sAMAccountType=805306368)(&(memberOf=CN=Mail Service Allowed Users,CN=Users,DC=karas,DC=co,DC=cu)(!(memberOf=CN=Mail Service Denied Users,CN=Users,DC=karas,DC=co,DC=cu)))(userPrincipalName=%u))

pass_attrs = userPrincipalName=user

pass_filter = (&(|(objectClass=person)(objectClass=user))(sAMAccountType=805306368)(&(memberOf=CN=Mail Service Allowed Users,CN=Users,DC=karas,DC=co,DC=cu)(!(memberOf=CN=Mail Service Denied Users,CN=Users,DC=karas,DC=co,DC=cu)))(userPrincipalName=%u))

En donde los argumentos %Ld y %Lu significan el nombre del dominio y nombre de usuarios, los dos en minúsculas; y %u la dirección de correo electrónico del usuario que intenta autenticarse ante Dovecot.

Por último se especifica el esquema o método en el que trabajará con las contraseñas, donde, evidentemente, no debe viajar en texto plano por la red:

default_pass_scheme = CRAM-MD5

 

Conclusiones

Hasta aquí el contenido de este manual. En él hemos visto la configuración de un Sistema de Correo Electrónico con Exim 4 integrado con un Directorio Activo de Microsoft o Samba 4 de Sernet. Se describieron lo mejor posible los pasos a seguir para tener completado todo el proceso.

No obstante, de existir modificaciones, se irán añadiendo más adelante.

 

Bibliografía

  • Archivos de configuración de Exim (que datan de 2006) proporcionados por los Administradores de Infomed en el Taller Nacional de Administradores de Nodos Provinciales celebrado en 2009, los cuales fueron la fuente de inspiración para la creación de esta variante de configuración de Exim y posterior confección de este manual.
  • Ejemplo de configuración de Exim + MySQL de un ruso (no recuerdo exactamente desde cuando lo tengo, pero lo enmarco en la segunda quincena de 2008)

 

Espero les sea de utilidad. No obstante, si se puede mejorar, se escuchan proposiciones. 😀

Ah, se me olvidaba, no es que haya dejado de lado los grupos “Mail Service Disabled Users” y “Mail Service Disabled Organizations”, es que los dejo de tarea para los que estén interesados.

Y ahora sí, FIN.

🙂

 

Acerca de Hector Suarez Planas

Es Licenciado en Ciencia de la Computación (3 de julio de 2002). Ha sido Administrador de Red en varias organizaciones, Programador y Analista de Sistemas. Actualmente se desempeña como Administrador de Red del Telecentro Tele Turquino de Santiago de Cuba. Tiene experiencia con sistemas Windows y GNU/Linux, Infraestructura de Redes (Cisco, AlliedTelesis, Netgear y HP ProCurve, Vyatta/VyOS), Servidores tanto físicos como virtuales (plataformas VMWare, Proxmox VE y Xen), Sistemas de Seguridad Informática (Snort/Suricata IDS, appliances AlienVault OSSIM), programador (Delphi, C++ Builder, Perl [poco], Python [algo]), entre otras cosas. Actualmente estoy incursionando en todo lo que tiene relación con Cloud Computing (OpenStack) y Centros de Datos. :-)
Esta entrada fue publicada en Antivirus, Clamav, Correo Electrónico, Debian, Directorio Activo, Exim, Filtro Antispam, Linux, MTA, Spamassassin. Guarda el enlace permanente.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *