:::: MENU ::::

Instalar servidor email con Postfix y Dovecot (multidominio y multiusuario)

4.05 avg. rating (80% score) - 38 votes

Configurando Debian, Dovecot y PostfixPara descansar un poco de tanta programación, hoy ha tocado sesión Linux para configurar un servidor dedicado para un nuevo proyecto (una multitienda Magento, para los curiosos).

De todo el trabajo de configuración del servidor, hoy os hablo de la configuración del correo electrónico. Para este caso concreto, la configuración es la siguiente:

  • Servidor Debian 5.0 (Lenny)
  • Servidor e email Postfix
  • Servidor POP3/IMAP Dovecot
  • En un futuro tutorial añadiré la configuración de SquirrelMail como Webmail

Instalación de Postfix

Para empezar, y suponiendo que el resto de paquetes del sistema están actualizados, instalamos Postfix y las librerías necesarias para el correo saliente:

server:/# aptitude install postfix postfix-tls
server:/# aptitude libsasl2 sasl2-bin libsasl2-modules
server:/# aptitude popa3d

El fichero de configuración de Postfix, que usaremos más adelante, se encuentra en la ruta:

/etc/postfix/main.cf

Instalación de Dovecot

A continuación la instalación de Dovecot para la lectura del correo mediante POP o IMAP:

server:/# aptitude install dovecot-imapd dovecot-pop3d dovecot-common

El fichero de configuración de Dovecot, se encuetra en:

/etc/dovecot/dovecot.conf

Detalle de seguridad en Dovecot

La configuración por defecto de Dovecot cubre la mayoría de las necesidades de un sistema básico de gestión de correo, pero por seguridad deberíamos hacer el siguiente cambio en el fichero de configuración:

Cambiar:

#disable_plaintext_auth = yes

Por:

disable_plaintext_auth = no

Esto evita la posibilidad de enviar correo saliente en formato de texto plano sin requerir autenticación de usuario. Es muy recomendable modificarlo si queremos que evitar que se envíe spam desde nuestro servidor.

Decisión: Usuarios del sistema o usuarios virtuales

Cuando queremos configurar múltiples usuarios para el correo entrante/saliente, podemos hacerlo de dos formas:

  • Utilizando cuentas de usuarios del sistema
  • Utilizando usuarios virtuales

En el primer caso estaríamos creando usuarios del sistema Linux, que podrían, además de usar el servicio de correo, logearse en el sistema con los permisos que les otorguemos.

En este caso utilizaremos el segundo método, ya que el caso habitual es que los usuarios no necesiten logearse en el servidor, sino únicamente acceder a sus cuentas de correo para enviar y recibir emails.

Para utilizar usuarios virtuales no obstante, necesitaremos mapear los usuarios del correo a uno o varios usuarios del sistema, así que al menos será recomendable crear un nuevo usuario del sistema para estos menesteres. A este usuario le crearemos también un grupo propio, de forma que podamos limitar sus permisos.

Podemos hacerlo con:

server:/# adduser [username_for_mail]

A continuación se nos solicitara el password correspondiente.

Nota 1: Al usuario creado se le asigna por defecto un grupo con el mismo nombre.
Nota 2: Usaremos este nombre de usuario a lo largo del tutorial (apuntadlo bien).

Carpetas de correo (Postfix y Dovecot)

Para el correo entrante, necesitaremos un espacio en el disco donde almacenar los datos del usuario y los emails recibidos. Dicho espacio será compartido entre las dos aplicaciones Postfix y Dovecot. Postfix se encarga de la recepción del correo cuando otro servidor envíe un email para un usuario local y Dovecot se encargará de servirlo cuando nos conectemos desde nuestro gestor de correo mediante POP o IMAP.

Para el ejemplo, configuraremos cuatro cuentas de correo, pertenecientes a dos dominios diferentes:

usuario1@dominio1.com
usuario2@dominio1.com
usuario3@dominio2.com
usuario4@dominio2.com

Aunque estas carpetas de correo pueden crearse y configurarse de varias formas, en este caso crearemos una carpeta por cada dominio que necesitemos dentro de la carpeta /home. Es decir, si tenemos dos dominios apuntando al servidor, crearemos:

