Configuración del Correo
C@mpus - @cademia Linux

Introducción

Los servicios que contendrá el servidor de correo en LXE podrán separarse en las siguientes categorías:

POP, PostOffice Protocol que es el protocolo para leer correo más utilizado actualmente. La función especifica de este servicio es únicamente la entrega de los mensajes y la administración de los mismos es delegada al cliente. LinuXchangE no recomienda el uso de POP, por lo tanto la implementación de este protocolo no estará explicada en este artículo.

IMAP, Internet Mail Access Protocol es una versión mucho más completa que el propio POP, permitiendo mantener sincronizaciones entre servidores y clientes, compartir diferentes buzones entre usuarios. Este tipo de servicio esta recomendado para usuarios móviles puesto que los mensajes aparte de recibir una copia en el cliente local, el servidor mantiene otra. La administración de la correspondencia es delegada al servidor.

SMTP, Simple Mail Transfer Protocol es el servicio que se encarga de realizar la entrega de los mensajes. Su configuración tiende a ser en muchas ocasiones complicada por la configuración de Listas Negras, Aliases, Reglas de Relay locales entre otros servicios personalizables.

WEBMail, Este servicio proporciona a usuarios poder tener lectura a su correo desde un navegador. Utilizaremos SquirrelMAIL para estos fines. Auque cualquier WEBMail que cumpla con los requisitos de soportar IMAP y libreta de direcciones LDAP funcionará.


Paquetes necesarios

  • Postfix > 2.3
  • Courier >= 4.1.1
  • Courier-Authlib >= 0.58

Configuración

La siguiente configuración indicará como configurar tanto Postfix como Courier IMAP para poder funcionar como servidor de correo electrónico con las siguientes características básicas:

  • Utilización de buzones de tipo Maildir
  • Control del relay

Postfix 

La utilización de LXE de Postfix sobre otro MTA como sendmail y qmail es muy evidente. Postfix contiene muchas ventajas entre las que destacan la legibilidad de su archivo de configuración main.cf, soporte para buzones virtuales (que no es utilizado en esta solución) a demás de tener mejores implementaciones lo que implica mayor seguridad.

Para el correcto funcionamiento de Postfix, este deberá ser compilado con soporte para LDAP. La distribución Mandriva que es la utilizada oficialmente, contiene esto precompilado en sus paquetes.

Para que cualquier cambio en el archivo tenga efecto habrá que reiniciar el servicio con el comando:

service postfix restart

o

postfix reload


main.cf 

La configuración de el MTA puede ser de dos formas: estática y dinámica. Entenderemos por estática la configuración en donde los datos estén inscritos directamente y como dinámica las opciones en dónde se dependa del directorio para su lectura (las opciones son cambiadas en tiempo real y su efecto se aplica al instante).

En equipos con capacidad pequeña y/o configuración no variable se recomienda ejecutar la configuración estática por razones de rendimiento.

Los siguiente recuadros indican los valores que se tendrán que añadir o modificar para cada una de las configuraciones:

main.cf
queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/lib/postfix
mail_owner = postfix
inet_interfaces = all#inet_interfaces = $myhostname
mydestination = $myhostname, localhost.$mydomain, localhost# , $mydomain
unknown_local_recipient_reject_code = 550
mynetworks = 127.0.0.0/8, 192.168.0.0/16, 200.38.165.33/32

alias_maps = ldap:/etc/postfix/ldap-aliases.cf, ldap:/etc/postfix/ldap-alias-group.cf
home_mailbox = Maildir/
debug_peer_level = 2
debugger_command =         PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
         xxgdb $daemon_directory/$process_name $process_id & sleep 5

sendmail_path = /usr/sbin/sendmail.postfix
newaliases_path = /usr/bin/newaliases
mailq_path = /usr/bin/mailq
setgid_group = postdrop
html_directory = /usr/share/doc/postfix-2.3.4/html
manpage_directory = /usr/share/man
sample_directory = /usr/share/doc/postfix-2.3.3/
readme_directory = /usr/share/doc/postfix-2.3.4/README_FILES
virtual_alias_maps = ldap:/etc/postfix/ldap-virtuals.cf
smtpd_helo_required = yes
disable_vrfy_command = yes
smtpd_delay_reject = yes

