miércoles, 18 de febrero de 2009

Dominios Virtuales Postfix

Para hacer dominios virtuales en Postfix hay que crear un usuario y un grupo que a partir de ahora son los que van a trabajar sobre los directorios de los usuarios. Normalmente las carpetas del correo de los usuarios están en su propio directorio personal, con los dominios virtuales el buzón también se va a crear en un directorio virtual. En muchos manuales se recomienda darle al usuario y al grupo de buzones virtuales el ID 5000, nosotros vamos a usar estos mismos IDs, ejemplo:

Para crear el grupo:
groupadd –g 5000 virtualmail

Para crear el usuario:
useradd –g 5000 –u 5000 virtualmail

Entonces creamos la carpeta que va a contener los buzones y le damos al usuario y al grupo virtualmail la propiedad de esta carpeta y todo su contenido:

mkdir /home/vmail
chown –R virtualmail.virtualmail /home/vmail

Dentro de este directorio creamos los de cada dominio que vayamos a trabajar en el Postfix, si tenemos un dominio dominio1.com y otro que sea dominio2.com entonces debemos crear dos carpetas que se llamen así como los dominios, ejemplo:

mkdir /home/vmail/dominio1.com
mkdir /home/vmail/dominio2.com

Ahora los buzones de los usuarios del dominio 1 se pueden crear en la carpeta /home/vmail/dominio1.com y los del dominio 2 en /home/vmail/dominio2.
Pasamos a configurar el Postfix para que trabaje con los dominios virtuales. Para la autenticación de los usuarios es recomendado usar SASL, con el software saslauthd, luego de instalar Postfix hay que instalar también el saslauthd y configurarlos los dos para que trabajen juntos. Primero configuramos el SASL. En el archivo /etc/default/saslauthd hay que asegurarse de que las variables START y MECHANISMS estén correctamente asignadas:

START=”yes”
MECHANISMS=”valor” # valor puede se ldap,mysql,pam, etc. Depende de donde estén almacenados los usuarios.

Después hay que vincular el Postfix con SASL en el fichero /etc/postfix/sasl/smtpd.conf, dentro de él hay que poner lo siguiente:

pwcheck_method: saslauthd
mech_list: plain login

Con esto decimos que el chequeo de autenticación de los usuarios en Postfix lo hace el software saslauthd. Después, ya dentro de la configuración del Postfix, hay que configurar y autorizar el SASL. Esto de instalar y configurar SASL no tiene nada que ver con los dominios virtuales pero es recomendado para la autenticación. Bueno, vemos como configurarlo. El archivo de configuración es el /etc/postfix/main.cf, aquí vamos a escribir lo siguiente:

smtp_sender_dependent_authentication = yes
smtpd_sasl_local_domain = # se deja vacío.
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination

Con esto ya autorizamos al SASL a que autentique los usuarios del Postfix. Ahora pasamos a lo que realmente interesa, la configuración de los dominios virtuales.
Todo se hace dentro del fichero /etc/postfix/main.cf.

# Aquí se configura que el trasporte va a ser virtual.
virtual_transport = virtual
# Especificamos el directorio donde van a estar los dominios.
virtual_mailbox_base = /home/vmail/
# Los dominios que se van a ver en el servidor.
virtual_mailbox_domains = dominio1.com,dominio2.com
# Id donde comienzan los de los usuarios del sistema (esto es a conveniencia)
virtual_minimum_uid = 100
# Id del usuario que tiene permiso en los buzones,
# el mismo que creamos al principio.
virtual_uid_maps = static:5000
# Id del grupo que tiene permiso en los buzones,
# también el que creamos.
virtual_gid_maps = static:5000

Yo en particular no recomiendo configurar trasporte local en un servidor que maneja dominios virtuales, lo dejo que funcione con la configuración que trae por defecto.

Luego de tener esto solo queda especificarle al Postfix donde se encuentran los alias y los usuarios. Estos pueden estar en un archivo de texto, un directorio LDAP, una base de datos MySQL, etc. Los alias se configuran con la variable virtual_maps y los usuarios con la variable virtual_mailbox_maps. Cuando se configuren los usuarios, en el soporte que se escoja, hay que fijarse que el campo que especifique la carpeta del buzón debe especificar también el dominio, si no el servidor no la puede encontrar. Ejemplo: se puede decir que el buzón del usuario pepe está en la carpeta dominio1.com/pepe/. Así cuando el servidor vaya a buscar el buzón lo busca en /home/vmail/dominio1.com/pepe/ porque se configuró que en /home/vmail están los buzones.

Nota:
Cuando haya problemas de permisos entre el Postfix y los buzones de los usuarios la solución es rectificar que el propietario de /home/vmail y todo su contenido sea el usuario virtualmail del grupo virtualmail. Esto se logra con el siguiente comando:

chown –Rv virtualmail.virtualmail /home/vmail

A continuación voy a poner un ejemplo de configuración de alias y buzones de usuarios que hice una vez con un directorio LDAP y el servidor de entrega era un Courier.

#Alias virtuales
virtual_maps = ldap:valiases
valiases_server_host = ldap.dominio.com
valiases_search_base = ou=alias,dc=dominio,dc=com
valiases_query_filter = (&(mail=%s)(objectClass=CourierMailAlias))
valiases_result_attribute = maildrop
valiases_bind = no

#Usuarios virtuales
virtual_mailbox_maps= ldap:ldapvirtualmap
ldapvirtualmap_server_host = ldap.dominio.com
ldapvirtualmap_search_base = ou=usuarios,dc=dominio,dc=com
ldapvirtualmap_query_filter =(mail=%s)
ldapvirtualmap_result_attribute = mailbox
ldapvirtualmap_bind = no

Aparte de esto tuve que configurar el SASL para que “viera” los usuarios en el servidor LDAP, en el fichero /etc/saslauthd.conf tuve que escribir estas líneas:

ldap_servers: ldap://ldap.dominio.com
ldap_bind_dn: cn=admin,dc=dominio,dc=com
ldap_bind_pw: password
ldap_search_base: ou=usuarios,dc=dominio,dc=com
ldap_filter: (uid=%U)
ldap_scope: sub
ldap_auth_method: bind

Bueno, espero sirva este manual, gracias por leerlo.

No hay comentarios:

Publicar un comentario