Servidor de Correo Debian Wheezy con los paquetes: Postfix, Dovecot, MySql
Postfix con usuarios virtuales MYSQL (backend)
1. Iniciamos sesin como usuario root ingresando el comando #su 2. Ingresamos la contrasea asignada al usuario root. 3. Instalamos los paquetes necesarios para este tipo de configuracin ingresando el siguiente comando: apt-get install postfix postfix-mysql dovecot-core dovecot-imapd dovecot-pop3d dovecot-lmtpd dovecot-mysql mysql-server
4. Cundo pregunte ingresamos una contrasea segura para el usuario administrador de la base de datos MYSQL, como se muestra en la imagen:
Figura 1: Ingreso de contrasea para usuario root de MYSQL 5. Confirme la contrasea ingresada en la siguiente caja de texto.
Figura 2: Cuadro de confirmacin de contrasea para usuario root de MYSQL 6. Cuando pregunte para seleccionar una configuracin de Postfix. Seleccionamos Sitio de Internet como se muestra en la imagen. Cristian Cuesta
Figura 3: Preconfiguracin de Postfix 7. Se nos pedir ingresar un nombre para el sistema de nombre de correo, como se muestra en la parte inferior; podemos usar el FQDN del equipo o algn nombre de dominio que resuelva a este servidor. Este vendra a ser el dominio por defecto de nuestro servidor de correo cuando no se haya especificado ninguno.
Figura 4: Ingreso de nombre del Sistema de Correo. Hasta este momento se instal los paquetes para soportar las 3 aplicaciones: Postfix, Dovecot y Mysql A continuacin se explicar la configuracin individual de cada aplicacin para que funcionen conjuntamente.
MYSQL Primero crearemos una base de datos dedicada para el servidor de correo. Esta tendrs 3 tablas: una para dominios, otra con direcciones de correo y claves encriptadas y la ltima con seudnimos de correo (alias). Adems de esto crearemos un usuario mysql para las aplicaciones Postfix y Dovecot. Creacin de la base de datos Aqu se indica cmo crear la base de datos y las tablas necesarias en Mysql 1. Iniciamos sesin en mysql como usuario root desde una terminal ingresando lo siguiente: #mysql u root p
2. Nos solicita la contrasea, ingresamos la contrasea ingresada para el usuario administrador (root) en el paso de instalacin realizado anteriormente. 3. Creamos la base de datos con la siguiente instruccin: #mysql> CREATE DATABASE postfixbd; Query OK, 1 row affected (0.03 sec)
4. Seleccionamos la base de datos creada anteriormente: #mysql> use postfixbd; Database changed
5. Se asigna privilegios de la base de datos creada a un usuario especfico: #mysql> GRANT ALL PRIVILEGES ON postfixbd.* TO 'postfixuser'@'localhost' IDENTIFIED BY 'postfix'; Query OK, 0 rows affected (0.13 sec)
#mysql> GRANT ALL PRIVILEGES ON postfixbd.* TO 'postfixuser'@'127.0.0.1' IDENTIFIED BY 'postfix'; Query OK, 0 rows affected (0.13 sec)
6. Aplicamos los permisos asignados con la siguiente orden: #mysql> FLUSH PRIVILIGES; 7. Cerramos sesin en mysql para trabajar como el usuario recientemente creado. #mysql> exit 8. Iniciamos sesin como el usuario postfixuser, como se ve en la imagen.
Figura 5: Ingreso a mysql como usuario postfixuser, usuario comn para postfix y dovecot. 9. Seleccionamos la base de datos postfixbd. Luego procedemos a crear las tablas que necesitaremos para nuestro servidor. 10. Creamos la tabla para los dominios ingresando lo siguiente en la lnea de comandos mysql:
CREATE TABLE `virtual_domains` ( `id` int(11) NOT NULL auto_increment, `name` varchar(50) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 11. Creamos la tabla para las direcciones de correo y sus contraseas ingresando lo siguiente en la lnea de comandos mysql: CREATE TABLE `virtual_users` ( `id` int(11) NOT NULL auto_increment, `domain_id` int(11) NOT NULL, `password` varchar(106) NOT NULL, `email` varchar(100) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `email` (`email`), FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
12. Creamos la tabla para los alias de correo ingresando lo siguiente en la lnea de comandos mysql: CREATE TABLE `virtual_aliases` ( `id` int(11) NOT NULL auto_increment, `domain_id` int(11) NOT NULL, `source` varchar(100) NOT NULL, `destination` varchar(100) NOT NULL, PRIMARY KEY (`id`), FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Hasta este punto ya tenemos creadas las tablas en la base de datos para el servidor de correo, ahora procedemos a agregar datos a las tablas.
Agregando datos a la base de datos
1. Agregamos los dominios a la tabla virtual_domains. Se puede agregar tantos dominios como queramos en la seccin de valores en los comandos que se muestra a continuacin, en el ejemplo se aade solo el dominio primario (tesisgad.com) el nombre de equipo(hostname) el FQDN (debian7cc.tesisgad.com) y localhost.tesisgad.com, a cada uno de estos registros se le asignar un valor nico de id.
2. Agregamos los dominios a la tabla virtual_domains. Se puede agregar tantos dominios como queramos en la seccin de valores en los comandos que se muestra a continuacin, en el ejemplo se aade solo el dominio primario (tesisgad.com) el nombre de equipo(hostname) el FQDN (debian7cc.tesisgad.com) y localhost.tesisgad.com, a cada uno de estos registros se le asignar un valor nico de id.
Consultas de prueba a la base de datos Para constatar que los datos se ingresaron correctamente vamos a ingresar las siguientes consultas bsicas:
Figura 6: Consulta de todos los registros almacenados en la tabla virtual_domains.
Figura 7: Consulta de todos los registros almacenados en la tabla virtual_users.
Figura 8: Consulta de todos los registros almacenados en la tabla virtual_aliases.
Configuracin de Postfix para usuarios virtuales Mysql
1. Hacemos una copia de respaldo del archivo /etc/main.cf
cp /etc/postfix/main.cf /etc/postfix/main.cf.orig
2. Fijamos al mismo servidor de correo como destino, entonces se edita el siguiente parmetro como se indica:
mydestination = localhost
3. SASL (Simple Authentication and Security Layer). En espaol Capa Simple de Autenticacin y Seguridad, es el conjunto estandarizado para autenticacin que Postfix utiliza. La autenticacin es necesaria para que solo los usuarios autorizados puedan usar tu servidor para enviar correos. En este caso le decimos a Postfix que utilice la autenticacin de Dovecot. smtpd_sasl_type = dovecot 4. A continuacin se indica la ruta para el socket de autenticacin se indica una ruta relativa o la ruta completa /var/spool/postfix/private/auth smtpd_sasl_path = private/auth 5. La siguiente lnea le dice a Postfix que deje que las personas enven correos usando este servidor si ellos son autenticados satisfactoriamente. Si esta se fija como apagado, Postfix dejara a las personas enviar correo solo si ellos ya estaban en el servidor. (por ejemplo: si ellos ya iniciaron sesin con SSH). smtpd_sasl_auth_enable = yes 6. La prxima lnea le dice a Postfix que tipos de usuarios se les permitir enviar correo a otras direcciones usando el servidor. (Especficamente esto aplica a mensajes que tienen el componente RCPT TO). Los dos primeros parmetros agregados le dicen a Postfix que permita enviar correo para usuarios autenticados con SASL y usuarios conectados desde una red listada en el parmetro mynetworks (En nuestro caso la interfaz de loopback y la red a la que pertenece el servidor). EL parmetro final le dice a Postfix que rechace enviar correos a menos que el destino sea para alguien en este servidor. smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination 7. En la siguiente lnea reemplazamos el valor asignado a mydestination por localhost. Esto nos permite usar los dominios virtuales listados en nuestra tabla Mysql. Es importante que no haya superposiciones entre la tabla Mysql y la entrada en mydestination. Mantener la entrada localhost en mydestination nos deja permanecer las cosas simples para el envo de correo dentro del servidor usando localhost, lo que puede ser de ayuda si siempre se tiene problemas con los dominios virtuales. mydestination = localhost
8. Agregamos las siguientes lneas correspondientes a dominios, usuarios y alias virtuales:
En cada uno de estos archivos se indica los detalles de cmo conectarse a Mysql. 9. Procedemos a la creacin de los 3 archivos antes mencionados; ajustamos los parmetros de acuerdo a la base de datos que creamos anteriormente. El contenido para el archivo de los dominios virtuales: /etc/postfix/mysql-virtual- mailbox-domains.cf ser user = postfixuser password = postfix hosts = 127.0.0.1 dbname = postfixbd query = SELECT 1 FROM virtual_domains WHERE name='%s'
10. Reiniciamos Postfix con el siguiente comando: service postfix restart
11. Ingresamos el siguiente comando para asegurarnos que Postfix puede encontrar tu primer dominio. El comando debe responder con 1 si tuvo xito, y si no se obtuvo nada es porque se tiene un incoveniente. postmap -q tesisgad.com mysql:/etc/postfix/mysql-virtual-mailbox- domains.cf 12. Creamos el archivo de conexin para las direcciones de correo /etc/postfix/mysql- virtual-mailbox-maps.cf con el siguiente contenido: user = postfixuser password = postfix hosts = 127.0.0.1 dbname = postfixbd query = SELECT 1 FROM virtual_users WHERE email='%s' 13. Reiniciamos Postfix una vez ms, service postfix restart
14. Ahora verificamos si puede encontrar la primera direccin de correo en nuestra tabla Mysql. El resultado correcto es un 1 como salida. postmap -q email1@example.com mysql:/etc/postfix/mysql-virtual- mailbox-maps.cf 15. Creamos el archivo correspondiente a los alias virtuales, al igual que en los pasos anteriores la informacin debe corresponder a la utilizada para su base de datos Mysql. El archivo /etc/postfix/mysql-virtual-alias-maps.cf tendr esta informacin: user = postfixuser password = postfix hosts = 127.0.0.1 dbname = postfixbd query = SELECT destination FROM virtual_aliases WHERE source='%s' 16. Reiniciamos Postfix service postfix restart 17. Ahora probamos si puede encontrar nuestros alias ingresando el siguiente comando: postmap -q alias@example.com mysql:/etc/postfix/mysql-virtual- alias-maps.cf La salida debe devolver la direccin de correo a la que el alias responde. Dovecot con soporte para MySQL Se modificara un total de 7 archivos de configuracin para Dovecot. Esta es la lista: /etc/dovecot/dovecot.conf: Archivo principal de configuracin. /etc/dovecot/conf.d/10-mail.conf: Negocia el sistema de archivos de servidor. /etc/dovecot/conf.d/10-auth.conf: Define como se maneja la autenticacin de usuarios. /etc/dovecot/conf.d/auth-sql.conf.ext: Nuevo archivo de autenticacin para el tipo de autenticacin SQL. /etc/dovecot/dovecot-sql.conf.ext: Un archivo de autenticacin incluido con los parmetros de conexin MYSQL. /etc/dovecot/conf.d/10-master.conf: En este archivo son configurados los sockets. /etc/dovecot/conf.d/10-ssl.conf: Aqu se especifica los parmetros relacionados a SSL. Pasos para configurar Dovecot para soporte Mysql 1. Hacemos una copia de respaldo los archivos antes mencionados: cp /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.orig cp /etc/dovecot/conf.d/10-mail.conf /etc/dovecot/conf.d/10- mail.conf.orig cp /etc/dovecot/conf.d/10-auth.conf /etc/dovecot/conf.d/10- auth.conf.orig cp /etc/dovecot/dovecot-sql.conf.ext /etc/dovecot/dovecot- sql.conf.ext.orig cp /etc/dovecot/conf.d/10-master.conf /etc/dovecot/conf.d/10- master.conf.orig cp /etc/dovecot/conf.d/10-ssl.conf /etc/dovecot/conf.d/10- ssl.conf.orig 2. Procedemos a editar el archivo principal de configuracin de Dovecot /etc/dovecot/dovecot.conf y verificamos que este incluyendo a los otros archivos de configuracin. Esta opcin debera estar habilitada por defecto: !include conf.d/*.conf 3. Agregamos la siguiente lnea a /etc/dovecot/dovecot.conf protocols = imap pop3 Es para especificar los protocolos a utilizar con Dovecot. 4. Abrimos el archivo 10-mail.conf encontramos la variable mail_location y la fijamos con el siguiente valor: mail_location = maildir:/home/vmail/%d/%n/
Esto le dice a Dovecot donde realizar las bsquedas de correos. En este caso los correos sern almacenados en /home/vmail/tesisgad.com/usuario/ dnde tesisgad.com y usuario son variables que son obtenidas desde la direccin de correo electrnico que interviene en la conexin. Se debe hacer referencia a esta ruta en los otros pasos de configuracin que necesiten hacer uso de esta variable. 5. Guardamos los cambios en el archivo /etc/dovecot/conf.d/10-mail.conf 6. Creamos el usuario vmail con valor 5000 para usuario id y grupo id, lo hacemos con los siguientes comandos. Este usuario ser el encargado de leer el correo desde el servidor. groupadd -g 5000 vmail useradd -g vmail -u 5000 vmail -d /home/vmail 7. Verificamos los permisos para /home/vmail con el siguiente comando: ls -ld /home/vmail 8. Comprobamos que los permisos sean los siguientes: drwxrwxrw- 7 vmail vmail 4096 nov 14 11:36 /home/vmail 9. En caso de estar asignado a otro usuario, tomamos propiedad del directorio con el siguiente comando: #chown R vmail:vmail /home/vmail 10. Creamos una carpeta con el nombre del dominio a utilizar #mkdir p /home/vmail/tesisgad.com 11. Abrimos el archivo de autenticacin de usuario para edicin ingresando el comando en la lnea inferior. Se necesita fijar la autenticacin entonces solo usuarios autenticados puedan leer correos en el servidor. Tambin se necesita configurar un socket de autenticacin para el correo saliente desde que le dijimos a Postfix que Dovecot maneje eso. Hay pocos archivos diferentes relacionados a la autenticacin #nano /etc/dovecot/conf.d/10-auth.conf 12. Desactivamos la autenticacin por texto plano descomentando esta lnea: disable_plaintext_auth = yes 13. Fijamos el mecanismo de autenticacin modificando la siguiente lnea: auth_mechanism = plain login 14. Agregamos un signo numeral (#) para comentar la lnea de inicio de sesin para usuarios del sistema: #!include auth-system.conf.ext 15. Habilitamos la autenticacin por MySql al descomentar la lnea auth- sql.conf.ext Esa seccin debera verse as:
#!include auth-system.conf.ext !include auth-sql.conf.ext #!include auth-ldap.conf.ext #!include auth-passwdfile.conf.ext #!include auth-checkpassword.conf.ext #!include auth-vpopmail.conf.ext #!include auth-static.conf.ext 16. Guardamos los cambios realizados en el archivo: /etc/dovecot/conf.d/10-auth.conf 17. Ahora debemos crear el archivo /etc/dovecot/conf.d/auth-sql.conf.ext con nuestra informacin de autenticacin. Ingrese el siguiente comando para crear el nuevo archivo: #nano /etc/dovecot/conf.d/auth-sql.conf.ext
18. Pegamos las siguientes lneas en el nuevo archivo: passdb { driver = sql args = /etc/dovecot/dovecot-sql.conf.ext } userdb { driver = static args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n } Explicacin de los parmetros: passdb Le dice a Dovecot como encontrar los usuarios para autenticacin. Le decimos a Dovecot que use MySql. En la lnea args, le especificamos el archivo que contiene la informacin de conexin MySql. userdb Le dice a Dovecot dnde buscar los correos de los usuarios en el servidor. Nosotros usamos un controlador esttico ya que la ruta estar en el mismo formato para cualquiera. 19. Guardamos los cambios en el archivo /etc/dovecot/conf.d/auth-sql.conf.ext 20. Actualizamos el archivo /etc/dovecot/dovecot-sql.conf.ext con nuestra informacin personalizada de conexin mysql. Abrimos el archivo para edicin ingresando el siguiente comando: #nano /etc/dovecot/dovecot-sql.conf.ext
21. Descomentamos y fijamos el controlador como se muestra en la parte inferior: driver = mysql 22. Descomentamos la lnea connect y fijamos nuestra informacin de conexin Mysql connect = host=127.0.0.1 dbname=postfixbd user=postfixuser password=postfix 23. Descomentamos la lnea default_pass_scheme y la fijamos a SHA512-CRYPT default_pass_scheme = SHA512-CRYPT 24. Descomentamos la lnea de consulta de contrasea y la fijamos como se muestra. Esta es una consulta mysql que Dovecot usa para extraer la contrasea desde la base de datos. password_query = SELECT email as user, password FROM virtual_users WHERE email='%u'; 25. Guardamos los cambios en el archivo /etc/dovecot/dovecot-sql.conf.ext 26. Cambiamos el propietario y grupo para el directorio /etc/dovecot/ a vmail y dovecot ingresando el siguiente comando: #chown -R vmail:dovecot /etc/dovecot
27. Cambiamos los permisos sobre el directorio /etc/dovecot ingresando el siguiente comando: chmod -R o-rwx /etc/dovecot
28. Abrimos el archivo de configuracin de sockets ingresando el siguiente comando. nano /etc/dovecot/conf.d/10-master.conf 29. Desactive IMAP y POP3 no encriptados al configurar los protocolos a 0, como se muestra en la parte inferior. Esto forzara a tus usuarios a usar IMAP seguro o POP3 seguro en los puertos 993 o 995 cuando ellos configuren sus clientes de correo. Extracto del archivo: /etc/dovecot/conf.d/10-master.conf
service imap-login { inet_listener imap { port = 0 } ... }
service pop3-login { inet_listener pop3 { port = 0 } ... } 30. Encuentra la seccin del servicio lmtp y usa la configuracin que se muestra debajo. Se debe agregar unas pocas lneas en el bloque de escucha unix (unix_listener). En esta seccin hace el socket LMTP en lugar de decirle a Postfix donde buscarlo. Extracto del archivo: /etc/dovecot/conf.d/10-master.conf
service lmtp { unix_listener /var/spool/postfix/private/dovecot-lmtp { mode = 0600 user = postfix group = postfix } # Create inet listener only if you can't use the above UNIX socket #inet_listener lmtp { # Avoid making LMTP visible for the entire internet #address = #port = #} } 31. Localizamos la seccin service auth y usamos la configuracin que se indica en la parte inferior. Se necesita crear un nuevo bloque de escucha unix (unix_listener), modificar el existente, descomentar y fijar el usuario. Esta seccin hace el socket de autorizacin donde dijimos a Postfix que realice las bsquedas.
Extracto del archivo: /etc/dovecot/conf.d/10-master.conf
service auth { # auth_socket_path points to this userdb socket by default. It's typically # used by dovecot-lda, doveadm, possibly imap process, etc. Its default # permissions make it readable only by root, but you may need to relax these # permissions. Users that have access to this socket are able to get a list # of all usernames and get results of everyone's userdb lookups. unix_listener /var/spool/postfix/private/auth { mode = 0666 user = postfix group = postfix }
# Auth process is run as this user. user = dovecot }
32. En la seccin service auth-worker, descomentamos la lnea user y la fijamos a vmail, como se muestra debajo: Extracto del archivo: /etc/dovecot/conf.d/10-master.conf
service auth-worker { # Auth worker process is run as root by default, so that it can access # /etc/shadow. If this isn't necessary, the user should be changed to # $default_internal_user. user = vmail }
33. Guardamos los cambios realizados en el archivo /etc/dovecot/conf.d/10- master.conf 34. Abrimos el archivo de configuracin SSL para edicin ingresando el siguiente comando. En este le decimos a Dovecot donde encontrar nuestro certificado y llave, adems de cualquier otro parmetro relacionado a SSL. nano /etc/dovecot/conf.d/10-ssl.conf
35. Verificamos que la configuracin de ssl_cert tenga la ruta hacia el certificado y que la configuracin de ssl_key tenga la ruta de nuestra llave. La configuracin por defecto aqu usa un certificado de Dovecot previamente creado durante la fase de instalacin, entonces se podra dejar tal y como est si se hace referencia al certificado Dovecot. En nuestro caso cambiamos ests rutas porque utilizamos certificados autofirmados previamente creados: Extracto del archivo: /etc/dovecot/conf.d/10-ssl.conf ssl_cert = </etc/ssl/certs/tesisgad.com.crt ssl_key = </etc/ssl/certs/tesisgad.com.key
36. Forzamos a tus clientes a usar encriptacin SSL para todas las conexiones. Fijamos ssl to required ssl = required 37. Guardamos los cambios en el archivo /etc/dovecot/conf.d/10-ssl.conf Dovecot ha sido ya configurado. 38. Reiniciamos el servicio Dovecot ingresando el siguiente comando: service dovecot restart [4] [4] https://library.linode.com/email/postfix/postfix2.9.6-dovecot2.0.19-mysql