smtpd_restriction_classes = someoutside-to, onlyinside-to, bannedusers-to, someoutside-from, onlyinside-from, bannedusers-from


someoutside-to  =       check_recipient_access ldap:/etc/postfix/ldap-relay-class-someoutside-to.cf,
                reject_unauth_destination
onlyinside-to  =        check_recipient_access ldap:/etc/postfix/ldap-relay-class-onlyinside-to.cf,
                reject
bannedusers-to =        check_recipient_access ldap:/etc/postfix/ldap-relay-class-bannedusers-to.cf,
                permit

someoutside-from  =     check_sender_access ldap:/etc/postfix/ldap-relay-class-someoutside-from.cf,
                reject_unauth_destination
onlyinside-from  =      check_sender_access ldap:/etc/postfix/ldap-relay-class-onlyinside-from.cf,
                reject
bannedusers-from =      check_sender_access ldap:/etc/postfix/ldap-relay-class-bannedusers-from.cf,
                permit


smtpd_recipient_restrictions =
        check_recipient_access ldap:/etc/postfix/ldap-relay-toin.cf,
        check_sender_access ldap:/etc/postfix/ldap-relay-fromin.cf,
        permit_sasl_authenticated,
        reject_unauth_destination

smtpd_sender_restrictions =
        check_recipient_access ldap:/etc/postfix/ldap-relay-toout.cf,
        check_sender_access ldap:/etc/postfix/ldap-relay-fromout.cf,
        permit
#       reject_unauth_destination


smtpd_sasl_auth_enable = yes
smtpd_sasl_authenticated_header = yes
broken_sasl_auth_clients = yes
smtpd_sasl_application_name = smtpd
smtpd_sasl_path = smtpd
smtp_sasl_mechanism_filter = plain, login
smtpd_sasl_security_options = noanonymous

ldap:/etc/postfix/ldap-alias-group.cfsyslog_name = postfix
global_config_directory = /etc/postfix

local_header_rewrite_clients = static:all
virtual_mailbox_base = /
virtual_mailbox_maps = ldap:/etc/postfix/accounts.cf
virtual_mailbox_domains = linuxchange.com
virtual_maps = ldap:/etc/postfix/accountsmap.cf
virtual_minimum_uid = 7
virtual_uid_maps = static:8
virtual_gid_maps = static:12
virtual_transport = virtual

El parámetro mydestination indica a Postfix sobre qué dominios podrá recibir correo electrónico. Debido a sus capacidades de multi-dominios. Como al menos se deberá poder capturar los mensajes entrantes del dominio oficial de la organización en donde se hospeda la Organización.  Como LinuXchangE manejará las cuentas @linuxchange.com (del ejemplo) como usuarios virtuales este parámetro no tiene indicado linuxchange.como como valor.  El parámetro virtual_mailbox_domains deberá contener el valor linuxchange.com.

Le pasaremos a mynetworks todas las redes de donde los clientes podrán hacer RELAY directamente. La notación que se deberá utilizar será en CIDR y se podrán especificar cuantas sean necesarias. El parámetro 0.0.0.0/0 o 0/0 para indicar a todo mundo está prohibido por motivos de seguridad. En servidores públicos hay que tener mucho cuidado con este parámetro.

El valor que contiene el parámetro mail_spool_directory indica a Postfix en donde almacenará los buzones por defecto de los usuarios que contiene. Este valor en muchos casos puede ser /var/mail pero LXE lo buscara en /var/spool/mail. El directorio debe tener permisos de escritura para el usuario root y el grupo mail con el bit sgid activado y sólo lectura para el resto de los usuarios (modo 2775).

