5 - Configuración del soporte LDAP en Postfix (III)

[editar]
Tutorial creado por Sergio González González. Extraido de: http://es.tldp.org/Manuales-LuCAS/doc-tutorial-postfix-ldap-courier-spamassassin-amavis-squirrelmail/html-unico/smtp-postfix.html#licencia-fdl
28 de Febrero de 2006
Creación del directorio HOME para los nuevos usuarios

Es imprescindible que los buzones de correo existan antes de su uso. Por este motivo, cada vez que se añada un usuario de correo, se ha de crear su directorio HOME y el buzón de correo asociado, así como el archivo de recursos para procmail.

Para automatizar esta operación se ha creado el siguiente script:

#!/bin/sh
 #
 # Copyright (C) 2004 Sergio González González <sergio.gonzalez@hispalinux.es>
 # 
 # Depends on:
 #               - ldapsearch
 #               - maildirmake ( from courier )
 #
 # Based on http://jeroen.protheus.com/postfix-courier-ldap-howto.html
 # (c) J.Vriesman
 #
 # and
 #
 # Based on http://bulma.net/body.phtml?nIdNoticia=2013
 # (c) Jesús Roncero Franco
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
 # the Free Software Foundation; either version 2 of the License, or
 # (at your option) any later version.
 #
 # This program is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 # GNU General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
 # along with this program; if not, write to the Free Software
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 #
 
 
 # Password to bind to ldap server
 systempass="1"  
 # Bind dn
 binddn="ou=postfix,dc=gsr,dc=pt" 
 # Acount leave
 accountleave="ou=people,dc=gsr,dc=pt" 
 # ldap host
 ldaphost="gsr.pt"
 # Maildir name
 maildir="Maildir/"
 # Mail users home name
 homedir="/home/vmail"
 # Mail user's group
 group="vmail"
 
 
 usernames=`ldapsearch -h $ldaphost -x -w $systempass -D "$binddn" \
                       -b "$accountleave" "(!(quota=-1))" uid  \
                       | grep "^[^#]" | grep "^[^dn]" | grep uid | awk '{ print $2 }'`
 
 
 # create personal mailfolders
 
 for username in $usernames
 do
   homedirectory=`ldapsearch -h $ldaphost -x -w $systempass -D "$binddn" \
                             -b "$accountleave" "(uid=$username)" homeDirectory \
                             | grep "^[^#]" | grep homeDirectory | grep "$homedir" \
                             | awk '{ print $2 }'`
 
   if [ ! -d $homedirectory/$maildir ] && [ ! -z $homedirectory ]
   then
 
     mkdir -p -m 2750 $homedirectory
     maildirmake $homedirectory/$maildir
 
     if [ ! -f $homedirectory/.procmailrc ]
     then
 
       echo -ne "PATH=/usr/bin:/bin:/usr/local/bin:.\nMAILDIR=\$HOME/Maildir\n\
                 DEFAULT=\$MAILDIR/" > $homedirectory/.procmailrc
 
     fi
 
     chown -R $username.$group $homedirectory
   fi
 
 done

El script anterior creará el HOME de los usuarios de correo que no lo tuviesen ya creado, el directorio Maildir en el que se almacenarán los correos enviados al usuario y el archivo .procmailrc, que se encargará de decirle a procmail como se ha de comportar.

[Note] Nota

Para la correcta ejecución del script se necesita la herramienta maildirmake. Esta herramienta, utilizada para crear un directorio tipo Maildir, viene junto al paquete courier-base.

[Important] Importante

Recuerde que cada vez que se añada un usuario al sistema, se ha de ejecutar este script como root.

Creación de un alias de correo

Para crear un alias de correo, se ha de crear un elemento bajo la hoja ou=alias,ou=postfix,dc=gsr,dc=pt e indicar que hacer cuando llegue un correo a esta cuenta.

En este caso, la plantilla a utilizar es la siguiente:

dn: mail=alias@dominio.com,ou=alias,ou=postfix,dc=gsr,dc=pt 
 cn: Nombre
 mail: alias@dominio.com 
 maildrop: direccion@destino.com 
 sn: Apellidos
 objectClass: couriermailalias 
 objectClass: inetOrgPerson
 objectClass: Person
 

Se utilizará como dn el atributo mail.

 

Se corresponde con el alias de uno de los dominios virtuales que se poseen.

 

Dirección de destino. Se puede corresponder con una dirección virtual de alguno de los dominios virtuales en su poder o una en otro dominio. Si existe más de una línea con el atributo maildrop, el mensaje que llegue a la cuenta mail se enviará a todas las direcciones especificadas.

 

objectClass que especifica que la cuenta es de tipo alias.