server:/# mkdir /home/dominio1.com
server:/# mkdir /home/dominio2.com

Además crearemos, dentro de cada dominio, una carpeta para cada usuario del correo, es decir:

server:/# mkdir /home/dominio1.com/usuario1
server:/# mkdir /home/dominio1.com/usuario2
server:/# mkdir /home/dominio2.com/usuario3
server:/# mkdir /home/dominio2.com/usuario4

Finalmente crearemos las carpetas para almacenar el correo recibido, y daremos permisos al usuario del sistema que gestiona el correo (usuario creado al comienzo del tutorial).

server:/# mkdir /home/dominio1.com/usuario1/Maildir
server:/# mkdir /home/dominio1.com/usuario2/Maildir
server:/# mkdir /home/dominio2.com/usuario3/Maildir
server:/# mkdir /home/dominio2.com/usuario4/Maildir
server:/# chown [username_for_mail] /home/dominio1.com/usuario1/Maildir
server:/# chown [username_for_mail] /home/dominio1.com/usuario2/Maildir
server:/# chown [username_for_mail] /home/dominio2.com/usuario3/Maildir
server:/# chown [username_for_mail] /home/dominio2.com/usuario4/Maildir

También será necesario indicar a Postfix y Dovecot está estructura, y dónde encontrar las carpetas de cada usuario para el email recibido. Abordaremos esto en las dos secciones siguientes.

Configuración de Postfix

Postfix, y el resto de servidores de correo, reciben emails de otros servidores vía protocolo SMTP.

Cuando reciben un correo, deciden si deben almacenarlo en el servidor o reenviarlo hacia su destinatario. Por tanto, si queremos gestionar el correo para usuarios de varios dominios como es el caso que nos ocupa, tendremos que indicar a Postfix los dominios que debe procesar (no reenviar).

Para ello, editamos el fichero de configuración de Postfix y añadimos las siguientes líneas:

virtual_mailbox_base = /home/
virtual_mailbox_domains = /etc/postfix/vhosts
virtual_mailbox_maps = hash:/etc/postfix/vmaps
virtual_uid_maps = static:[username_for_mail_uid]
virtual_gid_maps = static:[username_for_mail_gid]

Explicado poco a poco, con la línea virtual_mailbox_base indicamos a Postfix dónde se encuentran las carpetas de correo.

Con las líneas virtual_mailbox_domains y virtual_mailbox_maps indicamos la ruta a sendos archivos que explicaremos a continuación.

Y finalmente con las líneas virtual_uid_maps y virtual_gid_maps indicamos a Postfix que mapee todos los usuarios de correo, al usuario real del sistema con el uid y gid indicados (no explicaremos como obtener estos valores para no extendernos demasiado).

Archivo /etc/postfix/vhosts

Con este archivo, indicamos a Postfix los dominios que gestiona este servidor de correo. Para ello, simplemente tenemos que indicar en el archivo la lista de dominios, uno por línea de forma que en el caso que nos ocupa, tendremos:

dominio1.com
dominio2.com

Una vez creado el fichero con los dominios, ejecutaremos:

postmap /etc/postfix/vhosts

Para crear el correspondiente fichero en formato legible por Postfix.

Archivo /etc/postfix/vmaps

Con este archivo, indicamos a Postfix las direcciones de email y las rutas a las carpetas de correo entrante que gestiona este servidor de correo. Para ello, simplemente tenemos que indicar en el archivo una lista con una línea por usuario en formato [email] [carpeta]. En nuestro caso:

usuario1@dominio1.com dominio1.com/usuario1/Maildir
usuario2@dominio1.com dominio1.com/usuario2/Maildir
usuario1@dominio2.com dominio2.com/usuario1/Maildir
usuario2@dominio2.com dominio2.com/usuario2/Maildir

Como puede comprobarse, estas son las rutas relativas a /home que habíamos creado anteriormente, en la sección Carpetas de Correo.

Una vez creado el fichero con los dominios, ejecutaremos:

postmap /etc/postfix/vmaps

Para crear el correspondiente fichero en formato legible por Postfix.

Configuración de Dovecot