Los parámetros ldap_timeout, ldap_search_base, ldap_server_host, ldap_server_port, ldap_querry_filter y ldap_scope indican el tiempo de espera en segundos, la ruta base de las búsquedas del directorio, IP del servidor LDAP, puerto del servicio, filtro a buscar por defecto y alcance de la búsqueda respectivamente. El tipo de estos valores se puede encontrar en la sección anterior referente a la configuración común y del servidor LDAP.

La opción disable_vrfy_command indica como su nombre lo indica deshabilitar el comando VRFY que permite determinar si un correo existe o no en tal servidor. Aunque opcional, se recomienda que este valor este activado siempre.

Los valores que se le pasan a los parámetros message_size_limit, mailbox_size_limit, bounce_size_limit indican el tamaño en bytes que podrán tener un correo electrónico enviado, el buzón de entrada por usuario y los mensajes de error que se le envíen al POST-MASTER. Es importante tener en cuenta que el valor de mailbox_size_limit deberá ser igual o mayor al indicado por el de message_size_limit de lo contrario las bitácoras y los correos no podrán ser recibidos.

El parámetro qmgr_message_active_limit indica cuantos correos podrán estar en cola de espera para ser enviados. Tenga en cuenta que este valor debe de ser generoso sobre todo cuando se es víctima de usuarios que envían correo masivos.

La línea relay_hosts indica al MTA sobre a qué dominios se les permitirá hacer la inyección de correo ya sea como destinatario o remitente. De esta forma no importará quién se conecte siempre y cuando se conecté para realizar alguna tarea a estos dominios.

Los siguientes archivos de configuración deben existir para permitir la utilización de los dominios virtuales. 

/etc/postfix/accounts.cf
server_host = 127.0.0.1
search_base = ou=People,dc=linuxchange,dc=com
server_port = 389
timeout = 100
query_filter = (&(objectClass=CourierMailAccount)(uid=%s))
result_attribute = mailbox
result_format  =  %s
bind = no
scope = one
version = 2

El archivo accounts.cf se utiliza para poder localizar el buzón de estilo Maildir en dónde se depositarán los datos.  El valor de esta propiedad deberá tener una ruta absoluta al directorio especificado que deberá ser el mismo que se especifico en el parámetro home_mailbox del archivo main.cf.

/etc/postfix/accountsmap.cf
server_host = 127.0.0.1
search_base = ou=People,dc=linuxchange,dc=com
server_port = 389
timeout = 100
query_filter = (&(objectClass=CourierMailAccount)(uid=%s))
result_attribute = mail
bind = no
scope = one
version = 2

El archivo accountsmap.cf permite realizar una realación de nombre de usuario con el correo completo a este.

Alias 

Hasta ahora, sólo se han migrado los aliases al directorio con los procedimientos especificados en la sección para el servidor LDAP pero no se ha dado parte a Postfix para que tome ventaja de todos estos datos. Desde la aparción de postfix 2.2 la forma de incluir estos datos se ha modularizado en archivos separados, aunque la forma tracional de las versiones anteriores es compatible, se recomienda el uso de esta.  Para esto se añadirá o modificará las siguientes líneas al archivo main.cf.

/etc/postfix/main.cf (parcial)
alias_maps = ldap:/etc/postfix/ldap-aliases.cf, ldap:/etc/postfix/ldap-alias-group.cf

Y crear el archivo ldap-aliases.cf.

/etc/postfix/ldap-aliases.cf

server_host = 127.0.0.1
search_base = ou=Aliases,dc=linuxchange,dc=com
server_port = 389
timeout = 100
query_filter = cn=%s
result_attribute = rfc822MailMember
bind = no
scope = one
version = 2

La línea alias_maps indica a Postfix de dónde va a buscar y por qué medio los datos de los aliases. En este caso la parte izquierda a los dos puntos indica el tipo de fuente y la derecha el nombre de la fuente que será arbitrario. En este ejemplo se llamará ldapalias. Múltiples fuentes pueden ser listadas separadas por comas.

Los parámetros especificados en el archivo ldap-aliases.cf indican los datos de la conexión al directorio LDAP.


Relay 

El principal propósito de poner unas reglas de RELAY local será para negar mensajería de sitios o correos muy específicos.

