Você está na página 1de 15

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.

#mysql> INSERT INTO `postfixbd`.`virtual_domains`
(`id` ,`name`)
VALUES
('1', 'tesisgad.com'),
('2', 'debian7cc.tesisgad.com'),
('3', 'debian7cc'),
('4', 'localhost.tesisgad.com');

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.

#mysql> INSERT INTO `postfixbd`.`virtual_users`
(`id`, `domain_id`, `password` , `email`)
VALUES
('1', '1', ENCRYPT('firstpassword', CONCAT('$6$',
SUBSTRING(SHA(RAND()), -16))), 'email1@tesisgad.com'),
('2', '1', ENCRYPT('secondpassword', CONCAT('$6$',
SUBSTRING(SHA(RAND()), -16))), 'email2@tesisgad.com');

3. Agregamos los alias de correo para las cuentas necesarias

INSERT INTO `postfixbd`.`virtual_aliases`
(`id`, `domain_id`, `source`, `destination`)
VALUES
('1', '1', 'soporte@tesisgad.com', 'email1@tesisgad.com'),
('2', '1', 'postmaster@tesisgad.com', 'email1@tesisgad.com');


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:

virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-
domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-
maps.cf
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf

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
}

unix_listener auth-userdb {
mode = 0600
user = vmail
#group =
}

# Postfix smtp-auth
#unix_listener /var/spool/postfix/private/auth {
# mode = 0666
#}

# 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

Você também pode gostar