La configuración de Dovecot comienza con la indicación de la ruta de las carpetas de correo. Para ello, en el fichero de configuración de Dovecot, buscamos y modificamos la siguiente línea:

mail_location = maildir:/home/%d/%n/Maildir

En la configuración, observar que %d hace referencia al dominio y %n al usuario. Es decir, si Dovecot recibe una petición de usuario1@dominio1.com, sustituirá %d por dominio1.com y %n por usuario1, obteniendo la ruta correcta para la carpeta.

Como se puede observar, las rutas coinciden con las que hemos indicado más arriba, tanto en la sección Carpetas de Correo como en la configuración de Postfix.

Cuentas de usuario en Dovecot

Dovecot se encarga además de la validación de usuarios POP / IMAP que se conectan para recibir correo. Mientras en Postfix sólo necesitamos indicar las direcciones válidas de email y un usuario/contraseña del sistema para escribir en las carpetas de correo, Dovecot necesitará un conjunto de usuarios y claves, que en este caso definiremos mediante un  archivo de passwords.

El archivo de passwords lo ubicaremos en una carpeta /etc dentro de cada uno de los dominios:

server:/# mkdir /home/dominio1.com/etc
server:/# mkdir /home/dominio2.com/etc
server:/# touch /home/dominio1.com/etc/passwd
server:/# touch /home/dominio2.com/etc/passwd

El contenido de los archivos de contraseñas por ejemplo para el dominio1.com y dados los usuarios que venimos usando:

usuario1:{plain}[password_for_user]:[username_for_mail]:[username_for_mail]
usuario2:{plain}[password_for_user]:[username_for_mail]:[username_for_mail]

Donde:

[password_for_user] es la clave de cada usuario, sin cifrar
[username_for_mail] es el usuario del sistema que hemos creado al comienzo del tutorial

Nota: [username_for_mail] aparece dos veces, ya que una hace referencia al usuario (UID) y otra al grupo del usuario (GID).

En el caso de dominio2.com necesitaremos un archivo similar, en la carpeta correspondiente.

Autenticación de usuarios en Dovecot

Una vez creadas las cuentas, tenemos que indicar a Dovecot donde se encuentra este archivo de passwords. Para ello, modificamos la sección auth default del archivo de configuración para indicar la ruta a los archivos de passwords que acabamos de crear:

auth default {
  mechanisms = plain login
    passdb pam {
      args = /home/%d/etc/passwd
    }
    userdb passwd {
      args = /home/%d/etc/passwd
    }
}

En la configuración, observar que %d hace referencia al dominio. Es decir, si Dovecot recibe una petición de usuario1@dominio1.com, sustituirá %d por dominio1.com, obteniendo la ruta correcta para validar al usuario.

Autenticación de usuarios Postfix => Dovecot (opcional)

Por último, una configuración opcional para validar los usuarios durante el envío de correo.

Si utilizáis Outlook o algún gestor de correo de escritorio, seguramente recordaréis un checkbox que indica «Mi servidor de salida requiere autenticación» y otro «Utilizar los mismos datos del servidor de entrada».

En este apartado forzaremos a los clientes de correo a validar usuario y contraseña antes de enviar un email, evitando de esa forma que cualquiera (spammers) pueda enviar correos desde nuestro servidor. Si no realiza esta configuración, no será necesario marcar esas casillas en el gestor de correo, y cualquiera podrá enviar emails sin identificarse.

Para conseguir utilizar los mismos datos de autenticación en correo entrante y saliente, Dovecot permite crear un servicio daemon de autenticación de usuarios, que Postfix puede utilizar para realizar la validación de usuario y contraseña.

Para ello sólo hay que indicar a Dovecot que cree el correspondiente daemon y permitr al usuario de postfix utilizarlo:

Editamos el fichero de configuración de Dovecot y modificamos la sección auth default:

auth default {
  mechanisms = plain login
    passdb pam {
      args = /home/%d/etc/passwd
    }
    userdb passwd {
      args = /home/%d/etc/passwd
    }
    socket listen {
      client {
        path = /var/spool/postfix/private/auth
        mode = 0660
        user = postfix
        group = postfix
     }
  }
}

Nota: En la sección client, se indica usuario y grupo postfix. Dicho usuario y grupo son creados durante la instalación de postfix en el sistema y por defecto son los indicados.