La implantación de este mecanismo requiere de unos schemas no convencionales que no se incluyen en el paquete OpenLDAP por defecto. Se podrán adquirir buscando en la red el archivo sendmail.schemma o en el paquete de esta solución vendrá incluido.

Antes que nada habrá que configurar el archivo main.cf añadiendo o modificando las siguientes líneas:

Configuración dinámica de relay
smtpd_restriction_classes = someoutside-to, onlyinside-to, bannedusers-to,
         someoutside-from, onlyinside-from, bannedusers-from


someoutside-to  =       check_recipient_access ldap:/etc/postfix/ldap-relay-class-someoutside-to.cf,
                reject_unauth_destination
onlyinside-to  =        check_recipient_access ldap:/etc/postfix/ldap-relay-class-onlyinside-to.cf,
                reject
bannedusers-to =        check_recipient_access ldap:/etc/postfix/ldap-relay-class-bannedusers-to.cf,
                permit

someoutside-from  =     check_sender_access ldap:/etc/postfix/ldap-relay-class-someoutside-from.cf,
                reject_unauth_destination
onlyinside-from  =      check_sender_access ldap:/etc/postfix/ldap-relay-class-onlyinside-from.cf,
                reject
bannedusers-from =      check_sender_access ldap:/etc/postfix/ldap-relay-class-bannedusers-from.cf,
                permit

smtpd_recipient_restrictions =
        check_recipient_access ldap:/etc/postfix/ldap-relay-toin.cf,
        check_sender_access ldap:/etc/postfix/ldap-relay-fromin.cf,
        permit_sasl_authenticated,
        reject_unauth_destination

smtpd_sender_restrictions =
        check_recipient_access ldap:/etc/postfix/ldap-relay-toout.cf,
        check_sender_access ldap:/etc/postfix/ldap-relay-fromout.cf,
        permit

El parámetro smtpd_client_restrictions indica a Postfix de dónde buscara las reglas para permitir la llegada del correo.  Por defecto existirán las categorías someoutside-to/from, onlyinside-to/from y bannedusers-to/from. Cada una de estas con permisos específicos según el siguiente LDIF.

Una vez realizada esto el sistema estará listo para recibir reglas. Estás podrán hacerse utilizando los comandos de LDAP directamente creando un archivo LDIF con la siguiente estructura:

Estructura LDIF
dn: ou=Relay,dc=linuxchange,dc=com
objectClass: top
objectClass: organizationalUnit
objectClass: domainRelatedObject
ou: Relay
associatedDomain: linuxchange.com

dn: sendmailMTAKey=linuxchange.com,sendmailMTAClassName=onlyinside-from,ou=Re
 lay,dc=linuxchange,dc=com
objectClass: top
objectClass: domainRelatedObject
objectClass: sendmailMTA
objectClass: sendmailMTAAlias
objectClass: sendmailMTAAliasObject
associatedDomain: linuxchange.com
sendmailMTAAliasValue: OK
sendmailMTAKey: linuxchange.com

dn: ou=ToIn,ou=Relay,dc=linuxchange,dc=com
objectClass: top
objectClass: organizationalUnit
objectClass: domainRelatedObject
associatedDomain: linuxchange.com
ou: ToIn

dn: ou=ToOut,ou=Relay,dc=linuxchange,dc=com
objectClass: top
objectClass: organizationalUnit
objectClass: domainRelatedObject
ou: ToOut
associatedDomain: linuxchange.com

dn: ou=FromIn,ou=Relay,dc=linuxchange,dc=com
objectClass: top
objectClass: organizationalUnit
objectClass: domainRelatedObject
ou: FromIn
associatedDomain: linuxchange.com

dn: ou=FromOut,ou=Relay,dc=linuxchange,dc=com
objectClass: top
objectClass: organizationalUnit
objectClass: domainRelatedObject
ou: FromOut
associatedDomain: linuxchange.com

