postfix y dovecot con usuarios virtuales mysql en debian wheezy
Post on 12-Jun-2015
3.332 Views
Preview:
DESCRIPTION
TRANSCRIPT
Servidor de Correo Debian Wheezy con los paquetes: Postfix, Dovecot, MySql
Postfix con usuarios virtuales MYSQL (backend)
1. Iniciamos sesión como usuario root ingresando el comando
#su
2. Ingresamos la contraseña asignada al usuario root.
3. Instalamos los paquetes necesarios para este tipo de configuración ingresando el
siguiente comando:
apt-get install postfix postfix-mysql dovecot-core dovecot-imapd
dovecot-pop3d dovecot-lmtpd dovecot-mysql mysql-server
4. Cuándo pregunte ingresamos una contraseña segura para el usuario administrador de
la base de datos MYSQL, como se muestra en la imagen:
Figura 1: Ingreso de contraseña para usuario root de MYSQL
5. Confirme la contraseña ingresada en la siguiente caja de texto.
Figura 2: Cuadro de confirmación de contraseña para usuario root de MYSQL
6. Cuando pregunte para seleccionar una configuración de Postfix. Seleccionamos “Sitio
de Internet” como se muestra en la imagen.
Cristian Cuesta
Figura 3: Preconfiguración 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 algún nombre de
dominio que resuelva a este servidor. Este vendría 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 continuación se explicará la configuración individual de cada aplicación para que
funcionen conjuntamente.
MYSQL
Primero crearemos una base de datos dedicada para el servidor de correo. Esta tendrás 3
tablas: una para dominios, otra con direcciones de correo y claves encriptadas y la última
con seudónimos de correo (alias). Además de esto crearemos un usuario mysql para las
aplicaciones Postfix y Dovecot.
Creación de la base de datos
Aquí se indica cómo crear la base de datos y las tablas necesarias en Mysql
1. Iniciamos sesión en mysql como usuario root desde una terminal ingresando lo
siguiente:
#mysql –u root –p
2. Nos solicita la contraseña, ingresamos la contraseña ingresada para el usuario
administrador (root) en el paso de instalación realizado anteriormente.
3. Creamos la base de datos con la siguiente instrucción: #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 específico: #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 sesión en mysql para trabajar como el usuario recientemente creado. #mysql> exit
8. Iniciamos sesión como el usuario postfixuser, como se ve en la imagen.
Figura 5: Ingreso a mysql como usuario postfixuser, usuario común 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 línea 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 contraseñas ingresando lo siguiente en la línea 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 línea 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 sección de valores en los comandos que se muestra a continuación, en el ejemplo se añade 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 sección de valores en los comandos que se muestra a continuación, en el ejemplo se añade 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 básicas:
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.
Configuración 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 parámetro como se indica:
mydestination = localhost
3. SASL (Simple Authentication and Security Layer). En español Capa Simple de
Autenticación y Seguridad, es el conjunto estandarizado para autenticación que
Postfix utiliza. La autenticación 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 autenticación de Dovecot.
smtpd_sasl_type = dovecot
4. A continuación se indica la ruta para el socket de autenticación se indica una ruta
relativa o la ruta completa /var/spool/postfix/private/auth
smtpd_sasl_path = private/auth
5. La siguiente línea le dice a Postfix que deje que las personas envíen correos usando
este servidor si ellos son autenticados satisfactoriamente. Si esta se fija como
apagado, Postfix dejaría a las personas enviar correo solo si ellos ya estaban en el
servidor. (por ejemplo: si ellos ya iniciaron sesión con SSH).
smtpd_sasl_auth_enable = yes
6. La próxima línea le dice a Postfix que tipos de usuarios se les permitirá enviar
correo a otras direcciones usando el servidor. (Específicamente esto aplica a
mensajes que tienen el componente RCPT TO). Los dos primeros parámetros
agregados le dicen a Postfix que permita enviar correo para usuarios autenticados
con SASL y usuarios conectados desde una red listada en el parámetro mynetworks
(En nuestro caso la interfaz de loopback y la red a la que pertenece el servidor). EL
parámetro 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 línea 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 envío 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 líneas 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 cómo conectarse a Mysql. 9. Procedemos a la creación de los 3 archivos antes mencionados; ajustamos los
parámetros 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 conexión 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 más, service postfix restart
14. Ahora verificamos si puede encontrar la primera dirección 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 información debe corresponder a la utilizada para su base de datos
Mysql. El archivo /etc/postfix/mysql-virtual-alias-maps.cf tendrá esta información:
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 dirección de correo a la que el alias responde.
Dovecot con soporte para MySQL
Se modificara un total de 7 archivos de configuración para Dovecot. Esta es la lista:
/etc/dovecot/dovecot.conf: Archivo principal de configuración.
/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 autenticación de
usuarios.
/etc/dovecot/conf.d/auth-sql.conf.ext: Nuevo archivo de autenticación para el
tipo de autenticación SQL.
/etc/dovecot/dovecot-sql.conf.ext: Un archivo de autenticación incluido con los
parámetros de conexión 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 parámetros 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 configuración de Dovecot
/etc/dovecot/dovecot.conf y verificamos que este incluyendo a los otros
archivos de configuración. Esta opción debería estar habilitada por defecto: !include conf.d/*.conf
3. Agregamos la siguiente línea 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 búsquedas de correos. En este caso los
correos serán almacenados en /home/vmail/tesisgad.com/usuario/ dónde
tesisgad.com y usuario son variables que son obtenidas desde la dirección de
correo electrónico que interviene en la conexión. Se debe hacer referencia a esta
ruta en los otros pasos de configuración 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 autenticación de usuario para edición ingresando el
comando en la línea inferior. Se necesita fijar la autenticación entonces solo
usuarios autenticados puedan leer correos en el servidor. También se necesita
configurar un socket de autenticación para el correo saliente desde que le dijimos
a Postfix que Dovecot maneje eso.
Hay pocos archivos diferentes relacionados a la autenticación
#nano /etc/dovecot/conf.d/10-auth.conf
12. Desactivamos la autenticación por texto plano descomentando esta línea: disable_plaintext_auth = yes
13. Fijamos el mecanismo de autenticación modificando la siguiente línea: auth_mechanism = plain login
14. Agregamos un signo numeral (#) para comentar la línea de inicio de sesión para
usuarios del sistema: #!include auth-system.conf.ext
15. Habilitamos la autenticación por MySql al descomentar la línea auth-
sql.conf.ext Esa sección debería 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
información de autenticación. Ingrese el siguiente comando para crear el nuevo
archivo: #nano /etc/dovecot/conf.d/auth-sql.conf.ext
18. Pegamos las siguientes líneas 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
}
Explicación de los parámetros:
passdb Le dice a Dovecot como encontrar los usuarios para autenticación. Le
decimos a Dovecot que use MySql. En la línea args, le especificamos el archivo que
contiene la información de conexión MySql.
userdb Le dice a Dovecot dónde buscar los correos de los usuarios en el servidor.
Nosotros usamos un controlador estático 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
información personalizada de conexión mysql. Abrimos el archivo para edición
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 línea connect y fijamos nuestra información de conexión
Mysql connect = host=127.0.0.1 dbname=postfixbd user=postfixuser
password=postfix
23. Descomentamos la línea default_pass_scheme y la fijamos a SHA512-CRYPT default_pass_scheme = SHA512-CRYPT
24. Descomentamos la línea de consulta de contraseña y la fijamos como se muestra.
Esta es una consulta mysql que Dovecot usa para extraer la contraseña 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 configuración 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 sección del servicio lmtp y usa la configuración que se muestra
debajo. Se debe agregar unas pocas líneas en el bloque de escucha unix
(unix_listener). En esta sección 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 sección service auth y usamos la configuración 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
sección hace el socket de autorización donde dijimos a Postfix que realice las
búsquedas.
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 sección service auth-worker, descomentamos la línea 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 configuración SSL para edición ingresando el siguiente
comando. En este le decimos a Dovecot donde encontrar nuestro certificado y
llave, además de cualquier otro parámetro relacionado a SSL. nano /etc/dovecot/conf.d/10-ssl.conf
35. Verificamos que la configuración de ssl_cert tenga la ruta hacia el certificado y que
la configuración de ssl_key tenga la ruta de nuestra llave. La configuración por
defecto aquí usa un certificado de Dovecot previamente creado durante la fase de
instalación, entonces se podría dejar tal y como está si se hace referencia al
certificado Dovecot. En nuestro caso cambiamos estás 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 encriptación 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
top related