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)
- Exim + AD (Ruso): http://www.lissyara.su/?id=1951
- [Exim] Address verification using Active Directory – Summary: https://lists.exim.org/lurker/message/20040819.104458.7e0bc19c.en.html
- Specification of the Exim Mail Transfer Agent: http://www.exim.org/exim-html-current/doc/html/spec_html/index.html
- Exim & Dovecot mailserver with Active Directory: https://inutility.net/exim-dovecot-mailserver-with-active-directory/
- Configure Exim with anti-spam: http://www.freesoftwaremagazine.com/articles/exim_and_anti_spam_spamassassin
- Exim send and receive mail under specific IP address: http://forum.directadmin.com/showthread.php?t=22137&s=043d384407f08b21f817cc836bafe39e
- SMTP AUTH via LDAP: http://www.gossamer-threads.com/lists/exim/users/67977
- The big Exim tutorial: http://www.janoszen.com/2010/03/22/the-big-exim-tutorial/
- EximSmtpAuth: http://wiki.wlug.org.nz/EximSmtpAuth
- Exim as Exchange 2013 front-end server with AD authentication: http://blog.sentico.nl/2014/exim-as-exchange-2013-front-end-server-with-ad-authentication/
- Exim Command-line: http://www.datadisk.co.uk/html_docs/exim/commandline.htm
- [exim] LDAP-DN-Lookups for authenticators: https://lists.exim.org/lurker/message/20060628.083543.58e4e566.en.html
- Blocking outgoing mails to some users in exim: http://serverfault.com/questions/576983/blocking-outgoing-mails-to-some-users-in-exim
- Páginas de manual de Swaks en Linux
- Exim4: Deny outgoing emails with specific destination domains to being sent to the smarthost: http://serverfault.com/questions/623282/exim4-deny-outgoing-emails-with-specific-destination-domains-to-being-sent-to-t
- 3.6.1 ClamAV: http://servidordebian.org/es/squeeze/intranet/antivirus/clamav
- 3.7.1 Spamassassin: http://servidordebian.org/es/squeeze/intranet/antispam/spamassassin
- Exim 4: ACL and others to reject spams: http://www.maretmanu.org/homepage/inform/exim-spam.php
- How to enable SpamAssassin on your server: http://help.directadmin.com/item.php?id=36
- How To Setup Exim, Spamassassin, Clamd, and Dovecot on an Arch Linux VPS: https://www.digitalocean.com/community/tutorials/how-to-setup-exim-spamassassin-clamd-and-dovecot-on-an-arch-linux-vps
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.
🙂