dn: sendmailMTAKey=linuxchange.com,ou=FromIn,ou=Relay,dc=linuxchange,dc=com
objectClass: top
objectClass: domainRelatedObject
objectClass: sendmailMTA
objectClass: sendmailMTAAlias
objectClass: sendmailMTAAliasObject
associatedDomain: linuxchange.com
sendmailMTAKey: linuxchange.com
sendmailMTAAliasValue: OK

dn: sendmailMTAKey= Esta dirección electrónica esta protegida contra spambots. Es necesario activar Javascript para visualizarla ,ou=FromIn,ou=Relay,dc=linuxchange,dc=
 com
objectClass: top
objectClass: domainRelatedObject
objectClass: sendmailMTA
objectClass: sendmailMTAAlias
objectClass: sendmailMTAAliasObject
associatedDomain: linuxchange.com
sendmailMTAKey: Esta dirección electrónica esta protegida contra spambots. Es necesario activar Javascript para visualizarla
sendmailMTAAliasValue: bannedusers-to

dn: sendmailMTAKey= Esta dirección electrónica esta protegida contra spambots. Es necesario activar Javascript para visualizarla ,ou=ToIn,ou=Relay,dc=linuxchange,dc=co
 m
objectClass: top
objectClass: domainRelatedObject
objectClass: sendmailMTA
objectClass: sendmailMTAAlias
objectClass: sendmailMTAAliasObject
associatedDomain: linuxchange.com
sendmailMTAKey: Esta dirección electrónica esta protegida contra spambots. Es necesario activar Javascript para visualizarla
sendmailMTAAliasValue: bannedusers-from

dn: sendmailMTAKey=linuxchange.com,sendmailMTAClassName=onlyinside-to,ou=Rela
 y,dc=linuxchange,dc=com
objectClass: top
objectClass: domainRelatedObject
objectClass: sendmailMTA
objectClass: sendmailMTAAlias
objectClass: sendmailMTAAliasObject
associatedDomain: linuxchange.com
sendmailMTAAliasValue: OK
sendmailMTAKey: linuxchange.com

dn: sendmailMTAClassName=onlyinside-from,ou=Relay,dc=linuxchange,dc=com
objectClass: top
objectClass: domainRelatedObject
objectClass: sendmailMTA
objectClass: sendmailMTAClass
associatedDomain: linuxchange.com
sendmailMTAClassName: onlyinside-from

dn: sendmailMTAClassName=onlyinside-to,ou=Relay,dc=linuxchange,dc=com
objectClass: top
objectClass: domainRelatedObject
objectClass: sendmailMTA
objectClass: sendmailMTAClass
associatedDomain: linuxchange.com
sendmailMTAClassName: onlyinside-to

dn: sendmailMTAClassName=bannedusers-from,ou=Relay,dc=linuxchange,dc=com
objectClass: top
objectClass: domainRelatedObject
objectClass: sendmailMTA
objectClass: sendmailMTAClass
associatedDomain: linuxchange.com
sendmailMTAClassName: bannedusers-from

dn: sendmailMTAClassName=bannedusers-to,ou=Relay,dc=linuxchange,dc=com
objectClass: top
objectClass: domainRelatedObject
objectClass: sendmailMTA
objectClass: sendmailMTAClass
associatedDomain: linuxchange.com
sendmailMTAClassName: bannedusers-to

dn: sendmailMTAClassName=someoutside-from,ou=Relay,dc=linuxchange,dc=com
objectClass: top
objectClass: domainRelatedObject
objectClass: sendmailMTA
objectClass: sendmailMTAClass
associatedDomain: linuxchange.com
sendmailMTAClassName: someoutside-from

dn: sendmailMTAClassName=someoutside-to,ou=Relay,dc=linuxchange,dc=com
objectClass: top
objectClass: domainRelatedObject
objectClass: sendmailMTA
objectClass: sendmailMTAClass
associatedDomain: linuxchange.com
sendmailMTAClassName: someoutside-to

dn: sendmailMTAKey=linuxchange.com,sendmailMTAClassName=someoutside-from,ou=R
 elay,dc=linuxchange,dc=com