Un ejemplo podía ser el siguiente:

dn: mail=liviana@gsr1.pt,ou=alias,ou=postfix,dc=gsr,dc=pt
 cn: Liviana
 mail: liviana@gsr1.pt
 maildrop: severa@gsr.pt
 sn: Sanches
 objectClass: couriermailalias
 objectClass: inetOrgPerson
 objectClass: Person

Suponiendo que el archivo donde se ha almacenado la información de la captura LDIF para Liviana se denomina liviana.ldif, ha de ejecutar el siguiente comando para añadir la información al directorio LDAP:

Ejemplo 2.12. Adición de un alias con el comando ldapadd

$ /usr/bin/ldapadd -x -D "cn=admin,dc=gsr,dc=pt" -W -h  gsr.pt -f liviana.ldif
 Enter LDAP Password: [clave]
 adding new entry "mail=liviana@gsr1.pt,ou=alias,ou=postfix,dc=gsr,dc=pt"
 
 

La siguiente imagen muestra de forma gráfica, gracias a phpLDAPadmin, el nuevo alias añadido al directorio LDAP:

Figura 2.19. Nuevo alias: liviana

Nuevo alias: liviana

Esta captura muestra la nueva entrada bajo la unidad organizacional postfix -> alias a liviana@gsr1.pt, alias añadido en el Ejemplo 2.12, “Adición de un alias con el comando ldapadd”.

Modificación de la configuración de Postfix

En esta sección se mostrarán los aspectos de configuración de Postfix más importantes para hacer uso de un directorio LDAP, entre otras cosas.

[Tip] Sugerencia

Durante todo el proceso de configuración de Postfix sería recomendable tener una consola de monitorización de los logs de este programa. Puede ejecutar el siguiente comando en la consola destinada a la monitorización:

# /usr/bin/tail -f /var/log/mail.log | colorize

El programa colorize se encuentra en el paquete “colorize”, por lo que puede utilizar el comando /usr/bin/apt-get install colorize para instalarlo.

Configuración de los alias de correo

Como los alias de correo están almacenados en el directorio LDAP hay que decirle a Postfix donde y como ha de realizar las búsquedas. Cuando se especifica: ldap:nombre, nombre va a ser el prefijo que se va a utilizar en una serie de variables de Postfix para especificar la configuración e interrogación de LDAP. De esta forma, para la sentencia ldap:nombre, se deberán definir las siguientes opciones:

  • nombre_server_host: servidor LDAP

  • nombre_search_base: base de las búsquedas en LDAP

  • nombre_query_filter: filtro para la búsqueda

  • nombre_result_attribute: atributos que se quieren leer de los resultados de la búsqueda

  • nombre_bind: ¿es precisa la autentificación?. En este caso no es precisa, ya que la parte a consultar en el directorio LDAP es accesible anónimamente

De esta forma, por ejemplo, para la configuración de los alias de correo, se tendría una configuración como:

#Alias virtuales
 virtual_maps = ldap:valiases
 valiases_server_host = gsr.pt
 valiases_search_base = ou=alias,ou=postfix,dc=gsr,dc=pt
 valiases_query_filter = (&(mail=%s)(objectClass=CourierMailAlias))
 valiases_result_attribute = maildrop
 valiases_bind = no
[Note] Nota

En este caso, la búsqueda se realizaría en la rama ou=alias,ou=postfix,dc=gsr,dc=pt, devolviendo como resultado aquellos elementos cuyo atributo mail sea igual a la dirección de correo electrónico que se está buscando, siempre y cuando el objectClass sea CourierMailAlias

[Note] Nota

_query_filter utiliza notación prefija, como se puede observar en (&(condición)(condición)). Otros ejemplos podrían ser:

  • (|(condición)(condición))

  • (&(|(condición)(condición))(condición))

Configuración de Postfix para la entrega local

También se desea que el correo local sea administrado por Postfix, de forma que hay que indicárselo en su archivo de configuración. A continuación se verá la forma de hacer esto:

local_transport = local
 mydestination = $myhostname $localhost.$mydomain localhost.gsr.pt
 local_recipient_maps = unix:passwd.byname $alias_maps

Esto sería suficiente para la realización de la entrega local.

Configuración preliminar para Postfix

En la Sección 2.8, “Modificación de la configuración de Postfix” se mostraron las opciones necesarias para utilizar el servidor de correo Postfix con LDAP y alias de correo, entre otros. A continuación se verá un archivo de configuración completo, integrando todas las opciones vistas en la Sección 2.8, “Modificación de la configuración de Postfix”:

