miércoles, 8 de septiembre de 2010

Servidor de Correo integrado con LDAP en Ubuntu: Courier + Postfix + LDAP,

Servidor de correo

Básicamente un servidor de correo se compone de dos servicios,por un lado el envío de los correos, para lo que se hace uso del protocolo SMTP (simple mail transport protocol ) que se emplea para intercambiar mensajes entre los servidores de correo; por el otro debe existir algún modo de permitir que un usuario pueda obtener o descargar sus mensajes guardados en el servidor, para ello se puede hacer uso del protocolo POP post office transport protocol o de IMAP internet message access protocol. Aunque la finalidad de estos últimos es la misma, lo cierto es que IMAP presenta algunas ventajas como tiempos de respuesta menores, acceso remoto a los mensajes (podemos descargarnos sólo las cabeceras sin descargar el cuerpo del mensaje) ,accesos simultáneos a múltiples clientes, vigilancia en el estado del mensaje , agilidad en las búsquedas...

Como servidor SMTP emplearé Postfix y tanto para POP como IMAP instalaré Courier, ambos conectados al servidor LDAP instalado previamente que proveerá las autenticaciones de los usuarios.

1.- Configuraciones previas

En primer lugar configuraré el servidor DNS para que los equipos de la red reconozcan al equipo correo.mczones.es como el servidor de correo, para ello agregamos un registro MX con prioridad 10 que apunte al equipo “correo” que ya tenemos definido. Con esto lo que estamos haciendo es que todas las peticiones de correo electrónico serán redireccionadas al host “correo” que no es mas que un alias de servidor ubuntu. Tal y cómo se ve en las siguientes imágenes podemos comprobar su funcionamiento tras reiniciar bind (/etc/init.d/bind9 restart) simplemente abriendo una consola y tecleando:

nsookup
set q=any
mczones.es
image image

2.- Servidor de correo Postfix

Lo primero que deberemos hacer es instalar un servidor de correo SMTP -que por tanto, por defecto, correrá en el puerto 25- , en mi caso emplearé Postfix, para ello:
apt-get install postfix


La primera vez que ejecutamos la instalación nos realizará una serie de cuestiones sobre la configuración, pero una vez instalado podríamos incluso forzar la reconfiguración de postfix (dpkg-reconfigure postfix) que nos pedirá:

  • tipo genérico de configuración: para hacer las pruebas seleccionamos modo local, para las pruebas podemos seleccionar modo local, pero después tendremos que emplear Sitio de Internet o Internet con smarthost.

  • Nombre de correo: es decir, el dominio que recibirá los correos mczones.es

  • añadir el dominio a las direcciones simples: no

  • Lista de dominios locales: lista de dominios para los que nuestro equipo será dominio final mczones.es

  • Forzar actualizaciones síncronas: si

  • Redes Locales: inicialmente podemos restringirlo sólo a las locales 127.0.0.0/8 y 192.168.2.3

  • Uso de procmail para la entrega local: si.

  • Quota y extensión dejamos los valores por defecto (0 y +)
Tras la instalación creará en /etc/postfix los ficheros necesarios para su funcionamiento y configuración. El archivo en el cuál configuraremos los datos de nuestro equipo es /etc/postfix/main.cf, dónde asignaremos los siguientes valores:
myhostname correo.mczones.es #nombre del host que alberga el servidor de correo
mydomain mczones.es # dominio para el que se recibirán correos
mydestination mczones.es # podremos recibir correos para la máquina local para las primeras pruebas
mynetworks 192.168.2.0/24, 127.0.0.0/8 # Ips que escuchará el servidor (envio/recepción)

Reiniciamos el servidor (/etc/init.d/postfix restart) y comprobamos que no existan errores. Para ello, además de consultar los logs (/var/log/mail.log, /var/log/mail.info y /var/log/syslog) podemos establecer una sesión telnet con el puerto 25 que además nos de información sobre módulos, autenticaciones disponibles y el mensaje de bienvenida. Para ello:
telnet 127.0.0.1 25 # o a correo.mczones.es
ehlo HOLAimage Podremos comprobar también que nuestro correo funciona correctamente, para ello añadimos un nuevo usuario al sistema y crearé un usuario llamado “nuevo”:
useradd -m nuevo
passwd nuevo

En algunas ocasiones no se crea el fichero de salida que empleará postfix para el envío, podemos hacerlo simplemente enviándole un mensaje o “a mano” asignándole los permisos necesarios para usuario y grupo:
touch /var/mail/nuevo
chown nuevo:mail /var/mail/nuevo
chmod 600 nuevo