objectClass: top
objectClass: domainRelatedObject
objectClass: sendmailMTA
objectClass: sendmailMTAAlias
objectClass: sendmailMTAAliasObject
associatedDomain: linuxchange.com
sendmailMTAKey: linuxchange.com
sendmailMTAAliasValue: OK

dn: sendmailMTAKey=linuxchange.com,sendmailMTAClassName=someoutside-to,ou=Rel
 ay,dc=linuxchange,dc=com
objectClass: top
objectClass: domainRelatedObject
objectClass: sendmailMTA
objectClass: sendmailMTAAlias
objectClass: sendmailMTAAliasObject
associatedDomain: linuxchange.com
sendmailMTAKey: linuxchange.com
sendmailMTAAliasValue: OK

dn: sendmailMTAKey=okay.com.mx,sendmailMTAClassName=someoutside-from,ou=Relay
 ,dc=linuxchange,dc=com
objectClass: top
objectClass: domainRelatedObject
objectClass: sendmailMTA
objectClass: sendmailMTAAlias
objectClass: sendmailMTAAliasObject
associatedDomain: linuxchange.com
sendmailMTAKey: okay.com.mx
sendmailMTAAliasValue: OK

dn: sendmailMTAKey=okay.com.mx,sendmailMTAClassName=someoutside-to,ou=Relay,d
 c=linuxchange,dc=com
objectClass: top
objectClass: domainRelatedObject
objectClass: sendmailMTA
objectClass: sendmailMTAAlias
objectClass: sendmailMTAAliasObject
associatedDomain: linuxchange.com
sendmailMTAKey: okay.com.mx
sendmailMTAAliasValue: OK

dn: sendmailMTAKey= Esta dirección electrónica esta protegida contra spambots. Es necesario activar Javascript para visualizarla ,sendmailMTAClassName=bannedusers-from,o
 u=Relay,dc=linuxchange,dc=com
objectClass: top
objectClass: domainRelatedObject
objectClass: sendmailMTA
objectClass: sendmailMTAAlias
objectClass: sendmailMTAAliasObject
associatedDomain: linuxchange.com
sendmailMTAAliasValue: REJECT
sendmailMTAKey: Esta dirección electrónica esta protegida contra spambots. Es necesario activar Javascript para visualizarla

dn: sendmailMTAKey= Esta dirección electrónica esta protegida contra spambots. Es necesario activar Javascript para visualizarla ,sendmailMTAClassName=bannedusers-to,ou
 =Relay,dc=linuxchange,dc=com
objectClass: top
objectClass: domainRelatedObject
objectClass: sendmailMTA
objectClass: sendmailMTAAlias
objectClass: sendmailMTAAliasObject
associatedDomain: linuxchange.com
sendmailMTAAliasValue: REJECT
sendmailMTAKey: Esta dirección electrónica esta protegida contra spambots. Es necesario activar Javascript para visualizarla  

Una vez teniendo fichas de esta forma añadirlo con el comando ldapadd realizará que la regla se de de alta. Hay que observar que el atributo sendmailMTAMap empieza con un número que es código de error. Este ejemplo ilustra negación de mensaje.

La propiedad sendmailMTAKey contendrá el nombre del remitente/destinatario a aplicarle la regla.  Los valores podrán ser sólo el dominio (dividido en tokens) o el usuario seguido de la @.  Para bloquear el usuario Esta dirección electrónica esta protegida contra spambots. Es necesario activar Javascript para visualizarla postfix ejecutará las siguientes búsquedas en el siguiente orden:

  1. Esta dirección electrónica esta protegida contra spambots. Es necesario activar Javascript para visualizarla
  2. okay.com.mx
  3. com.mx
  4. mx
  5. dlucio2@

La búsqueda se dentendrá al encontrar la primer concidencia.

La propiedad sendmailMTAAliasValue contendrá la acción a realizar, convalores númericos según el código MIME o las palabras reservadas ACCEPT y REJECT.  


UCE 

Una lista negra es un servicio que se ofrece para evitar la utilización de correo electrónico incorrecta. Su función principal es dar a enterar a servidores de correo qué servidores son utilizados para realizar SPAM y así tomar acciones debidas. En este caso se rechazará cualquier correo que provenga de un remitente catalogado como spammer.