# see /usr/share/postfix/main.cf.dist for a commented, fuller
 # version of this file.
 
 # Do not change these directory settings - they are critical to Postfix
 # operation.
 command_directory = /usr/sbin
 daemon_directory = /usr/lib/postfix
 program_directory = /usr/lib/postfix
 setgid_group = postdrop
 
 # appending .domain is the MUA's job.
 append_dot_mydomain = no
 
 smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
 biff = no
 
 # Uncomment the next line to generate delayed mail warnings
 #delay_warning_time = 4h
 
 myhostname = todoscsi.gsr.pt
 alias_maps = hash:/etc/aliases
 alias_database = hash:/etc/aliases
 myorigin = /etc/mailname
 mynetworks = 127.0.0.0/8
 
 #Alias virtuales
 virtual_maps = ldap:valiases
 valiases_server_host = gsr.pt
 valiases_search_base = ou=alias,ou=postfix,dc=gsr,dc=pt
 valiases_query_filter = (&(mail=%s)(objectClass=CourierMailAlias))
 valiases_result_attribute = maildrop
 valiases_bind = no
 
 # Todos los dominios y los usuarios entragados por el agente de entrega local
 # local_recipient_maps es usado por el servidor SMTP para rechazar el correo
 # de los usuarios no conocidos
 local_transport = local
 mydestination = $myhostname $localhost.$mydomain localhost.gsr.pt
 local_recipient_maps = unix:passwd.byname $alias_maps
 
 mailbox_command = procmail -a "$EXTENSION"
 mailbox_size_limit = 0
 recipient_delimiter = +

Una vez modificado el archivo de configuración de Postfix, este ha de releer su configuración, para ello teclee:

Ejemplo 2.13. Releyendo la configuración de Postfix

# /etc/init.d/postfix reload
 Reloading Postfix configuration...done.

Ahora se puede probar el envío de un correo para la cuenta <liviana@gsr.pt>:

Ejemplo 2.14. Envío de un correo a <liviana@gsr.pt>

$ /usr/bin/mail liviana@gsr1.pt
 Subject: Prueba
 Cuerpo del mensaje
 .
 Cc: [enter]

Si tras ejecutar el Ejemplo 2.14, “Envío de un correo a <liviana@gsr.pt>” se mira en el archivo de log /var/log/mail.log se verá una entrada parecida a:

Ejemplo 2.15. Entrada en el log indicando el envío de un correo

Jun  4 11:29:06 todoscsi postfix/pickup[4799]: 89FC13A: uid=1000 from=<sergio>
 Jun  4 11:29:06 todoscsi postfix/cleanup[4807]: 89FC13A: \
                                   message-id=<20040604102906.89FC13A@todoscsi.gsr.pt>
 Jun  4 11:29:06 todoscsi postfix/qmgr[4800]: 89FC13A: from=<sergio@todoscsi.gsr.pt>, \
                                                       size=328, nrcpt=1 (queue active)
 Jun  4 11:29:06 todoscsi postfix/local[4809]: 89FC13A: to=<severa@gsr.pt>, \
                      orig_to=<liviana@gsr1.pt>, relay=local, delay=0, status=sent \
                      (delivered to command: procmail -a "$EXTENSION")
 Jun  4 11:29:06 todoscsi postfix/qmgr[4800]: 89FC13A: removed
 Jun  4 11:29:40 todoscsi postfix/smtpd[4738]: disconnect from gsr.pt[x.x.x.x]

Como se puede comprobar, el correo ha sido enviado a la dirección severa@gsr.pt, ya que liviana@gsr1.pt es un alias para esa cuenta.

Con esto quedaría finalizada la parte de la configuración de Postfix con soporte de LDAP.

[editar]

2 opiniones

Curso correo.

Muy bueno.
Sistema de correo con postfix, openldap, courier ((pop3.

Muy bueno el manual. Hay alguna manera de descargarlo en algun formato pdf?.

Tutoriales relacionados con 'Sistema de correo con Postfix, OpenLDAP, Courier (POP3&&IMAP) + SSL), SASL, Spamassassin, Amavis-new y SquirrelMail'

Esta documentación muestra la forma de montar un sistema de correo con las siguientes características:... Más »

Autor y licencia de 'Sistema de correo con Postfix, OpenLDAP, Courier (POP3&&IMAP) + SSL), SASL, Spamassassin, Amavis-new y SquirrelMail'

Licencia GNU Free Documentation License: http://www.gnu.org/copyleft/
Este contenido ha sido recopilado por el equipo de Wikilearning. Todo el contenido recopilado se ha obtenido respetando y comunicando en nuestro site la licencia de cada fuente.
Wikilearning tiene permiso expreso por escrito de los autores para publicar los contenidos que ha extraído de otras webs, incluyendo su uso comercial.