Una vez hecho instalermos el paquete mutt que me permitirá el envío y recepción de los correos directamente y probaremos a enviarnos un mensaje a otro usuario pulsando “m” y escribiendo la dirección del destinatario root@mczones, por ejemplo. Si abrimos consola con otro usuario podremos comprobar si funciona. Para realizar la instalación apt-get install mutt:image image

2.1.- Integración de Postfix con LDAP

Para realizar la integración con ldap necesitamos el paquete postfix-ldap, aprovecharemos también para instalar postfix-tls para el uso de certificados (explicado en el apéndice)
apt-get install postfix-ldap postfix-tls

Antes de comenzar con la configuración, crearemos la estructura necesaria en ldap, para ello a las unidades organizativas ya existentes (usuarios y grupos) añadiremos una tercera “Postfix” con información necesaria para postfix. En esta última, además, crearemos una rama hija “Alias” dónde guardaremos los alias de correo que nos permitirán tener varias cuentas de correo para un mismo usuario, o que incluso apunten a direcciones externas.image
A la unidad Postfix le añadiremos un atributo de tipo userPassword con una contraseña para que un usuario anónimo no pueda listar su contenido.

Por último colgando de la unidad organizativa grupos crearé un “grupo Postfix” llamado vmail de gidNumber 5000, en él añadiré a los usuarios que tendrán correo pero que no pertenecerán ni a contabilidad ni a desarrollo y que por tanto no podrán loguearse en el sistema, sólo emplearán el correo.

Toda las cuentas de correo tendrán su buzón de correo bajo el directorio /home/vmail/$user/Maildir, donde “$user” se sustituirá por el nombre del usuario y todos los usuarios de correo pertenecerán al grupo vmail.

Si queremos también podremos crear un usuario vmail perteneciente al grupo vmail (en sistemas que no empleen LDAP es lo habitual):
useradd -m -d /vmail -s /bin/false -U -u 5000 vmail

En cualquiera de los dos casos deberemos crear el directorio dónde se almacenarán todos los buzones de los usuarios y podemos/debemos cambiar el propietario de la misma:
mkdir -vp -m 2755 /home/vmail
chown -v root:vmail /home/vmail # despues haríamos maildirmake /home/vmail/nombre_user/Maildir

Como los usuarios de correo van a ser usuarios del sistema, pero algunos sin acceso a la shell (los que no sean miembros de contabilidad ni de desarrollo), en principio, tienen asociado un directorio home, cuyo path será: /home/vmail/$user ($user se corresponde con el nombre del usuario). Por este motivo, se va a añadir al directorio /etc/skel/ un archivo de recursos para procmail (programa encargado del repardo de correos de los usuarios) y el directorio bajo el cual se van a almacenar los correos de los usuarios en formato Maildir. El siguiente ejemplo muestra como hacerlo:
# /bin/echo -ne "PATH=/usr/bin:/bin:/usr/local/bin:.\n\
MAILDIR=\$HOME/Maildir\nDEFAULT=\$MAILDIR/" > /etc/skel/.procmailrc
# /usr/bin/maildirmake /etc/skel/Maildir

2.2.- Preparación del paquete OpenLDAP para el soporte de correo.

OpenLDAP necesita que instalemos un esquema específico para manejar la información acerca del correo electrónico que nos permita crear usuarios asociados a cuentas o alias. El esquema se encuentra en el paquete courier-ldap, por lo que lo instalaremos:
apt-get install courier-ldap

Durante la instalación nos preguntará:

  1. si deseamos crear los directorios para la administración vía web, responderemos que si, ya que más tarde instalaremos el paquete courier-webadmin que nos permitirá configurar en un entorno web la configuración LDAP de courier.

  2. Directorio para el directorio Maildir: Maildir que será donde se almacenen los correos.