Se recomienda leer la sección de anti-uce para su correcta configuración.

Para realizar esto habrá que modificar o añadir las siguientes líneas al archivo main.cf:

RBL's
maps_rbl_domains = relays.mail-abuse.org, rbl.maps.vix.com, dul.maps.vix.com, relays.ordb.org, bl.spamcop.net, spew.relays.osirusoft.com

smtpd_delay_reject = yes
smtpd_client_restrictions = check_sender_access ldap:global_access, reject_maps_rbl, permit

Los valores que se le pasan al parámetro maps_rbl_domains indica los servidores donde se hará las relaciones de servidores/remitentes de spam. Aquí se podrán listar cuantas sean necesarias.

El parámetro smptd_delay_reject le indica a postfix que tendrá que hacer verificaciones antes de aceptar cualquier correo entrarte.

Y por último, las opciones de smtpd_client_restrictions deben tener antes de permit el valor reject_maps_rbl que le indica que tendrá que buscar en esa referencia. Con esto tendremos el sistema de correo electrónico listo para funcionar.


Courier

Courier IMAP depende directamente de su librería de autenticación Courier Authlib, la cual deberá acceder al directorio LDAP y extraer las características del usuario de la ficha del usuario (localizadas bajo la rama ou=People).


Authlib

Authlib aunque puede utilizar PAM (y todo el framework de la autenticación) para autenticar los usuarios no presenta los mismos beneficios como la extracción de propiedades específicas del Courier IMAP para el tratamiento de la cuenta.  El archivo /etc/courier/authdaemonrc deberá existir con el siguiente contenido:

/etc/courier/authdaemonrc

authmodulelist="authldap"
authmodulelistorig="authpam authpwd authshadow"
daemons=5
authdaemonvar=/var/lib/authdaemon
DEBUG_LOGIN=2
DEFAULTOPTIONS="disableshared=0"
LOGGEROPTS="

Es importante resaltar que el parametro DEBUG_LOGIN debe contener el valor de 0 (cero), por razones de depuración el parametro se podrá inicialmente en el valor 2 para indicar que el demonio debe mostrar mensajes sobre lo que pasa en él.  Al término de la depuración, el valor deberá estar en cero y el demonio se podrá reiniciar con el comando service courier-authdaemon restart.   Siempre que este demonio sea cambiado en sus parámetros el demonio de Courier IMAP también deberá ser reiniciado para que autentique contra los nuevos parámetros.

La variable authmodulelist indica con su valor authldap que sólo autenticará utilizado el directorio LDAP.  Por defecto, este módulo utiliza el archvo /etc/courier/authldaprc para indicarle sus parámetros iniciales.

/etc/courier/authldaprc

LDAP_URI                ldap://127.0.0.1/
LDAP_PROTOCOL_VERSION   3
LDAP_BASEDN             ou=People,dc=linuxchange,dc=com
LDAP_BINDDN             cn=root,dc=linuxchange,dc=com
LDAP_BINDPW             gregorio
LDAP_TIMEOUT            120
LDAP_AUTHBIND           1
LDAP_MAIL               mail
LDAP_GLOB_UID           mail
LDAP_GLOB_GID           mail
LDAP_HOMEDIR            homeDirectory
LDAP_MAILDIR            mailbox#
LDAP_MAILDIRQUOTA       quota#
LDAP_FULLNAME           cn
LDAP_CRYPTPW            userPassword

Al terminar de editar el archivo authldaprc, debido a que éste contiene la contraseña de un usuario LDAP que puede tener acceso a las propiedades tan importantes como userPassword este deberá ser de sólo lectura para el usuario root.  Para realizar esto, escribir el siguiente comando: chmod 640 /etc/courier/authldaprc


Edición del archivo de inició