Igualmente, deberemos indicar a Postfix que se requiere autenticar al usuario para enviar emails, ya que por defecto permite el envío de emails con usuarios anónimos. También indicaremos que la autenticación se realiza mediante Dovecot:

Para ello, editamos el fichero de configuración de Postfix y añadimos las siguientes líneas:

smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes

Reinicio y configuración

Finalmente sólo nos resta reiniciar los servicios y comprobar:

server:/# /etc/init.d/saslauthd restart
server:/# /etc/init.d/postfix restart
server:/# /etc/init.d/dovecot restart

Si al comprobar el funcionamiento algo va mal, tendremos que recurrir a los logs de los servicios que estamos utilizando y que se encuentran en:

/var/log/mail.err



11 Comments

  • Responder Ruben |

    Impresionante tutorial. Tuve que instalarlo en un servidor y lo hice a prueba y error siguiendo varios tutoriales paso a paso. Tengo otra instalación pendiente la semana que viene y voy a seguir esto a ver que tal pero tiene buena pinta.

  • Responder Esteban |

    Saludos.. de mucha ayuda el tutorial gracias. Tengo una consulta agradecería si alguien me ayuda con la respuesta, actualmente tengo configurado mi servidor de correos postfix con dovecot todo funciona bien, si configuro el outlook por ejemplo envio y recibo normalmente, sin embargo no me autentica al escribir el nombre de usuario como «usuario@dominio.com» debo escribir solamente como «usuario», lo cual me da problemas en el webmail afterlogic en el cual se requiere «usuario@dominio.com» quisiera saber como configuro para que me acepte el usuario de la forma indicada .. espero me puedan ayudar

  • Responder Franj |

    Disculpa uno de los servicios que hay que reiniciar es «saslauthd» y me sale que no lo tengo instalado, no se si se instala con los paquetes que pones al principio con alguno extra. Gracias por tú tuto.

  • Responder edgar |

    buenas, todo me corre bien pero cuando llego a la seccion de «Autenticación de usuarios en Dovecot» y agrego las lineas que estan ahi al momento de ingresar no autentica el usuario (pero si lo dejo como estaba puedo iniciar sesion con los usuarios del sistema) supongo que es un error en el archivo passwd

  • Responder adrian |

    buenas una pregunta tengo un problema con un server de correo, en estos momentos anda de 10 lo tengo por una solo placa de red.
    Pero desde hace 1 semana tengo que habilitar otra placa de red, pero cuando lo hago no puedo enviar correos.
    mi server lo realice con este tutorial https://www.google.com.ar/#q=the+perfect+server+ubuntu+13.04

    como puedo hacerlo andar con dos placas de red?
    desde ya muchas gracias

  • Responder Cornelio |

    mi caso es que tengo instalado el postix en centos 7
    pero los correos no llegan.
    [root@winsoft mail]# telnet localhost smtp
    Trying ::1…
    Connected to localhost.
    Escape character is ‘^]’.
    220 mail.panamaplanilla.com ESMTP
    mail from:info
    250 2.1.0 Ok
    rctp to:info
    502 5.5.2 Error: command not recognized
    rcpt to:info
    250 2.1.5 Ok
    data
    354 End data with .
    test
    .
    250 2.0.0 Ok: queued as 53FD6C0E8361
    quit
    221 2.0.0 Bye
    Connection closed by foreign host.
    [root@winsoft mail]#

    segun esto todo esta ok…sin embargo los correos no llegan.

  • Responder gede448 |

    Esta bueno… pero estaría mejor responder las preguntas sobre el error que casi todos tenemos: los usuarios. No toma los usuarios virtuales.

    slds.

  • Responder Don_Fractal |

    Excelente tutorial!! Solo tengo una duda… tengo mi servidor dns en otro servidor, cómo vinculo los dominios otorgados para usar correos con esos dominios, es decir; en vez de usuario@dominio1.com y usuario@dominio2.com que YO mismo definí, lea del DNS las direcciones (carlos@rootbits.com)? no tengo inconvenientes con utilizar usuarios del sistema o virtuales.

Hey! Qué opinas sobre el artículo?