En las versiones antiguas de OpenLDAP, bastará con añadir la línea “include /etc/ldap/schema/authldap.schema” al fichero /etc/ldap/slapd.conf. En las últimas versiones dicho fichero ha desaparecido y el sistema para cargarlos ha cambiado, por lo que para cargarlos descomprimimos el esquema y lo copiamos en la carpeta /etc/ldap/schema
gunzip -d /usr/share/doc/courier-authlib-ldap/authldap.schema.gz -c > /etc/ldap/schema/authldap.schema
creamos un fichero schema.convert y copiamos el siguiente texto en su interior con los esquemas a incluir:
include /etc/ldap/schema/core.schema
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/nis.schema
include /etc/ldap/schema/inetorgperson
include /etc/ldap/schema/authldap.schema
Convertimos los ficheros de esquema a ficheros ldif
mkdir ldif_out
slaptest -f schema.convert -F ldif_out
Esto convertirá los ficheros a formato ldif, pero tendremos que editarlo antes de poder importarlo
nano ldif_out/cn\=config/cn\=schema/cn\=\{4\}authldap.ldif
y cambiamos las primeras entradas para que coincidan con las siguientes
dn: cn=authldap,cn=schema,cn=config
...
cn: authldap
y borramos las siguientes líneas del final del fichero (el contenido numérico variará dependiendo de la fecha, hora,... en la que se realice la conversión.
structuralObjectClass: olcSchemaConfig
entryUUID: 8344f43c-9d7c-102e-8f0e-f3f0ff664b39
creatorsName: cn=config
createTimestamp: 20100124213810Z
entryCSN: 20100124213810.691146Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20100124213810Z
Finalmente cargamos los esquemas en OpenLDAP -nos pedirá la contraseña de admin de OpenLDAP-:
ldapadd -x -D cn=admin,cn=config -W -f ldif_out/cn\=config/cn\=schema/cn\=\{4\}authldap.ldif
Ahora agregaremos la cuenta de unos usuarios de correo desde un fichero uned.ldif:
Usuario Uned
uned.ldif
# Entry 1: uid=uned,ou=usuarios,dc=mczones,dc=es
dn:uid=uned,ou=usuarios,dc=mczones,dc=es
uid: uned
cn: uned
sn: gestion de redes
userPassword: 1234
loginShell: /bin/false
uidNumber: 5100
gidNumber: 5000
homeDirectory: /home/vmail/uned
shadowMin: -1
shadowMax: 999999
shadowWarning: 7
shadowInactive: -1
shadowExpire: -1
shadowFlag: 0
objectClass: top
objectClass: person
objectClass: posixAccount
objectClass: shadowAccount
objectClass: CourierMailAccount
mail: uned@mczones.es
mailbox: Maildir/
quota: 0
Usuario c3:
c3.ldif
# Entry 2: cn=c3,ou=usuarios,dc=mczones,dc=es
dn:cn=c3,ou=usuarios,dc=mczones,dc=es
uid: c3
cn: c3
sn: c3
userPassword: 1234
loginShell: /bin/sh
uidNumber: 5103
gidNumber: 1000 # Número del departamento contabilidad
homeDirectory: /home/c3
shadowMin: -1
shadowMax: 999999
shadowWarning: 7
shadowInactive: -1
shadowExpire: -1
shadowFlag: 0
objectClass: top
objectClass: person
objectClass: posixAccount
objectClass: shadowAccount
objectClass: CourierMailAccount
mail: c3@mczones.es
mailbox: Maildir/
quota: 0
Alias webmaster del usuario c3
webmaster.ldif
dn: mail=webmaster@mczones.es,ou=Alias,ou=Postfix,dc=mczones,dc=es
cn: webmaster
mail: webmaster@mczones.es
maildrop: c3@mczones.es
sn: desarrollo
objectClass: couriermailalias
objectClass: inetOrgPerson
objectClass: Person
Lo añadimos o bien con ldapadd o pulsando en importar de phpldapadmin:
ldapadd -x -D "cn=admin,dc=mczones,dc=es" -W -h mczones.es -f uned.ldif
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. En el caso de que tan sólo sean cuentas de correo su directorio home será /home/vmail/$user, en otro caso colgarán directamente del directorio /home:
mkdir -p -m 2750 /home/vmail/uned
maildirmake /home/vmail/uned/Maildir
chown -R uned:vmail /home/vmail/uned
En el caso de usuarios del dominio, deberemos para el reparto local:
echo -ne "PATH=/usr/bin:/bin:/usr/local/bin:.\nMAILDIR=\$HOME/Maildir\n\
DEFAULT=\$MAILDIR/" > $homedirectory/.procmailrc
Para automatizar esta operación se ha creado el script del apéndice I -en el documento apéndice-.
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 webmaster.ldif.
A partir de este momento todos los correos dirigidos a la dirección webmaster@mczones serían redirigidos de modo automático al usuario c3@mczones.es. Los datos de configuración se pueden ver en la tabla anterior.

2.3 Comprobación del funcionamiento

Para comprobar que todo funciona correctamente podemos emplear los logs, si queremos visualizar sus columnas en distintos colores podemos instalar ccze. (ejemplos en el último punto)
apt-get install ccze
tail -20 /var/log/mail.log | ccze -m ansi

2.4 Conexión con LDAP, Alias y reparto del correo local.

Hemos de modificar el fichero /etc/postfix/main.cf para permitir la lectura de alias.
Como los alias de correo están almacenados en el directorio LDAP hay que decirle a Postfix dónde 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
    Es decir:
virtual_maps = ldap:valiases
valiases_server_host = servidorubuntu.mczones.es
valiases_search_base = ou=Alias,ou=Postfix,dc=mczones,dc=es
valiases_query_filter = (&(mail=%s)(objectClass=CourierMailAlias))
valiases_result_attribute = maildrop
valiases_bind = no
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 (lo incluyo en el Apéndice II al final del documento).
local_transport = local
mydestination = $myhostname $localhost.$mydomain localhost.gsr.pt
local_recipient_maps = unix:passwd.byname $alias_maps
home_mailbox = Maildir/
Tras las modificaciones recargamos postfix /etc/init.d/postfix reload

3.- Instalación y Configuración de Courier.

En primer lugar debemos instalar los paquetes necesarios, algunos han sido instalados para configurar LDAP
apt-get install courier-authdaemon courier-base courier-ldap courier-pop courier-imap
Courier puede emplear varios métodos de autenticación, por defecto emplea PAM, vamos a añadir LDAP a sus métodos aceptados, para ello, nos vamos a su fichero de configuración /etc/courier/authdaemonrc y configuramos el siguiente parámetro:
authmodulelist="authpam authldap"
A continuación vamos al fichero /etc/courier/authldaprc para configurar los parámetros de nuestro servidor:
LDAP_SERVER mczones.es
LDAP_PORT 389
LDAP_BASEDN ou=usuarios,dc=mczones.es,dc=
LDAP_BINDDN cn=admin,dc=mczones,dc=es
LDAP_BINDPW ldapadmin
LDAP_TIMEOUT 15
LDAP_AUTHBIND 1
LDAP_MAIL mail
LDAP_FILTER (!(quota=-1))
LDAP_UID uidNumber
LDAP_GID gidNumber
LDAP_HOMEDIR homeDirectory
LDAP_MAILDIR mailbox
LDAP_FULLNAME cn
LDAP_CRYPTPW userPassword
LDAP_DEREF never
LDAP_TLS 0
....
Como en la instalación de courier hemos instalado las páginas html podemos instalar courier-webadmin para realizar la configuración vía web, tal y cómo se puede ver en la imagen, para ello:
apt-get install courier-webadmin
nos preguntará si activamos el programa CGI (si) y una contraseña que necesitaremos después para entrar.
Abrimos un navegador y vamos -por defecto- a http://localhost/cgi-bin/courierwebadmin

4.- Comprobando el funcionamiento

Prueba de pop empleando telnet (arriba) y de imap (abajo). Para testear imap me conecto directamente con Evolution y realizo unos envios entre las cuentas. En el fichero adjunto hay además capturas de logs para tráfico encriptado, correo vía web, antivirus, control de spamm....
image
image

para continuar viendo el resto de manuales Linux siga el enlace:administración de servidores con Linux

En las próximas entregas continuaré con el tema de instalación de este servidor de correo, en concreto los puntos que trataré (accesibles desde el enlace anterior) serán los siguientes:
1 .-Script para la creación automática de los directorios de los usuarios de correo.
2 .-Fichero /etc/postfix/main.cf completo antes de encriptación, smtp-auth
3 .-Squirrelmail: consulta del correo vía web
4 .-Postfix sobre internet, SMTP Autenticado
4.1 Configurando Postifx
4.2 Creación de certificados y configuración de Postfix para su uso
4.3 Autenticación con SASL
4.4 Comprobación del funcionamiento de SMTP-AUTH y TLS
4.5 Configuración y prueba sobre Evolution
5 .-Configurando encriptación en Courier
6 .-Filtro de Virus con ClamSMTP
6.1 Instalación de ClamSMTP y ClamAV
6.2 Configuración de Postfix para que use ClamSMTP
6.3 Comprobando ClamSMTP
7 .-Control de spam
8 .-Integración de Postfix, con clamav y spamassassin empleando amavis
9 .-Ficheros de configuración completos de postfix finales
9.1 /etc/postfix/main.cf
9.2 /etc/init.d/master.cf

5.- Bibliografía:

Manual de instalación y configuración del servidor de correo postfix bajo Ubuntu. Alex Zuluaga, Natalia Valencia, Fernanda Orozco, Roger Olarte,...

2 comentarios:

garylinux dijo...

Excelente tutorial pero una pregunta al final lograste crear el script para crear la carpetas que contienen los buzones de los usuarios de correo?

jesus dijo...

Con esto se puede configurar una libreta de direcciones LDAP???