En algunas distribuciones las varaibles de ambiente no son exportadas correctamente y Courier-Authlib no funcionará correctamente.  Para corregir este comportamiento erróneo se editará el archivo /etc/init.d/courier-authdaemon añadiendo las líneas export DEBUG_LOGIN y export DEFAULTOPTIONS justo derriba de la ínea daemon $WRAPPER -pid=$PIDFILE -start $LOGGEROPTS $PROGRAM 

Después de estos cambios el demonio deberá reiniciarse. 


IMAP

El demonio IMAP de courier será el encargado de entregar los mensajes al cliente de correo. Para realizar esto el archivo /etc/courier/imapd deberá contener lo siguiente.

/etc/courier/imapd

ADDRESS=0
PORT=143
MAXDAEMONS=40
MAXPERIP=20
PIDFILE=/var/run/imapd.pid
TCPDOPTS="-nodnslookup -noidentlookup"
LOGGEROPTS="-name=imapd"
DEFDOMAIN="@linuxchange.com"
DEBUG_LOGIN=2
IMAP_CAPABILITY="IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE AUTH=PLAIN ACL"
IMAP_KEYWORDS=1
IMAP_ACL=1
IMAP_CAPABILITY_ORIG="IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA AUTH=CRAM-MD5 AUTH=CRAM-SHA1 AUTH=CRAM-SHA256 IDLE"
IMAP_PROXY=0
IMAP_PROXY_FOREIGN=0
IMAP_IDLE_TIMEOUT=60
IMAP_CAPABILITY_TLS="$IMAP_CAPABILITY AUTH=PLAIN"
IMAP_CAPABILITY_TLS_ORIG="$IMAP_CAPABILITY_ORIG AUTH=PLAIN"
IMAP_DISABLETHREADSORT=0
IMAP_CHECK_ALL_FOLDERS=0
IMAP_OBSOLETE_CLIENT=0
IMAP_UMASK=022
IMAP_ULIMITD=65536
IMAP_USELOCKS=1
IMAP_SHAREDINDEXFILE=/etc/courier/shared/index
IMAP_ENHANCEDIDLE=0
IMAP_TRASHFOLDERNAME=Trash
IMAP_EMPTYTRASH=Trash:7
IMAP_MOVE_EXPUNGE_TO_TRASH=0
SENDMAIL=/usr/sbin/sendmail
HEADERFROM=X-IMAP-Sender
IMAPDSTART=YES
MAILDIRPATH=Maildir
MAILDIR=Maildir

De la misma forma que con Authlib, el parámetro DEBUG_LOGIN deberá estar en cero para un servidor en producción.  Al término de la edición el demonio deberá ser reiniciado con el comando service courier-imapd restart


Edición del archivo de inició

En algunas distribuciones las varaibles de ambiente no son exportadas correctamente y Courier-IMAP no funcionará correctamente.  Para corregir este comportamiento erróneo se editará el archivo /etc/init.d/courier-imapd añadiendo las líneas export IMAP_CAPABILITY, export DEBUG_LOGIN, export IMAP_UMASK, export IMAP_USELOCKS y export IMAP_SHAREDINDEXFILE justo derriba de la ínea daemon $WRAPPER -pid=$PIDFILE -start \
            $LOGGEROPTS \
            $PROGRAM \
            -address=$SSLADDRESS \
            -maxprocs=$MAXDAEMONS \
            -maxperip=$MAXPERIP \
            $TCPDOPTS \
            $PORT \
            /usr/sbin/imaplogin \
            /usr/bin/imapd \
            $MAILDIRPATH

Después de estos cambios el demonio deberá reiniciarse. 


Datos finales

Debido a que el sistema de correo electrónico de LinuXchangE utiliza un esquema de usuarios finales en dónde le usuario que se utiliza es el poseedor del uid 8 (generalmente mail) y el grupo con gid 12 (generalmente el grupo mail) los directorios Maildir/ deberán estar a nombre de estos usuarios. De esta forma el directorio /home/usuario/Maildir/ pertenecerá a este grupo.  Para realizar esto el comando chown mail:mail Maildir -Rv deberá ser ejecutado en el directorio de los usuarios en caso de que la propiedad no sea añadida correctamente.